查看: 4059|回复: 0

[原创] [LPC55(S)xx]RTC 热复位后不需要重新设置的办法

[复制链接]
  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    103

    主题

    869

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4346
    最后登录
    2025-8-14
    发表于 2020-2-29 21:50:17 | 显示全部楼层 |阅读模式
    有些使用场景要求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)
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-16 04:15 , Processed in 0.083876 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表