arm实时钟rtc

上传人:千****8 文档编号:118837468 上传时间:2019-12-26 格式:PPT 页数:45 大小:522.50KB
返回 下载 相关 举报
arm实时钟rtc_第1页
第1页 / 共45页
arm实时钟rtc_第2页
第2页 / 共45页
arm实时钟rtc_第3页
第3页 / 共45页
arm实时钟rtc_第4页
第4页 / 共45页
arm实时钟rtc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《arm实时钟rtc》由会员分享,可在线阅读,更多相关《arm实时钟rtc(45页珍藏版)》请在金锄头文库上搜索。

1、实时钟RTC,主要内容 概述 结构 寄存器 应用举例,重点: (1)控制寄存器; (2)RTC应用,一、概 述 RTC(实时时钟)功能:通常采用RTC 来提供可靠的系统时间,包括时、分、秒、和年、月、日等;而且要求在系统处于关机状态下它也能够正常工作(后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768KHz 晶振和电阻电容等。 RTC应用:现在很多电子产品都有RTC功能,如电子日历(台式、壁式等)、手持数码产品(手机、电子词典、各种学习机、照相机、摄像机等)、电子计量仪表(电度表、燃气表、水表等)、家用电器(电视机、机顶盒、DVD等)等,应用非常广泛。,R

2、TC芯片:在上面所说产品,都有RTC功能的芯片,有的产品使用独立的RTC芯片,如壁式电子日历、电子计量仪表等;有的产品使用的不是独立的RTC芯片,而是RTC功能集成到了其它的芯片中,如手持数码产品等。 S3C2410的RTC的特点: 时钟数据采用BCD 编码 时钟数据有:秒、分、时、日、月、年、星期 能够对闰年的年月日进行自动处理 具有告警功能,当系统处于关机状态时,能产生告警中断 具有独立的电源输入 提供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟,二、S3C2410的RTC结构 1、S3C2410的RTC结构 S3C2410的RTC主要有5部分构成:时钟发生器、节拍发生器、时间

3、与日期计数器(时分秒年月日星期)、报警发生器、控制逻辑等部分。如下图所示。,时钟分频器,节拍发生器,报警发生器,掉电,唤醒信号,报警中断,闰 年 发 生 器,控 制 逻 辑,RTC秒循环 复位寄存器,闰年产生器,这个模块可以决定每个月的最后日期是28,29,30 还是31,并可以根据是否是闰年来决定日期。 由于8 位的计数器只能表示2 个BCD 码,因此它不能判断00 年究竟是不是闰年。 例如它不能够判断1900 年和2000 的差别。为了解决这个问题,S3C2410 内的RTC 模块中有一个固定的逻辑,用来支持2000 年为闰年。请注意虽然2000 年是闰年,但1900 年不是闰年。因此,S

4、3C2410 中00 代表2000 年,而不是1900 年。,2、S3C2410 RTC的振荡电路 S3C2410 RTC的只需外接2个20P左右的小电容、32.768KHz的晶振即可。如下图所示。,三、RTC专用寄存器 S3C2410的RTC有17个专用寄存器,均需用字节读写。下表为前10个,有4个为控制寄存器,6个为报警寄存器。,三、RTC专用寄存器 S3C2410的RTC有17个专用寄存器,均需用字节读写。下表为4个控制寄存器。,本表6个寄存器:为报警日期、时间寄存器,后7个寄存器: 为日期、时间寄存器。,寄存器需字节读取,#define rRTCCON (*(volatile unsi

5、gned char *)0x57000040) /RTC control #define rTICNT (*(volatile unsigned char *)0x57000044) /Tick time count #define rRTCALM (*(volatile unsigned char *)0x57000050) /RTC alarm control #define rALMSEC (*(volatile unsigned char *)0x57000054) /Alarm second #define rALMMIN (*(volatile unsigned char *)0x

6、57000058) /Alarm minute #define rALMHOUR (*(volatile unsigned char *)0x5700005c) /Alarm Hour #define rALMDATE (*(volatile unsigned char *)0x57000060) /Alarm day #define rALMMON (*(volatile unsigned char *)0x57000064) /Alarm month #define rALMYEAR (*(volatile unsigned char *)0x57000068) /Alarm year #

7、define rRTCRST (*(volatile unsigned char *)0x5700006c) /RTC round reset .,1、RTC控制寄存器(RTCCON),2、RTC节拍时间计数器(TICNT),说明:这个计数器的值在内部减少,用户不能在工作时读取这个计数器的值。,RTC 节拍时间用于中断请求。TICNT 寄存器具有一个中断使能位,同时其中的计数值用于中断。当计数值到达0 时,节拍时间中断就会触发。中断的间隔时间计算如下: Period=(n+1)/128 秒 n : 节拍时间计数值(1127),3、RTC报警控制寄存器(RTCCON),3、RTC报警控制寄存器(

8、RTCCON),4、RTC报警秒数寄存器(ALMSEC),5、报警时间分钟数寄存器(ALMMIN),6、报警时间小时数寄存器(ALMHOUR),7、RTC报警天数寄存器(ALMDATE),8、报警时间月数寄存器(ALMMON),9、报警时间年数寄存器(ALMYEAR),说明:年数的千位和百位应该是20。,10、秒循环复位寄存器(RTCRST),说明:对于秒循环进位边界设为其它值,到设定值只复位,但不会向分钟进位。,11、当前时间秒数寄存器(BCDSEC),12、当前时间分钟寄存器(BCDMIN),13、当前时间小时数寄存器(BCDHOUR),14、当前日期天数寄存器(BCDDATE),15、当

