linux设置rtc默认时间,RTCTime 设置和使用 详解

本文详细介绍了Linux中实时时钟(RTC)的初始化、读取时间的函数以及相关寄存器的解释,展示了如何设置和获取RTC的时间值,帮助理解RTC的工作原理。
AI助手已提取文章相关产品:

RTCTimer和普通的Timer相比可以定时的范围更大 而且它可以当作一个实时钟使用

可以到 年,月,时,分,秒,但是注意它的精度 只能达到秒 也就是说它的精确度和Timer相比是很低的

但各有各的用吧  如果使用RTC则CPU就不能进入掉电模式 因为RTC没有独立的时钟源 它的频率是由Fplck分频得到的

一下就说一下实时钟的使用设置

RTC的初始化

/****************************************************************************

* 名称:RTCIni()

* 功能:初始化实时时钟。

* 入口参数:无

* 出口参数:无

****************************************************************************/

void  RTCIni(void)

{

PREINT = Fpclk / 32768 - 1;   // 设置基准时钟分频器

PREFRAC = Fpclk - (Fpclk / 32768) * 32768;

YEAR = 2004;           // 初始化年

MONTH = 2;          // 初始化月

DOM = 19;          // 初始化日

HOUR = 8;

MIN = 30;

SEC = 0;

CIIR = 0x01;          // 设置秒值的增量产生一次中断

CCR = 0x01;          // 启动RTC

}

struct DATE

{

uint16      year;

uint8       mon;

uint8       day;

uint8       dow;

};

struct TIME

{

uint8       hour;

uint8       min;

uint8       sec;

};

/****************************************************************************

*  名称:GetTime()

*  功能:读取RTC 的时钟值。

*  入口参数:d            保存日期的DATE 结构变量的指针

*             t      保存时间的TIME 结构变量的指针

*  出口参数:无

****************************************************************************/

void  GetTime(struct DATE *d,   struct TIME *t)

{

d->year = YEAR;

d->mon = MONTH;

d->day = DOM;

t->hour = HOUR;

t->min = MIN;

t->sec = SEC;

}

按读完整时间寄存器方式读取RTC 时钟程序如程序清单5.42 所示,其中DATA、TIME

结构与程序

读取 RTC 时钟值—完整时间寄存器

/****************************************************************************

*  名称:GetTime()

*  功能:读取RTC 的时钟值。

*  入口参数:d       保存日期的DATE 结构变量的指针

*         t     保存时间的TIME 结构变量的指针

* 出口参数:无

****************************************************************************/

void GetTime(struct DATE *d, struct TIME *t)

{   uint32 times, dates;

times = CTIME0;

dates = CTIME1;

d->year = (dates>>16)&0xFFF;   // 取得年的值

d->mon = (dates>>8)&0x0F;      // 取得月的值

d->day = dates&0x1F;           // 取得日的值

t->hour = (times>>16)&0x1F;    // 取得时的值

t->min = (times>>8)&0x3F;      // 取得分的值

t->sec = times&0x3F;           // 取得秒的值

}

根据下面的这个表 看懂上面的程序应该就和简单了吧

CTIME0    功能     描述

31:27    保留     保留,用户软件不要向其写入 1。从保留位读出的值未被定义。

26:24    星期     星期值    该值的范围为0~6。

23:21    保留     保留,用户软件不要向其写入 1。从保留位读出的值未被定义。

20:16    小时     小时值  该值的范围为0~23。

15:14    保留     保留,用户软件不要向其写入 1。从保留位读出的值未被定义。

13:8     分     分值   该值的范围为0~59。

7:6     保留     保留,用户软件不要向其写入 1。从保留位读出的值未被定义。

5:0      秒     秒值   该值的范围为0~59。

在做时钟时 如何设置时间

有了上面的程序这个问题似乎变得很简单了

只要在GetTime里面的到值之后 别的不用变 直接修改你要修改的那项的就可以了

比如把年设置为2010年 YEAR=2010 就可以了

您可能感兴趣的与本文相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值