<nav id="gb9pn"></nav>

  1. <form id="gb9pn"><legend id="gb9pn"></legend></form>

    <form id="gb9pn"><legend id="gb9pn"><video id="gb9pn"></video></legend></form>
  2. 当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 >
    实时时钟RTC
    时间:2018-08-16作者:华清远见

    实时时钟的缩写是RTC(Real_Time Clock)。RTC 是集成电路,通常称为时钟芯片。RTC通常情况下需要外接32.768kHz晶体,匹配电容、备份电源等元件。RTC除了I/O口的定位不同,还有功能上的区别,比如与MCU的接口,现在常用的是I2C接口(距离短,可以与其他器件共用)还有RAM的数量、静态功耗大小、中断的数量,特别是精度的区别。 RTC的精度可以说与温度有很大的关系,而温度会影响晶体的频率。本章介绍的是集成在芯片内部的时钟功能?。

    1 RTC介绍

    在一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz晶体和电阻电容等,如图1所示。



    图12-1 RTC外接电路

    2 RTC控制器

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


    图12-2 RTC控制器

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

    3 RTC控制器寄存器详解

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

    表3 RTC控制寄存器

    RTCCON 描述 复位值
    保留 [31:9] 保留 0
    TICEN [8] 嘀嗒计时器
    0 = 禁止
    1 = 使能
    0
    TICCKSEL [7:4] 嘀嗒计时器子时钟源选择
    4'b0000 = 32768 Hz       4'b0001 = 16384 Hz
    4'b0010 = 8192 Hz        4'b0011 = 4096 Hz
    4'b0100 = 2048 Hz        4'b0101 =1024 Hz
    4'b0110 =512 Hz          4'b0111 =256 Hz
    4'b1000 =128 Hz          4'b1001 =64 Hz
    4'b1010 =32 Hz           4'b1011 =16 Hz
    4'b1100 =8 Hz            4'b1101 =4 Hz
    4'b1110 =2 Hz            4'b1111 =1 Hz
    4'b0000
    CLKRST [3] RTC时钟计数复位
    0 = 不复位
    1 = 复位
    0
    CNTSEL [2] BCD计数选择
    0 = 分配 BCD 计数
    1 = 保留
    0
    CLKSEL [1] BCD 时钟选择
    0 = XTAL 1/2 divided clock
    1 = 保留(XTAL 供频)
    0
    RTCEN [0] RTC控制使能
    0 = 禁止
    1 = 使能
    0

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

    表4 BCDSEC寄存器

    BCDSEC 描述 复位值
    保留 [31:7] 保留 --
    SECDATA [6:4] BCD 值 0~5 --
    [3:0] 0~9 --

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

    表5 BCDMIN寄存器

    BCDMIN 描述 复位值
    保留 [31:7] 保留 --
    MINDATA [6:4] BCD 值 0~5 --
    [3:0] 0~9 --

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

    表6 BCDHOUR寄存器

    BCDHOUR 描述 复位值
    保留 [31:7] 保留 --
    HOURDATA [5:4] BCD 值 0~5 --
    [3:0] 0~9 --

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

    表7 BCDDATE寄存器

    BCDDATE 描述 复位值
    保留 [31:7] 保留 --
    DATEDATA [5:4] BCD 值 0~3 --
    [3:0] 0~9 --

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

    表8 BCDDAY寄存器

    BCDDAY 描述 复位值
    保留 [31:3] 保留 --
    DAYDATA [2:0] 1~7 --

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

    表9 BCDMON寄存器

    BCDMON 描述 复位值
    保留 [31:5] 保留 --
    MONDATA [4] BCD 值 0~1 --
      [3:0] 0~9 --

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

    表10 BCDYEAR寄存器

    BCDYEAR 描述 复位值
    保留 [31:8] 保留 --
    YEARDATA [7:4] BCD 值 0~9 --
    [3:0] 0~9 --

    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)

    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;
            }

    2.实验过程及现象:

    编译生成的.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


    发表评论

    全国咨询电话:400-611-6270,双休日及节假日请致电值班手机:15010390966

    在线咨询: 曹老师QQ(3337544669), 徐老师QQ(1462495461), 刘老师 QQ(3108687497)

    企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300)

    Copyright 2004-2018 华清远见教育集团 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号

    welcome购彩中心