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

相关推荐
恰薯条的屑海鸥5 分钟前
零基础在实践中学习网络安全-皮卡丘靶场(第十五期-URL重定向模块)
学习·安全·web安全·渗透测试·网络安全学习
自小吃多25 分钟前
STC8H系列 驱动步进电机
笔记·单片机
moxiaoran57532 小时前
uni-app学习笔记三十--request网络请求传参
笔记·学习·uni-app
嘉陵妹妹2 小时前
深度优先算法学习
学习·算法·深度优先
乖乖是干饭王3 小时前
Linux系统编程中的_GNU_SOURCE宏
linux·运维·c语言·学习·gnu
待什么青丝4 小时前
【TMS570LC4357】之相关驱动开发学习记录2
c语言·arm开发·驱动开发·单片机·学习
行云流水剑4 小时前
【学习记录】如何使用 Python 提取 PDF 文件中的内容
python·学习·pdf
明月醉窗台5 小时前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
虾球xz5 小时前
CppCon 2015 学习:CLANG/C2 for Windows
开发语言·c++·windows·学习
蓝婷儿6 小时前
6个月Python学习计划 Day 17 - 继承、多态与魔术方法
开发语言·python·学习