Edit online

关键流程设计

RTC 模块包含以下关键流程:

初始化流程

RTC 驱动的初始化接口通过 INIT_BOARD_EXPORT(drv_rtc_init) 完成,主要是通过调用 RTC 子系统的接口 rt_hw_rtc_register() 注册一个 RTC 设备。

RTC 控制器的初始化流程放在 rtc_ops_init() 接口中实现,其中主要步骤有:

  1. 初始化模块的 clk

  2. 注册中断

  3. 设置校准参数

  4. 配置 IO 的输出信号(如果 menuconfig 中有配置的话)

校准算法设计

校准的算法原理是,将输入的 32KHz 晶振时钟校准到理想的 32KHz,公式如下:
(100 * 1024 * 1024 + 100 * calibrate) / (clock-rate / 32) = 1024
=> calibrate = (clock-rate * 32 - 100 * 1024 * 1024) / 100;

其中:

  • clock-rate: 是用户实测 32K 晶振的频率值 * 100,需要配置在 DTS 中,详见 驱动配置

  • calibrate: 最终要填入 RTC 控制器的校准值

    注:

    校准值 calibrate 分正负,正 - 表示 32K 晶振实际偏快了,负 - 表示 32K 晶振偏慢了。