imx6ull的RTC 实时时钟实验
实时时钟实现原理
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了。