设计说明
源代码位于
bsp/artinchip/
:-
bsp/artinchip/drv/rtc/drv_rtc.c,RTC Driver 层实现
-
bsp/artinchip/hal/rtc/hal_rtc.c,RTC HAL 层实现
-
bsp/artinchip/include/hal/hal_rtc.h,RTC HAL 层接口头文件
RTC 驱动 Driver 层采用 RT-Thread 的 SDIO 设备驱动框架,如果只使用 HAL 层也可以支持 baremetal 方式的应用场景。

RTC 控制器可以适配到通用的 RTC 时间、闹钟接口,其他非标准的特性有:
- Alarm 的中断输出:
是否有输出完全由板级电路的设计决定,软件上只需要使能中断信号即可。需要在 menuconfig 中使能 OUTPUT,详见驱动配置 。
- 时钟校准参数:
控制器支持±975ppm 的校准范围,用户需要配置 DTS 中的参数
需要在 menuconfig 中使能 OUTPUT,详见驱动配置clock-rate
。 - SYS_BAK 寄存器
RTC 控制器提供了 128bit 的 NVMEM 寄存器,系统复位时不会丢失数据,目前主要用于记录系统复位状态。 详见 WRI 模块的复位原因管理说明。
- 8bit 寄存器的读写在驱动设计时将 8bit 数据的拆解、打包进行封装,可以尽量减少对代码的干扰,封装如下:
#define RTC_WRITEL(val, reg) \ do { \ writeb((val) & 0xFF, (reg)); \ writeb(((val) >> 8) & 0xFF, (reg) + 0x4); \ writeb(((val) >> 16) & 0xFF, (reg) + 0x8); \ writeb(((val) >> 24) & 0xFF, (reg) + 0xC); \ } while (0) #define RTC_READL(reg) (readb(reg) | (readb((reg) + 0x4) << 8) \ | (readb((reg) + 0x8) << 16) \ | (readb((reg) + 0xC) << 24))