查看: 1076|回复: 0

[讨论] RTC介绍、寄存器详解以及应用示例

[复制链接]
  • TA的每日心情
    开心
    2019-11-4 13:48
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-9-3 09:42:21 | 显示全部楼层 |阅读模式
    分享到:
    实时时钟的缩写是RTC(Real_time clock)。RTC 是集成电路,通常称为时钟芯片。RTC通常情况下需要外接32.768kHz晶体,匹配电容、备份电源元件。RTC除了I/O口的定位不同,还有功能上的区别,比如与MCU的接口,现在常用的是I2C接口(距离短,可以与其他器件共用)还有RAM的数量、静态功耗大小、中断的数量,特别是精度的区别。 RTC的精度可以说与温度有很大的关系,而温度会影响晶体的频率。本章介绍的是集成在芯片内部的时钟功能模块。
    1 RTC介绍
    在一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz晶体和电阻电容等,如图1所示。

    2 RTC控制器

    实时时钟(RTC)单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继续工作。RTC 可以通过STRB/LDRB 指令将8 位BCD 码数据送至CPU。这些BCD 数据包括秒、分、时、日期、星期、月和年。RTC 单元通过一个外部的32.768kHz晶振提供时钟。

            ● 时钟数据采用BCD 编码。
            ● 能够对闰年的年月日进行自动处理。
            ● 具有告警功能,当系统处于关机状态时,能产生告警中断。
            ● 具有独立的电源输入。
            ● 提供毫秒级时钟中断,该中断可用于作为嵌入操作系统的内核时钟。

    3 RTC控制器寄存器详解

    如表3所示为相关寄存器描述。

    如表4所示为BCD秒寄存器描述。

    如表5所示为BCD分钟寄存器描述。

    如表6所示为BCD小时寄存器描述。

    如表7所示为BCD日期寄存器描述。

    如表8所示为BCD星期寄存器描述。

    如表9所示为BCD月寄存器描述。

    如表10所示为BCD年寄存器描述。


    4 RTC应用示例

    1).相关寄存器定义
    • typedef struct {
    •                         unsigned int BCDSEC;
    •                         unsigned int BCDMIN;
    •                         unsigned int BCDHOUR;
    •                         unsigned int BCDDATE;
    •                         unsigned int BCDDAY;
    •                         unsigned int BCDMON;
    •                         unsigned int BCDYEAR;
    •         }rtcbcd;
    •         #define RTCBCD (* (volatile rtcbcd *)0xEA300070)

    [color=rgb(51, 102, 153) !important]复制代码

    2).主程序

    下面的代码实现了一个将RTC的年月日、时分秒读出的功能,可以将注释掉的代码打开来复位值。
    • void rtc_init(void)
    •         {
    •                 RTCCON = 0X01; //使能RTC控制些功能
    •                 RTCBCD.BCDSEC = 0x0; // 2012 03 15, 12:59:00.以BCD码格式写入
    •                 RTCBCD.BCDMIN = 0x59;
    •                 RTCBCD.BCDHOUR =0x12;
    •    &nbsnbsp;            RTCBCD.BCDDATE = 0x15;
    •                 RTCBCD.BCDMON = 0x03;
    •                 RTCBCD.BCDYEAR = 0x12;
    •                 RTCCON = 0; //关闭RTC控制些功能
    •         }
    •         int main()
    •         {
    •                 unsigned int i = 0;
    •                 uart0_init();
    •                 rtc_init(); //初始化时间
    •                 while(1) //循环打印时间
    •                 {
    •                         printf("hour %x : min %x : sec %x\r",RTCBCD.BCDHOUR,RTCBCD.BCDMIN,RTCBCD.BCDSEC);
    •                         for(i=0;i<10000000;i++);
    •                 }
    •                 return 0;
    •         }

    [color=rgb(51, 102, 153) !important]复制代码

    3).实验过程及现象:

    编译生成的.elf文件,硬件接线。并连接好FS_JTAG仿真器套件。将程序编译后获得.elf文件,将该文件通过仿真器下载并运行在目标版上,终端打印信息如下所示。
    • hour 12 : min 59 : sec 17
    •         hour 12 : min 59 : sec 18
    •         hour 12 : min 59 : sec 19
    •         hour 12 : min 59 : sec 20

    [color=rgb(51, 102, 153) !important]复制代码




















    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 19:35 , Processed in 0.107340 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.