Edit online

关键流程设计

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() 接口中实现,其中主要步骤有:
  1. 初始化模块的时钟 (clk),确保 RTC 控制器所需的时钟已经正确配置和启用。

  2. 注册中断。

    为 RTC 控制器分配并注册中断处理程序,以便在闹钟触发时能够及时响应。

  3. 设置校准参数。

    根据用户实测的 32 KHz 晶振频率值,计算并设置校准参数,以确保 RTC 的时间精度。

  4. 配置 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 晶振偏慢了。