9、前星期寄存器(BCDDAY),1:星期日; 2:星期一; 3:星期二; 4:星期三; 5:星期四; 6:星期五; 7:星期六,16、当前日期月数寄存器(BCDMON),17、当前日期年数寄存器(BCDYEAR),说明:年数的千位和百位应该是20,四、S3C2410 RTC使用方法 1、读/写寄存器 (1)设置允许读写:对寄存器RTCCON 的0 位写1 。 (2)显示时间、日期方法:需要不断地从BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON、和BCDYEAR 寄存器读取数据,然后显示出来。,(3)可能会引起显示错误。 例如,假设用户在2006 年12 月

10、31 日23 点59 分59秒读取寄存器BCDYEAR 到BCDSEC,在用户读取BCDSEC 寄存器时,如果结果是0,那么很有可能年、月、日、时、分已经变成了2007 年1 月1 日0 时0 分了,数据组合在一起可能是错的。读取的数据可能是: 1) 2006 年12 月1 日0 时0分 2) 2006 年1 月1 日0 时0 分,等 解决的方法:当读取到的BCDSEC 等于0 时,用户应该再读取一次BCDYEAR到BCDSEC 的值。,2、报警功能 RTC的报警寄存器(RTCALM)决定了报警的使能、禁止、以及报警时间设定的条件。 在RTC报警的使能情况下: (1)在正常工作模式下,报警中断

11、(ALMINT)是激活状态的。 (2)在掉电模式下(PWDN信号有效),电源管理唤醒信号(PMWKUP)与报警中断(ALMINT)都是激活状态。,3、节拍中断 RTC 节拍用于中断请求。 TICNT 寄存器:有中断使能位、节拍时间位。 当节拍计数值到达0 时,就会触发节拍中断。节拍中断的间隔时间计算如下: Period=(n+1)/128 秒 n :节拍时间计数值(1127) 说明:RTC 节拍中断可以作为RTOS(实时操作系统)内核的时间节拍。,电路图,五、应用举例 例:编写一程序,对S3C2410的RTC进行设置,使用节拍中断,每1秒中断一次,中断后显示出当前的日期和时间。初始日期、时间设

12、置为正确值。 解: 1、设置控制寄存器 : RTCCON=0x0 0 0 1 = 0x01 含义:RTC不复位、正常BCD计数、BCD时钟选择为1/32768、允许读出RTC值,2、设置节拍时间寄存器 : TICNT=0x1 1 1 1 1 1 1 1 = 0xFF 含义:允许节拍中断、节拍计数值为127,每1秒钟中断一次。 BIT_TICK EQU (0x18) BIT_ALLMSK EQU (0xffffffff) BIT_RTC EQU (0x130) #include “2410addr.h“ #include “2410lib.h“ void Test_Rtc_Tick(void);

13、 void _irq Rtc_Tick(void);,void Test_Rtc_Tick(void) Uart_Printf(“RTC Tick interrupt test for S3C2410!n“); pISR_TICK = (unsigned)Rtc_Tick; /设置中断服务程序地址 rINTMSK ,rTICNT = (17) + 127; /设置节拍值 /Period = (n + 1) / 128 =1sec rRTCCON = 0x01; /启动计时、允许读写 Uart_Printf(“Press any key to exit.n“); Uart_Getch(); /等

14、待按键 rINTMSK | = BIT_TICK; /(18) /关闭时钟节拍中断 ,void _irq Rtc_Tick(void) char year,month,date,hour,min,sec; /读取年月日 year = rBCDYEAR; month = rBCDMON ,实例二 不使用节拍中断,每秒读取RTC的时钟,实时显示在串口上 必须考虑出现当读取到的BCDSEC 等于0 时,可能出现的读取错误 实验现象: FS2410P RTC Test RTC TIME : 2005/03/06 TUES - 17:34:28 RTC TIME : 2005/03/06 TUES -

15、17:34:28 RTC TIME : 2005/03/06 TUES - 17:34:29,Rtc_Init()实时时钟初始化函数 功能说明:初始化相关时钟寄存器,设置当前时钟 主要代码如下: /* void Rtc_Init(void) rRTCCON = 0x01; /RTC 读写使能,选择BCD 时钟、计数 器,无复位,1/32768 rBCDYEAR = 0x05 ; /设定年 rBCDMON = 0x3 ; /设定月 rBCDDAY = 0x06 ; /设定日 rBCDDATE = 0x3 ; /设定星期 rBCDHOUR = 0x17 ; /设定小时 rBCDMIN = 0x34 ; /设定分钟 rBCDSEC = 0x28 ; /设定秒 rRTCCON = 0x0; /RTC 读写禁止,选择BCD 时钟、计数器,无复位,1/32768 ,Display_Rtc()实时时钟显示函数 功能说明:该函数主要是通过串口在超级终端上实时显示当前时钟。 主要功能代码如下: /*/ void Display_Rtc(void) int year; int month,day,weekday,hour,min,sec; rRTCCON = 0x01; /RTC 读写使能,选择BCD 时钟、计数器,无复位,1/32768 while(1) if (rBCDYEAR = 0x99)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业信息化/信息管理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号