功能描述
精度校准
RTC 通过 PCNT 产生周期为一秒左右、高电平宽度为一个 clk1k 时钟周期的脉冲信号, 由该信号对 TCNT 进行时间计时。调整脉冲信号的周期,即可微调校准?精度。
- 一行代表一个 PCNT 计时周期。
- 黄色为标准时间,每个计时周期为 1024 个 clk1k 周期。
- 红色为 cali_dir = 1,即为加快时间,每个计时周期为 1023 个 clk1k 时间。
- 绿色为 cali_dir = 0, 即为放慢时间,每个计时周期为 1025 个 clk1k 时间。

1024 个 TCNT 的计时周期,约为 1024 秒,即为一个校准循环周期, 可调最小单位为一个 clk1k 时间,约为一毫秒,即实现精度为 1 ppm 的调整。 由于 cali_value 可配范围为 0 ~ 1023,即最大可实现 ±976 ppm 调整。PCNT 校准时序 中可见 PCNT 值的加速和放慢示意图,其中 p1s 固定在 PCNT = 1023 产生。

- 1023:计时加快
- 1024:正常计时
- 1025:计时放慢
每 1024 个秒计数周期为一个校准周期,校准后计数周期为:
cali_per = 1/1024*(1024+cali_dir)*cali_val+1/1024*1024*(1024-cali_val) = 1024+cali_dir*cali_val/1024
即校准精度为 cali_per/1024-1 = (cali_dir*cali_val)/(1024*1024)
闹钟
- 当 RTC_TCNT_VAL == RTC_ALARM 时,对 ALARM_IRQ_STA 置位;
- 当中断状态位被清除后下一秒到来时,RTC_TCNT_VAL ≠ RTC_ALARM,即不会再触发中断。
RTC 闹钟软件清零机制:执行写1清零且会立即执行清零,无需按秒同步。
RTC 模块实时时间时以秒为单位计数,系统需要获得年月日时分秒时间,需要经过软件运算换算; 当使用闹钟功能时,也需要换算为以秒为单位的数值,设置到对应的寄存器。
硬件只支持一个闹钟设置,并且每次设置都是一次性的,一旦产生了中断,上一次设置的闹钟就被自动取消了。 如果存在多个闹钟,需要软件上保持并记录一个队列。 在软件初次设置闹钟时,软件需要将最靠近的闹钟值设置到寄存器,并在响应闹钟后,立即将最近的下一个闹钟值设置到寄存器; 如果需要每天固定时间产生闹钟,即需要软件进行每天重新设置。
电源及电流
为了保持关机下计数,在关机场景下,RTC 模块采用纽扣电池或法拉电容供电,从 VCOIN 引脚直接输入; 为了最大化纽扣电池使用寿命,在开机后,内部电源开关会自动切换到 VCC33_IO 进行供电,但注意 VCC33_IO 电源不会对 VCOIN 电源进行充电。
如RTC 关机电流 所示,RTC 模块提供两路供电输入,关机电源输入VCOIN和开机电源输入VCC33-RTC, RTC模块供电选择由内部硬件开关自动切换完成,切换的条件是另外一路供电比当前供电的电压更高。
RTC 模块的电源域及关机电流如下表所示。
电源域 | 电压范围 | 供电来源 | 供电电路 | 关机典型电流 |
---|---|---|---|---|
VCC-RTC | 2.7 V - 3.3 V | VCOIN/ VCC33-RTC | RTC POR LDO BG PAD | 1.0 uA |
VCC-OSC | 1.2 V - 1.9 V | RTC-LDO18 | RTC 振荡电路 | 0.5 uA |
VDD-RTC | 0.8 V - 1.1 V | RTC-LDO11 | RTC 数字域电路 | 0.5 uA |