// // Created by ilya on 10.02.23. // #include "RTC_n32g45x._h" #include #include #include #include "n32g45x_rtc.h" #include "RTC_Config._h" void vRtcInit(tRtc_n32g45x *env) { RTC_DateAndTimeDefaultVale(); /* RTC clock source select */ RTC_CLKSourceConfig(RTC_CLK_SRC_TYPE_LSE, true, true); RTC_PrescalerConfig(); /* Adjust time by values entered by the user on the hyperterminal */ RTC_DateRegulate(); RTC_TimeRegulate(); /* Adjust time by values entered by the user on the hyperterminal */ RTC_ConfigCalibOutput(RTC_CALIB_OUTPUT_1HZ); /* Calibrate output config,push pull */ RTC_ConfigOutputType(RTC_OUTPUT_PUSHPULL); /* Calibrate output enable*/ RTC_EnableCalibOutput(ENABLE); } static uint16_t vRtcSet(tRtc_n32g45x *env, time_t *timestamp) { struct tm *dateTime; dateTime = localtime(timestamp); RTC_DateType date; date.Year = dateTime->tm_year - 2000; date.Month = dateTime->tm_mon; date.Date = dateTime->tm_mday; RTC_TimeType time; time.Hours = dateTime->tm_hour; time.Minutes = dateTime->tm_min; time.Seconds = dateTime->tm_sec; // set date RTC_SetDate(RTC_FORMAT_BIN, &date); // set time RTC_ConfigTime(RTC_FORMAT_BIN, &time); return 0; } static uint16_t vRtcSetTM(tRtc_n32g45x *env, struct tm *timestampTM) { RTC_DateType date; date.Year = timestampTM->tm_year; date.Month = timestampTM->tm_mon - 1; date.Date = timestampTM->tm_mday; RTC_TimeType time; time.Hours = timestampTM->tm_hour; time.Minutes = timestampTM->tm_min; time.Seconds = timestampTM->tm_sec; // set date RTC_SetDate(RTC_FORMAT_BIN, &date); // set time RTC_ConfigTime(RTC_FORMAT_BIN, &time); return 0; } static uint16_t vRtcGet(tRtc_n32g45x *env, time_t *timestamp) { RTC_DateType time; RTC_GetDate(RTC_FORMAT_BIN, &time); RTC_TimeType time2; RTC_GetTime(RTC_FORMAT_BIN, &time2); struct tm dateTime; memset(&dateTime, 0, sizeof(dateTime)); time.Year = time.Year + 12; dateTime.tm_year = time.Year + 100; dateTime.tm_mon = time.Month; dateTime.tm_mday = time.Date; dateTime.tm_hour = time2.Hours; dateTime.tm_min = time2.Minutes; dateTime.tm_sec = time2.Seconds; *timestamp = mktime(&dateTime); return 0; } static uint16_t vRtcGetTM(tRtc_n32g45x *env, struct tm *timestampTM) { RTC_DateType time; RTC_GetDate(RTC_FORMAT_BIN, &time); RTC_TimeType time2; RTC_GetTime(RTC_FORMAT_BIN, &time2); memset(timestampTM, 0, sizeof(struct tm)); timestampTM->tm_year = time.Year + 90; timestampTM->tm_mon = time.Month; timestampTM->tm_mday = time.Date; timestampTM->tm_hour = time2.Hours; timestampTM->tm_min = time2.Minutes; timestampTM->tm_sec = time2.Seconds; return 0; } tRtcIO vRtcGetIo(tRtc_n32g45x *env) { tRtcIO io = { .env = env, .get = (RtcIOTransaction) vRtcGet, .set = (RtcIOTransaction) vRtcSet, .getTM = (RtcIOTransactionTM) vRtcGetTM, .setTM = (RtcIOTransactionTM) vRtcSetTM }; return io; }