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 位。

相关推荐
AOwhisky21 小时前
Redis 学习笔记(第三期):持久化与主从复制
运维·数据库·redis·笔记·学习·云计算
问心无愧051321 小时前
ctf show web入门160 161
前端·笔记
Tbisnic1 天前
AI大模型学习第十一天:技术选型、安全防护与金融实战
python·学习·ai·大模型·提示词工程
xmtxz1 天前
计算机网络基础课程学习心得:从理论抽象到硬核实战的进阶之路
运维·学习
YM52e1 天前
男孩子在外自我保护指南——用鸿蒙 ArkTS 构建交互式安全教育应用
学习·安全·华为·harmonyos·鸿蒙·鸿蒙系统
aXin_ya1 天前
Ai Vibecoding学习(各个AI的讲解)
学习
乘~风1 天前
408考研-计组-1.2计算机系统层次结构笔记+1.3计算机性能指标
笔记·考研·408
fanged1 天前
Linux内核学习16--I2C子系统(TODO)
学习
.千余1 天前
【C++】C++继承入门(下):友元、静态成员与菱形继承的底层逻辑
开发语言·c++·笔记·学习·其他
YJlio1 天前
《Sysinternals实战指南》16.5 Ctrl2Cap 工具详解:把 Caps Lock 变成 Ctrl 的键盘改造与回退方法
linux·运维·服务器·网络·python·学习·计算机外设