22
22
#include "mbed_error.h"
23
23
#include "nu_modutil.h"
24
24
#include "nu_miscutil.h"
25
+ #include "mbed_mktime.h"
25
26
26
27
#define YEAR0 1900
27
28
@@ -90,7 +91,7 @@ time_t rtc_read(void)
90
91
timeinfo .tm_sec = rtc_datetime .u32Second ;
91
92
92
93
// Convert to timestamp
93
- time_t t = mktime (& timeinfo );
94
+ time_t t = _rtc_mktime (& timeinfo );
94
95
95
96
return t ;
96
97
}
@@ -102,23 +103,26 @@ void rtc_write(time_t t)
102
103
}
103
104
104
105
// Convert timestamp to struct tm
105
- struct tm * timeinfo = localtime (& t );
106
+ struct tm timeinfo ;
107
+ if (_rtc_localtime (t , & timeinfo ) == false) {
108
+ return ;
109
+ }
106
110
107
111
S_RTC_TIME_DATA_T rtc_datetime ;
108
112
109
113
// Convert S_RTC_TIME_DATA_T to struct tm
110
- rtc_datetime .u32Year = timeinfo -> tm_year + YEAR0 ;
111
- rtc_datetime .u32Month = timeinfo -> tm_mon + 1 ;
112
- rtc_datetime .u32Day = timeinfo -> tm_mday ;
113
- rtc_datetime .u32DayOfWeek = timeinfo -> tm_wday ;
114
- rtc_datetime .u32Hour = timeinfo -> tm_hour ;
115
- rtc_datetime .u32Minute = timeinfo -> tm_min ;
116
- rtc_datetime .u32Second = timeinfo -> tm_sec ;
114
+ rtc_datetime .u32Year = timeinfo . tm_year + YEAR0 ;
115
+ rtc_datetime .u32Month = timeinfo . tm_mon + 1 ;
116
+ rtc_datetime .u32Day = timeinfo . tm_mday ;
117
+ rtc_datetime .u32DayOfWeek = timeinfo . tm_wday ;
118
+ rtc_datetime .u32Hour = timeinfo . tm_hour ;
119
+ rtc_datetime .u32Minute = timeinfo . tm_min ;
120
+ rtc_datetime .u32Second = timeinfo . tm_sec ;
117
121
rtc_datetime .u32TimeScale = RTC_CLOCK_24 ;
118
122
119
123
RTC_SetDateAndTime (& rtc_datetime );
120
- // Wait 3 cycles of engine clock to ensure this RTC write is active
121
- nu_nop ( SystemCoreClock / __LXT * 3 );
124
+ // Wait 3 cycles of engine clock to ensure previous CTL write action is finish
125
+ wait_us ( 30 * 3 );
122
126
}
123
127
124
128
#endif
0 commit comments