Dear all,
I tried to store RTC counter each time device reset (software reset only).
But everytime device boot again from software reset, RTC counter always count from 1970 (monitor by debug breakpoint)
This is my code to write and read RTC time. Could you please review it and give me your suggestion?
Thank you.
1. RTC initialize
void rtc_intialize(void)
{
snvs_hp_rtc_datetime_t rtcDate;
snvs_hp_rtc_config_t snvsRtcConfig;
SNVS_HP_RTC_GetDatetime(SNVS, &rtcDate);
/* Init SNVS */
/*
* snvsConfig->rtccalenable = false;
* snvsConfig->rtccalvalue = 0U;
* snvsConfig->srtccalenable = false;
* snvsConfig->srtccalvalue = 0U;
* snvsConfig->PIFreq = 0U;
*/
SNVS_HP_RTC_GetDefaultConfig(&snvsRtcConfig);
SNVS_HP_RTC_Init(SNVS, &snvsRtcConfig);
if (rtcDate.year < 2000 || rtcDate.year > 2049)
{
/* Set a start date time and start RT */
rtcDate.year = 2000U;
rtcDate.month = 0;
rtcDate.day = 0;
rtcDate.hour = 0;
rtcDate.minute = 0;
rtcDate.second = 0;
/* Set RTC time to default time and date and start the RTC */
SNVS_HP_RTC_SetDatetime(SNVS, &rtcDate);
}
SNVS_HP_RTC_StartTimer(SNVS);
}
2. RTC set
bool rtc_set_time(rtc_date_time_t *time)
{
snvs_hp_rtc_datetime_t rtc_date;
/* Set a start date time and start RT */
rtc_date.year = time->year+2000;
rtc_date.month = time->month;
rtc_date.day = time->day;
rtc_date.hour = time->hour;
rtc_date.minute = time->minute;
rtc_date.second = time->second;
/* Set RTC time to default time and date and start the RTC */
if (kStatus_Success != SNVS_HP_RTC_SetDatetime(SNVS, &rtc_date))
{
return false;
}
return true;
}
3. RTC read
{
snvs_hp_rtc_datetime_t date_time;
SNVS_HP_RTC_GetDatetime(SNVS, &date_time);
time->year = date_time.year;
time->month = date_time.month;
time->day = date_time.day;
time->hour = date_time.hour + 7; // gsm + 7
time->minute = date_time.minute;
time->second = date_time.second;
get_weekday(time);
}