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

相关推荐
liuyicenysabel3 小时前
多服务上线日记三:
运维·服务器·笔记·学习
CHENGQUAN_kenan3 小时前
佛山亚马逊卖家出口退税合规指南|9610免税、一般贸易退税、无票采购、申报误区全覆盖
大数据·经验分享·笔记·百度
YM52e3 小时前
鸿蒙ArkTS实战项目 - 门店陈列巡检台:巡检卡片与多列切换实现
学习·华为·harmonyos
一只小小的芙厨4 小时前
基础数论总结
笔记·学习·算法
hsjiasb6 小时前
FreeRTOS学习(三十七)——常见错误与工程规范
学习·学习笔记·freertos
小席是个热心肠6 小时前
Redis的自我学习
数据库·redis·学习
zyf1044166 小时前
暑期实践日志 Day33:完成全部字幕添加,工作基本收尾
学习·计算机网络·剪辑·暑期实践·课题任务
@Mike@7 小时前
09-数据库学习笔记(数据库索引与过滤器)
数据库·笔记
一米阳光86617 小时前
软考(中级)软件设计师核心笔记(9)算法——背包问题
笔记·算法·职场发展·软考·软件设计师·中级职称
Chris _data7 小时前
WPF 上位机开发学习笔记 - 第四天
笔记·学习·wpf