支持的芯片

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模块的使用分为 首次上电重新上电 两种场景。

首次上电

首次上电时,请遵循以下操作流程:

  1. rtc_io_test_din 位写入 6’d0(复位),并载入RTC_IO模块。

    RTCIO_SetRValue(RTCIO_RECV_RVAL_RST);
    
  2. 执行131K校准以获取校准参数,并载入RTC_IO。

    OSC131K_Calibration(30000);
    
  3. 获取 步骤 2 中生成的RVAL参数并载入RTC_IO并载入RTC_IO模块。

    RTCIO_SetRValue(RTCIO_RECV_RVAL_CAL);
    
  4. 准备通过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;
    
  5. 初始化并使能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持续供电的场景。

重新上电时,请遵循以下操作流程:

  1. 检查 BOOT_Reason() 函数的返回值。

    返回值为0时继续后续步骤,否则终止流程。

  2. 检查 RTCIO_IsEnabled() 函数的返回值。

    返回TRUE时继续后续步骤,否则按首次上电流程操作。

  3. 移出断电期间存储的时间数据与计数。

    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);
    }
    }
    
  4. 通过 RTCIO_TimeStruct 结构体计算新时间,并将结果存入 RTC_TimeStruct (写入设备)。

    app_calc_new_time() 函数仅作为示例,需根据实际应用实现。

  5. 按首次上电流程的 步骤 5 重新初始化RTC模块,并将计算的新时间写入设备。