110 lines
3.1 KiB
C
110 lines
3.1 KiB
C
//
|
|
// Created by ilya on 10.02.23.
|
|
//
|
|
|
|
#include "RTC_n32g45x.h"
|
|
#include <time.h>
|
|
#include <string.h>
|
|
#include <SystemDelayInterface.h>
|
|
#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;
|
|
} |