Skip to content

Commit 4b3bde1

Browse files
stevew817bulislaw
authored andcommitted
Re-implement RTC for Silicon Labs targets
mbed RTC specifications now dictate that the RTC needs to retain and keep on counting through reset. On Silicon Labs parts, this means the RTC API can not be backed by the Silicon Labs RTC peripheral, since that doesn't provide retention functionality. Therefore: * On EFM32GG, EFM32WG, EFM32LG: mbed RTC API is now backed by BURTC. * On EFM32PG, EFR32MG, EFM32PG12, EFR32MG12: mbed RTC API is now backed by RTCC. * On EFM32ZG, EFM32HG: mbed RTC API is sadly no longer supported, since these chips don't have retained memory.
1 parent f55bece commit 4b3bde1

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

targets/TARGET_Silicon_Labs/TARGET_EFM32/lp_ticker.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,20 @@ void lp_ticker_free()
125125
CMU_ClockEnable(cmuClock_RTC, false);
126126
rtc_inited = false;
127127
}
128+
RTC_FreezeEnable(false);
129+
}
130+
131+
void rtc_set_comp0_value(uint64_t value, bool enable)
132+
{
133+
rtc_enable_comp0(false);
134+
135+
/* Set callback */
136+
RTC_FreezeEnable(true);
137+
extended_comp0 = (uint32_t) (value >> RTC_BITS);
138+
RTC_CompareSet(0, (uint32_t) (value & RTC_MAX_VALUE));
139+
RTC_FreezeEnable(false);
140+
141+
rtc_enable_comp0(enable);
128142
}
129143

130144
void lp_ticker_set_interrupt(timestamp_t timestamp)

targets/targets.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2919,7 +2919,7 @@
29192919
"EFM32GG_STK3700": {
29202920
"inherits": ["EFM32GG990F1024"],
29212921
"progen": {"target": "efm32gg-stk"},
2922-
"device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH", "ITM"],
2922+
"device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH", "ITM"],
29232923
"forced_reset_timeout": 2,
29242924
"config": {
29252925
"hf_clock_src": {
@@ -2972,7 +2972,7 @@
29722972
},
29732973
"EFM32LG_STK3600": {
29742974
"inherits": ["EFM32LG990F256"],
2975-
"device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH"],
2975+
"device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH"],
29762976
"forced_reset_timeout": 2,
29772977
"device_name": "EFM32LG990F256",
29782978
"config": {
@@ -3027,7 +3027,7 @@
30273027
"EFM32WG_STK3800": {
30283028
"inherits": ["EFM32WG990F256"],
30293029
"progen": {"target": "efm32wg-stk"},
3030-
"device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH"],
3030+
"device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH"],
30313031
"forced_reset_timeout": 2,
30323032
"config": {
30333033
"hf_clock_src": {
@@ -3188,7 +3188,7 @@
31883188
},
31893189
"EFM32PG_STK3401": {
31903190
"inherits": ["EFM32PG1B100F256GM32"],
3191-
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH"],
3191+
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH"],
31923192
"forced_reset_timeout": 2,
31933193
"config": {
31943194
"hf_clock_src": {
@@ -3251,7 +3251,7 @@
32513251
},
32523252
"EFR32MG1_BRD4150": {
32533253
"inherits": ["EFR32MG1P132F256GM48"],
3254-
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH"],
3254+
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH"],
32553255
"forced_reset_timeout": 2,
32563256
"config": {
32573257
"hf_clock_src": {
@@ -3294,7 +3294,7 @@
32943294
},
32953295
"TB_SENSE_1": {
32963296
"inherits": ["EFR32MG1P233F256GM48"],
3297-
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH"],
3297+
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "FLASH"],
32983298
"forced_reset_timeout": 5,
32993299
"config": {
33003300
"hf_clock_src": {
@@ -3342,7 +3342,7 @@
33423342
},
33433343
"EFM32PG12_STK3402": {
33443344
"inherits": ["EFM32PG12B500F1024GL125"],
3345-
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "TRNG", "FLASH"],
3345+
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "TRNG", "FLASH"],
33463346
"forced_reset_timeout": 2,
33473347
"config": {
33483348
"hf_clock_src": {
@@ -3396,7 +3396,7 @@
33963396
"TB_SENSE_12": {
33973397
"inherits": ["EFR32MG12P332F1024GL125"],
33983398
"device_name": "EFR32MG12P332F1024GL125",
3399-
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "TRNG", "FLASH"],
3399+
"device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "USTICKER", "TRNG", "FLASH"],
34003400
"forced_reset_timeout": 5,
34013401
"config": {
34023402
"hf_clock_src": {

0 commit comments

Comments
 (0)