在power down模式下的rtc计数功能
-
demo工程:Power_Mode_Demo.zip
背景
- 客户问:芯片的rtc功能可以计算出power down的时间么?最长时间多久?
解决方案描述
- ME0中有一个有个Register File区域可以保存在power down状态下的值,将时间保存在这个区域可以计算出power down的时间。
-它采用32位秒计数器,每1秒记录一次时间递增。32位二进制数的最大值为4,294,967,295,正好对应4,294,967,295秒,换算成年份就是4,294,967,295 ÷ (365×24×3600) ≈ 136.19年,这个RTC最长能够保存的时间是:约136.19年
步骤
一.选择Power_Mode_Demo进行修改
二.点击SXOSC进行配置,打开PowerDown Enable开关,右边打开RTC_CLK
三.打开RTC外设,设置初始日期,生成代码
四.关键代码
首次启动①初始化RTC外设②设置初始时间③开启计数
不是首次启动,意味着设备是从powerdown模式中唤醒,此时读取第一次休眠前保存的时间,并与当前RTC时间进行比较,计算出总共休眠了多久。if(isFirstBoot) { RTC_DRV_Deinit(RTC_INST); RTC_DRV_Init(RTC_INST, &rtc_config0); RTC_DRV_SetTimeDate(RTC_INST, ¤tTime); RTC_DRV_StartCounter(RTC_INST); } if(!isFirstBoot) { rtc_timedate_t savedTime; rtc_timedate_t currentTime; Read_TimeDate_from_REGFILE(&savedTime, regfile_base); PRINTF("Time before power down: %04u-%02u-%02u %02u:%02u:%02u\n", savedTime.year, savedTime.month, savedTime.day, savedTime.hour, savedTime.minutes, savedTime.seconds); RTC_DRV_GetCurrentTimeDate(RTC_INST, ¤tTime); PRINTF("Current RTC time: %04u-%02u-%02u %02u:%02u:%02u\n", currentTime.year, currentTime.month, currentTime.day, currentTime.hour, currentTime.minutes, currentTime.seconds); CalculatePowerDownTime(&savedTime, ¤tTime); }
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...