功能描述
关于 RTC 功能的详细配置说明,可查看 编程指南。
精度校准
RTC 通过 PCNT 产生周期为一秒左右、高电平宽度为一个 clk1k 时钟周期的脉冲信号, 由该信号对 TCNT 进行时间计时。调整脉冲信号的周期,即可微调约为 1 ppm 精度。
- 一行代表一个 PCNT 计时周期。
- 黄色为标准时间,每个计时周期为 1024 个 clk1k 周期。
- 红色为 cali_dir = 1,即为加快时间,每个计时周期为 1023 个 clk1k 时间。
- 绿色为 cali_dir = 0, 即为放慢时间,每个计时周期为 1025 个 clk1k 时间。
- TCNT:计时周期,共 1024 个,约为 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 闹钟模块每秒对当前时间和闹钟时间进行比较,当 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 和开机电源输入 RTC, RTC 模块供电选择由内部硬件开关自动切换完成,切换的条件是另外一路供电比当前供电的电压更高。