RTC实时时钟
王华斌
Wanghuabin-2003@163.com
RTC综述
vS3C44B0X内部RTC (Real Time Clock)
单元,能在系统断电时,通过备份电池来
供电,从而保持了日历时间的连续。
vRTC能通过ARM的STRB/LDRB指令传
输8位BCD数据到CPU,该数据包括秒、
分、时、星期、月和年,RTC使用一个
外部32.768KHZ的晶体。
功能和特点
功能:
v 闰年产生器
v 报警功能
v 时钟节拍中断
特点:
v BCD数据,秒、分、时、日、月、年;
v 闰年产生器;
v 具有报警中断或者从掉电模式中唤醒等功能;
v 解决2000年闰年问题;
v 独立的电源端口(VDDRTC);
v 支持毫秒级的时钟节拍中断,可用于RTOS的内核时钟节拍;
v 循环复位功能;
RTC模块功能结构
功能详述:
闰年产生器
这个模块可以决定每个月的最后日期是 28,29,30 还
是 31,这些日期数据是由BCDDAY、BCDMON和
BCDYEAR寄存器中的数据来决定的。一个8位计数器只能
表示2个BCD数据,因此它不能判断00年是否为闰年。
例如它不能够满足 1900 年和 2000 年的差别。为了解
决这个问题,S3C44B0X 内的 RTC 模块中有一个固定的逻
辑,用来支持 2000 年为闰年。请注意虽然 2000 年是闰年,
但 1900 年不是闰年。因此,S3C44B0X中 00 代表 2000 年,
而不是 1900 年。
读写寄存器
RTCCON 寄存器的 0 位来表示读和写 RTC 模块中的寄
存器。为了显示秒,分,小时,日期,月和年,CPU会从
BCDSEC, BCDMIN, BCDHOUR, BCDDAY, BCDDATE,
BCDMON, 和 BCDYEAR寄存器中读取数据。
但是,由于多个寄存器的读取,可能产生 1 秒钟的偏离。
例如,如果用户读取寄存器 BCDYEAR 到 BCDMIN,假设
结果为 1959 年,12 月,31 日,23 点,59 分。在用户读
取 BCDSEC寄存器时,如果结果是 1~59,肯定没有问题。
但如果结果是 0,那么很有可能年、月、日、时、分已经变
成了 1960 年 1 月 1 日 0 时 0 分,这就是上面所说的 1 秒
偏离。
解决的方法是,当读取到的 BCDSEC 等于 0 时,用户
应该再读取一次 BCDYEAR 到 BCDSEC 的值。
备用电池操作
RTC逻辑可用备用电池驱动,即使系统电
源关闭了,它也可以通过RTCVDD端口向
RTC模块提供电源。当系统关闭时,CPU和
RTC逻辑间的接口应关闭。备用电池只驱动
晶振电路和BCD计数器,以最小化电源消耗。
报警功能
在掉电模式或正常工作模式下,RTC 都
能够在指定的时间产生一个报警信号。
v 在正常工作模式下,报警中断(ALMINT)被激
活。
v 在掉电模式下,电源管理苏醒(PMWKUP)
信号也与 ALMINT 一样处于激活状态。
RTC 的报警寄存器:RTCALM 可以决定报警
的使能或禁止和报警时间。