在线时间957 小时
UID3168010
注册时间2016-4-18
NXP金币347
TA的每日心情 | 擦汗 2016-12-2 08:40 |
---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I
版主
  
- 积分
- 4346
- 最后登录
- 2025-8-14
|
有些使用场景要求MCU热复位后,RTC能够保持之前的计数值而不是清零
我们可以用RTC->CTRL的寄存器的状态,来判断RTC是否被初始化过,如果比如冷启动(掉电后再上电)这样RTC的控制寄存器是默认的状态,这个时候我们需要重新配置下RTC,热复位(类似 按下reset按键)则RTC的CTRL寄存器为配置过的状态,我们无需再配置一次RTC了。
代码里我这是这么做的
首先无论何种情况,都要先打开RTC的外设时钟,不然在掉电后再上电的情况下,RTC外设时钟是关闭的,在没有打开RTC外设的时钟的情况下访问RTC的寄存器是会出现异常的。
之后我们判断RTC->CTRL寄存器即可。
CLOCK_EnableClock(kCLOCK_Rtc); <--------- 打開RTC外設的時鐘
g_RTCStatus = RTC->CTRL; <--------- 讀取RTC控制寄存器的狀態
PRINTF("RTC Pre-Ctrl Value is %x\r\n", g_RTCStatus);
if(g_RTCStatus != 0x80) <--------- 一般情況下RTC的CTRL寄存器被配置過的值是0x80,如果不是0x80則是重新上電,需要配置下RTC了
參考工程
rtc_resetkeep_test.zip
(505 KB, 下载次数: 13)
|
|