关键流程设计
26 Nov 2024
Read time: 1 minute(s)
初始化流
RTC 驱动的初始化接口通过 INIT_BOARD_EXPORT(drv_rtc_init)
完成,主要是通过调用 RTC 子系统的接口
rt_hw_rtc_register() 注册一个 RTC 设备。
RTC 控制器的初始化流程放在 rtc_ops_init() 接口中实现,其中主要步骤有:
-
初始化模块的时钟 (clk),确保 RTC 控制器所需的时钟已经正确配置和启用。
-
注册中断。
为 RTC 控制器分配并注册中断处理程序,以便在闹钟触发时能够及时响应。
-
设置校准参数。
根据用户实测的 32 KHz 晶振频率值,计算并设置校准参数,以确保 RTC 的时间精度。
-
配置 Alarm IO 的输出信号。
如果系统配置了 Alarm IO 输出信号,则使能相应的硬件功能,否则可略过。
校准算法设计
校准的算法原理是将输入的 32 KHz 晶振时钟校准到理想的 32 KHz,公式如下:
(100 * 1024 * 1024 + 100 * calibrate) / (clock-rate / 32) = 1024
=> calibrate = (clock-rate * 32 - 100 * 1024 * 1024) / 100;
其中:
-
clock-rate:用户实测 32K 晶振的频率值乘以 100,需要配置在 menuconfig 中,详见 打开 RTC 驱动。
-
calibrate:最终要填入 RTC 控制器的校准值。
校准值 calibrate 分正负- 正 - 表示 32K 晶振实际偏快了。
- 负 - 表示 32K 晶振偏慢了。