支持的芯片
Ameba SoC |
RTL8721Dx |
RTL8726E |
RTL8720E |
RTL8730E |
---|---|---|---|---|
支持状态 |
Y |
N |
N |
N |
概述
RTC_IO模块用于存储RTC时间,并在芯片断电期间临时记录断电时间。重新上电后,可通过特定流程读取断电期间存储的时间数据和计数器。
通过回读的时间信息,可计算当前时间并设置到RTC模块,确保计时系统不受断电影响。
硬件连接
为确保芯片断电时RTC_IO模块仍能保持供电,需通过杜邦线进行以下硬件连接:
将
VDH_RTC
电源引脚接入3.3V电源开发板的
GND
引脚与3.3V电源共地
应用场景
RTC_IO模块的使用分为 首次上电 与 重新上电 两种场景。
首次上电
首次上电时,请遵循以下操作流程:
向
rtc_io_test_din
位写入 6’d0(复位),并载入RTC_IO模块。RTCIO_SetRValue(RTCIO_RECV_RVAL_RST);
执行131K校准以获取校准参数,并载入RTC_IO。
OSC131K_Calibration(30000);
获取 步骤 2 中生成的RVAL参数并载入RTC_IO并载入RTC_IO模块。
RTCIO_SetRValue(RTCIO_RECV_RVAL_CAL);
准备通过RTC模块设置的时间数据。
RTC_TimeTypeDef RTC_TimeStruct; RTC_TimeStructInit(&RTC_TimeStruct); RTC_TimeStruct.RTC_Year = 2024; RTC_TimeStruct.RTC_Hours = 10; RTC_TimeStruct.RTC_Minutes = 20; RTC_TimeStruct.RTC_Seconds = 30;
初始化并使能RTC模块。
RCC_PeriphClockCmd(APBPeriph_RTC, APBPeriph_RTC_CLOCK, ENABLE); RTC_StructInit(&RTC_InitStruct); RTC_Init(&RTC_InitStruct); RTC_SetTime(RTC_Format_BIN, &RTC_TimeStruct);
重新上电
重新上电适用于断电期间RTC_IO持续供电的场景。
重新上电时,请遵循以下操作流程:
检查
BOOT_Reason()
函数的返回值。返回值为0时继续后续步骤,否则终止流程。
检查
RTCIO_IsEnabled()
函数的返回值。返回TRUE时继续后续步骤,否则按首次上电流程操作。
移出断电期间存储的时间数据与计数。
RTCIO_TimeInfo RTCIO_TimeStruct; RTC_TimeTypeDef RTC_TimeStruct; if(BOOT_Reason() == 0) { if (RTCIO_IsEnabled() == TRUE) { /* shift out bkup data */ RTCIO_GetTimeInfo(&RTCIO_TimeStruct); /* calculate new Time */ app_calc_new_time(&RTCIO_TimeStruct, &RTC_TimeStruct); } }
通过
RTCIO_TimeStruct
结构体计算新时间,并将结果存入RTC_TimeStruct
(写入设备)。app_calc_new_time()
函数仅作为示例,需根据实际应用实现。按首次上电流程的 步骤 5 重新初始化RTC模块,并将计算的新时间写入设备。