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

相关推荐
谙弆悕博士2 小时前
信息系统项目管理师教程(第4版)笔记——第 2 章 信息技术发展
笔记·职场和发展·软考高级·软考·高项·项目经理
wp123_14 小时前
【硬件选型笔记】TONEVEE MVL4020-1R2M 与Coilcraft XAL4020-122MEC 大电流功率电感参数深度解析
笔记
aaaameliaaa4 小时前
指针之总结
c语言·笔记·算法
caimouse5 小时前
protoc-gen-c 支持 proto3 `optional` 关键字修改记录
c语言·学习
撩得Android一次心动5 小时前
Linux编程笔记3【个人用】
linux·笔记
憧憬成为java架构高手的小白5 小时前
黑马八股--中间件学习之MQ(RabbitMQ)
学习·中间件
撩得Android一次心动6 小时前
Linux编程笔记4【个人用】
linux·笔记·学习
user-猴子7 小时前
让网页“活”过来 —— 用AI打造会自主学习的动态知识图谱
人工智能·学习·知识图谱
网络工程小王8 小时前
【HCIE-AI】10.pytorch模型迁移分析
人工智能·学习·华为·llama
xqqxqxxq8 小时前
技术笔记:上下文工程(Context Engineering)心得总结(李博杰《深入理解 AI Agent》2.1,2.2观后总结)
人工智能·笔记