17.IMX6ULL裸机开发之RTC

612 阅读1分钟

一、SRTC原理

IMX6U芯片内部RTC外设。在原理手册的SNVS章节。RTC分为HP,LP。LP叫做SRTC,HP叫做RTC。但是HP掉点以后数据就丢失了。我们使用SRTC又叫安全实时时钟,由于LP需要电池,所以数据才足够安全。

SRTC是作为非滚动计数器。

外接32.768KHz的晶振,然后开始计时。

由两个监控计数器构成的64位计数器与比较器进行比较。

25_RTC.png

RTC使用简单,打开RTC就可以工作,我们要做的就是不断读取RTC计数器寄存器的值获取时间值,或者向RTC计数器写入时间值,也就是调整时间。

二、寄存器

SNVS_HPCOMR:bit31置位1 (所有软件都可访问寄存器)

SNVS_LPCR:bit0置位1(开始SRTC功能)

SNVS_LPSMCMR的高位是计数器,

SNVS_LPSMCLR低16位是MC计数器。

三、时间乱码问题

当使用6UL的参考手册编写时,读取SRTCMR和SRTCLR获取时间值的时候,发现按照手册的说法,时间是错误的。手册上写LPSRTCMR是SRTC的高15bit ,LPSRTCLR是SRTC的低32位。因此RTC是47bit的数据

解决方法:

LPSRTCMR作为高15bit , LPSRTCLR作为bit [31:16]作为低17位,相当于SRTC的计数器是一个32位的,不是47位的。

:参考官方SDK代码参考得来。在官方发布的linux中的驱动程序也是将这么做的。