再上一篇:5.3 系统集成单元
上一篇:5.3.2 中断控制器
主页
下一篇:5.3.4 操作系统(OS)定时器
再下一篇:5.3.5 脉冲宽度调制
文章列表

5.3.3 实时时钟

嵌入式系统(修订本)——Intel XScale 结构与开发 陈章龙 著

实时时钟(RTC)可设置产生周期性信号。一般 RTC 可设置产生一个 1Hz 输出,用作 系统时间基准。它还有一个闹钟功能,可由RTC 在预定时间产生中断或唤醒事件。
一、RTC 操作

RTC 有一个 32 位计数器(RCNR),在硬件或 WD 复位时初始化为 0。它是自由运行计 数器。复位后由Hz 时钟加1。可向RCNR 写入预置值。它的值不受睡眠或空闲方式影响。

除了RCNR 外,RTC 还有一个32 位闹钟寄存器(RTAR)。

RTAR 可写入用于与RCNR 相比较的值。在Hz 时钟的上升沿,RCNR 加1,并与RTAR 比较,如数值相同,且允许位置位,则置位RTC 状态寄存器(RTSR)的闹钟符合位。它也 接至中断控制器,如不屏蔽时,可产生中断。另外,RTSR 的 Hz 时钟跳变位(Hz)也可产 生中断。

Hz 时钟可来自两个时钟源。第一个为3.6864MHz 振荡器分频112 产生的32.914KHz 信 号,另一个为32.768KHZ 振荡器的输出。Hz 时钟的分频为可程控,并有微调机构可调至+/-5 秒/周的精度。

二、RTC 寄存器

RTC 有四个寄存器,见表5-9。

表 5-9 RTC 寄存器

地址

名称

描述

0x4090_0000

RCNR

RTC 计数寄存器

0x4090_0004

RTAR

RTC 报警寄存器

0x4090_0008

RTSR

RTC 状态寄存器

0x4090_000C

RTTR

RTC 整理(trim)寄存器

RCNR 为可读/写 32 位寄存器。处理机可任意写入,但推荐操作系统应使用 MMU 保护

机构防止不适当的写入RCNR。写入RCNR 由32KHZ 时钟所同步。RCNR 可任意读出。

RTAR 为可读/写 32 位寄存器。它的值在每个 HZ 上升沿与 RCNR 进行比较,相符时且

RTSR 的ALE 置位,则置位RTSR 的AL 位。复位时RTAR 为0。

RTTR 为RTC 调准寄存器。复位值为0x00007FFF,对32.768KHZ 晶振可产生准确的HZ 时钟输出。然而可写入其他值,产生不同的 HZ 时钟,对非 32.768KHZ 晶振,可向 RTTR 写入其他值以产生准确的HZ 时钟。

RTTR 的位32 为LCK——调准值加锁值。0=允许修改RTTR 值;1=禁止修改RTTR。 位25~16 为调准删除计数(DEL),位15~0 为时钟分频计数(CK-DIV)。

三、调准方法
驱动RTC 的HZ 时钟由振荡器分频得出。晶振的固有误差,加上印板的分布电容和其他 参数,使时间基变得不准确。这需要对HZ 时钟进行调准。
为决定写入RTTR 的值,应先测量振荡器输出(约为32KHZ)的频率。可使用GPIO12 或GPIO72 的第二功能来输出该时钟。然后把除以所需的HZ 时钟频率(一般为1HZ)所得 值分为整数和小数部分。整数部分值减 1 装入 RTTR 的 CK_DIV。该值将与一个由 32KHZ 时钟驱动的 16 位计数器的值进行比较。相同时,复位该计数器,并产生初步的 HZ 时钟信 号。
小数部分的调准由周期性地从整数计数器的时钟流中删去若干时钟完成。调准间隔为

210-1 个HZ 时钟周期(如HZ 时钟为1HZ,则调准间隔约为17 分钟。删去的时钟数为RTTR

的DEL 值(10 位)。
这样,HZ 时钟频率f1 可按下式计算:

f 1 = (2

−1) × (CK _ DIV +1) − DEL ×

f 32k

(210 −1) × (CK _ DIV +1)

(CK _ DIV +1)

式中f32k 为RTC 内部时钟,可为32KHZ 晶振输出或3.68MHZ 晶振分频产生32.914 输
出。
例 1:测量值无小数部分,例 f32k 为36045.000HZ,则可把 36045-1=0x00008CCC 写入

RTTR。

例2:测量值有小数部分,例f32k 为32768.92HZ,则CK_DIV 为32768-1=0x7FFF.。而 每秒快了0.92HZ,则每隔1023 秒,减去941.16 个时钟(0.92*1023=941.16)。故把941=0x3AD 装入DEL。这时的误差为0.002PPM。