实时时钟实现原理

I.MX6U 系列的 RTC 是在 SNVS 里面,SNVS 直译过来就是安全的非易性存储,SNVS 里面主要是一些低功耗的外设,包括一个安全的实时计数器(RTC)、一个单调计数器(monotonic counter)和一些通用的寄存器。SNVS 有两部分:SNVS_HP 和 SNVS_LP,系统主电源断电以后 SNVS_HP 也会断电,但是在后备电源支持下,SNVS_LP 是不会断电的,而且 SNVS_LP是和芯片复位隔离开的,因此 SNVS_LP 相关的寄存器的值会一直保存着。

①、SNVS_LP:专用的always-powered-on电源域,系统主电源和备用电源都可以为其供电。
②、SNVS_HP:系统(芯片)电源。

SNVS_LP和SNVS_LP都有SRTC,为保证掉电后依旧可以执行,所以设置SNVS_LP中的SRTC来实现实时时钟。

在硬件方面,SRTC需要外界提供一个32.768KHz的时钟,寄存器 SNVS_LPSRTCMR 和 SNVS_LPSRTCLR 保存着秒数,直接读取这两个寄存器的值就知道过了多长时间了。

使用的SNVS寄存器:

SNVS_HPCOMR

NPSWA_EN(bit31),这个位是非特权软件访问控制位,如果非特权软件要访问 SNVS 的话此位必须为 1

SNVS_LPCR

SRTC_ENV(bit0),此位为 1 的话就使能 STC 计数器。

SNVS_SRTCMR

SNVS_SRTCMR 的 bit14:0 这 15 位是 SRTC 计数器的高 15 位。

SNVS_SRTCLR

SNVS_SRTCLR 的 bit31:bit15 这 17 位是 SRTC 计数器的低 17 位。

使能SRTC的配置如下:

(1)初始化SNVS_SRTC
初始化SNVS_LP中的SRTC。
(2)设置RTC时间
第一次使用RTC肯定要先设置时间。
(3)使能RTC
配置好RTC并设置好初始时间以后就可以开启RTC了。