Skip to content

Commit 04f7237

Browse files
committed
[M2351] Meet new RTC HAL spec (Mbed OS 5.9)
1. Power down RTC access from CPU domain in rtc_free. After rtc_free, RTC gets inaccessible from CPU domain but keeps counting. 2. Fix RTC cannot cross reset cycle.
1 parent 6729b65 commit 04f7237

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

targets/TARGET_NUVOTON/TARGET_M2351/rtc_api.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ void rtc_init(void)
127127
__NONSECURE_ENTRY
128128
void rtc_free(void)
129129
{
130-
// N/A
130+
CLK_DisableModuleClock_S(rtc_modinit.clkidx);
131131
}
132132

133133
__NONSECURE_ENTRY
@@ -169,9 +169,17 @@ time_t rtc_read(void)
169169
if (! _rtc_maketime(&datetime_tm, &t_hwrtc_origin, RTC_FULL_LEAP_YEAR_SUPPORT)) {
170170
return 0;
171171
}
172+
173+
/* Load t_write from RTC spare register to cross reset cycle */
174+
RTC_T *rtc_base = (RTC_T *) NU_MODBASE(rtc_modinit.modname);
175+
RTC_WaitAccessEnable();
176+
RTC_EnableSpareAccess();
177+
RTC_WaitAccessEnable();
178+
t_write = RTC_READ_SPARE_REGISTER(rtc_base, 0);
172179
}
173180

174181
S_RTC_TIME_DATA_T hwrtc_datetime_2K_present;
182+
RTC_WaitAccessEnable();
175183
RTC_GetDateAndTime(&hwrtc_datetime_2K_present);
176184
/* Convert date time from H/W RTC to struct TM */
177185
rtc_convert_datetime_hwrtc_to_tm(&datetime_tm, &hwrtc_datetime_2K_present);
@@ -195,6 +203,14 @@ void rtc_write(time_t t)
195203

196204
t_write = t;
197205

206+
/* Store t_write to RTC spare register to cross reset cycle */
207+
RTC_T *rtc_base = (RTC_T *) NU_MODBASE(rtc_modinit.modname);
208+
RTC_WaitAccessEnable();
209+
RTC_EnableSpareAccess();
210+
RTC_WaitAccessEnable();
211+
RTC_WRITE_SPARE_REGISTER(rtc_base, 0, t_write);
212+
213+
RTC_WaitAccessEnable();
198214
RTC_SetDateAndTime((S_RTC_TIME_DATA_T *) &DATETIME_HWRTC_ORIGIN);
199215
/* NOTE: When engine is clocked by low power clock source (LXT/LIRC), we need to wait for 3 engine clocks. */
200216
wait_us((NU_US_PER_SEC / NU_RTCCLK_PER_SEC) * 3);

targets/targets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4246,7 +4246,7 @@
42464246
}
42474247
},
42484248
"inherits": ["Target"],
4249-
"device_has": ["USTICKER", "LPTICKER", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "RTC", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "FLASH"],
4249+
"device_has": ["USTICKER", "LPTICKER", "RTC", "ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "STDIO_MESSAGES", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "TRNG", "FLASH"],
42504250
"detect_code": ["1305"],
42514251
"release_versions": ["5"],
42524252
"device_name": "M2351KIAAEES",

0 commit comments

Comments
 (0)