linuxARM裸机学习笔记(7)----RTC实时时钟实验

基础概念:

I.MX6U 内部也有个RTC 模块,但是不叫作" RTC ",而是叫做" SNVS "。
SNVS 直译过来就是安全的非易性存储, SNVS 里面主要是一些低功耗的外设,包括一个
安全的实时计数器 (RTC) 、一个单调计数器 (monotonic counter)和一些通用的寄存器,SNVS 里面的外设在芯片掉电以后由电池供电继续运行。
SNVS 有两部分: SNVS_HPSNVS_LP【 高功耗域(SNVS_HP)和低功耗域(SNVS_LP) 】,系统主电源断 电以后 SNVS_HP 也会断电,但是 在后备电源支持下,SNVS_LP 是不会断电的,而且 SNVS_LP 是和芯片复位隔离开的

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

I.MX6U-ALPHA 核心板上的 32.768KHz 的晶振就是提供这 个时钟的。寄存器 SNVS_LPSRTCMR 和 SNVS_LPSRTCLR 保存着秒数,从1970.1.1年开始加上秒数,就可以知道当前的时间了。SRTC 也是带有闹钟功能的,可以在寄存器 SNVS_LPAR 中写入闹钟时间值,当时钟值和闹钟值匹配的时候就会产生闹钟中断

基础配置:

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

cpp 复制代码
void rtc_init(void)
{
	/*
     * 设置HPCOMR寄存器
     * bit[31] 1 : 允许访问SNVS寄存器,一定要置1
     * bit[8]  1 : 此位置1,需要签署NDA协议才能看到此位的详细说明,
     *             这里不置1也没问题
	 */
	SNVS->HPCOMR |= (1 << 31) | (1 << 8);
	
#if 0
	struct rtc_datetime rtcdate;

	rtcdate.year = 2018U;
    rtcdate.month = 12U;
    rtcdate.day = 13U;
    rtcdate.hour = 14U;
    rtcdate.minute = 52;
    rtcdate.second = 0;
	rtc_setDatetime(&rtcdate); //初始化时间和日期
#endif
	
	rtc_enable();	//使能RTC

}

2.使能STC计数器

cpp 复制代码
void rtc_enable(void)
{
	/*
	 * LPCR寄存器bit0置1,使能RTC
 	 */
	SNVS->LPCR |= 1 << 0;	
	while(!(SNVS->LPCR & 0X01));//等待使能完成
	
}

注意:
①、SRTC 计数器是 32 位的,不是 47 位!
②、SNVS_SRTCMR 的 bit14:0 这 15 位是 SRTC 计数器的高 15 位。
③、SNVS_SRTCLR 的 bit31:bit15 这 17 位是 SRTC 计数器的低 17 位。

相关推荐
近津薪荼17 分钟前
初学者关于数据在内存中的储存的笔记
笔记
碎叶城李白2 小时前
若依学习笔记1-validated
java·笔记·学习·validated
im_AMBER3 小时前
学习日志05 python
python·学习
真的想上岸啊4 小时前
学习C++、QT---18(C++ 记事本项目的stylesheet)
开发语言·c++·学习
HuashuiMu花水木4 小时前
PyTorch笔记1----------Tensor(张量):基本概念、创建、属性、算数运算
人工智能·pytorch·笔记
rui锐rui4 小时前
大数据学习2:HIve
大数据·hive·学习
凛铄linshuo5 小时前
爬虫简单实操2——以贴吧为例爬取“某吧”前10页的网页代码
爬虫·python·学习
大春儿的试验田6 小时前
高并发收藏功能设计:Redis异步同步与定时补偿机制详解
java·数据库·redis·学习·缓存
笑衬人心。7 小时前
Ubuntu 22.04 修改默认 Python 版本为 Python3 笔记
笔记·python·ubuntu
金色光环7 小时前
【Modbus学习笔记】stm32实现Modbus
笔记·stm32·学习