一、 RTC简介
①一般高端的单片机内部有一个RTC外设模块,这个模块需要一个32.768KHz的晶振。
②I.MX6U内部也有RTC模块,但是补交“RTC”,而是叫“SNVS”。
③SNVS有两部分:SNVS_HP和SNVS_LP。系统主电源断电以后SNVS_HP也会断电,但是在后备电源支持下,SNVS_LP是不会断电的,而且SNVS_LP是和芯片复位隔开的。
二、 SNVS框图
、 VDD_HIGH_IN是系统主电源,这个电源会同时供给给SNVS_HP和SNVS_LP。
、 VDD_SNVS_IN是纽扣电池供电的电源,这个电源只会供给给SNVS_LP,保证在系统主电源VDD_HIGH_IN掉电以后SNVS_LP会继续运行。
、 SNVS_HP部分
、 SNVS_LP部分,此部分有SRTC,这就是我们本章要使用的RTC。
SNVS_HP和SNVS_LP内部都有一个SRTC。但是因为SNVS_HP在系统电源掉电以后就会关闭,所以我们本章使用的是SNVS_LP内部的SRTC。
三、看SRTC相关的寄存器
①寄存器SNVS_HPCOMP
NPSWA_EN(bit31):这个为是非特权软件访问控制为,如果非特权软件要访问SNVS的话此位必须为1.
②寄存器SNVS_LPCR
SRTC_ENV(bit0):此位为1的话就使能STC计数器
③寄存器SNVS_SRTCMR和SNVS_SRTCCLR,这两个寄存器保存着RTC的秒数,SNVS_SRTCMR的bit14:0这15位是SRTC计数器的高15位,SNVS_SRTCCLR的bit31:15这17位是SRTC计数器的低17位。
四、照着原子哥敲一次代码,编译与测试。
1、 在BSP文件夹建了rtc文件夹,添加了bsp_rtc.h和bsp_rtc.h
2、 拷贝原子哥的bsp_rtc.h到我的工程bsp_rtc.h
3、 在bsp_rtc.c实现bsp_rtc.h的声明函数
4、 修改MCIMX6Y2.h结构体SNVS_Type
5、 修改main.c
6、 修改Makefile
7、 在linux上编译工程
8、 将编译固件烧录到SD卡上,在开发板测试。
网友评论