Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
mbed-os/features/unsupported/tests/KL25Z/rtc/main.cpp@0:6bf0743ece18, 2020-03-28 (annotated)
- Committer:
- demayer
- Date:
- Sat Mar 28 15:28:19 2020 +0000
- Revision:
- 0:6bf0743ece18
IMU Thread with an event-queue running parallel to handle tasks like a 5 times blinking LED. Button with interrupt detected.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
demayer | 0:6bf0743ece18 | 1 | #include "mbed.h" |
demayer | 0:6bf0743ece18 | 2 | |
demayer | 0:6bf0743ece18 | 3 | DigitalOut status_led(LED_BLUE); |
demayer | 0:6bf0743ece18 | 4 | DigitalOut error_led(LED_RED); |
demayer | 0:6bf0743ece18 | 5 | |
demayer | 0:6bf0743ece18 | 6 | extern "C" void RTC_IRQHandler(void) { |
demayer | 0:6bf0743ece18 | 7 | error_led = 0; |
demayer | 0:6bf0743ece18 | 8 | } |
demayer | 0:6bf0743ece18 | 9 | |
demayer | 0:6bf0743ece18 | 10 | extern "C" void RTC_Seconds_IRQHandler(void) { |
demayer | 0:6bf0743ece18 | 11 | error_led = 0; |
demayer | 0:6bf0743ece18 | 12 | } |
demayer | 0:6bf0743ece18 | 13 | |
demayer | 0:6bf0743ece18 | 14 | extern "C" void HardFault_Handler(void) { |
demayer | 0:6bf0743ece18 | 15 | error_led = 0; |
demayer | 0:6bf0743ece18 | 16 | } |
demayer | 0:6bf0743ece18 | 17 | |
demayer | 0:6bf0743ece18 | 18 | extern "C" void NMI_Handler_Handler(void) { |
demayer | 0:6bf0743ece18 | 19 | error_led = 0; |
demayer | 0:6bf0743ece18 | 20 | } |
demayer | 0:6bf0743ece18 | 21 | |
demayer | 0:6bf0743ece18 | 22 | void rtc_init(void) { |
demayer | 0:6bf0743ece18 | 23 | // enable the clock to SRTC module register space |
demayer | 0:6bf0743ece18 | 24 | SIM->SCGC6 |= SIM_SCGC6_RTC_MASK; |
demayer | 0:6bf0743ece18 | 25 | SIM->SOPT1 = (SIM->SOPT1 & ~SIM_SOPT1_OSC32KSEL_MASK) | SIM_SOPT1_OSC32KSEL(0); |
demayer | 0:6bf0743ece18 | 26 | |
demayer | 0:6bf0743ece18 | 27 | // disable interrupts |
demayer | 0:6bf0743ece18 | 28 | NVIC_DisableIRQ(RTC_Seconds_IRQn); |
demayer | 0:6bf0743ece18 | 29 | NVIC_DisableIRQ(RTC_IRQn); |
demayer | 0:6bf0743ece18 | 30 | |
demayer | 0:6bf0743ece18 | 31 | // Reset |
demayer | 0:6bf0743ece18 | 32 | RTC->CR = RTC_CR_SWR_MASK; |
demayer | 0:6bf0743ece18 | 33 | RTC->CR &= ~RTC_CR_SWR_MASK; |
demayer | 0:6bf0743ece18 | 34 | |
demayer | 0:6bf0743ece18 | 35 | // Allow write |
demayer | 0:6bf0743ece18 | 36 | RTC->CR = RTC_CR_UM_MASK | RTC_CR_SUP_MASK; |
demayer | 0:6bf0743ece18 | 37 | |
demayer | 0:6bf0743ece18 | 38 | NVIC_EnableIRQ(RTC_Seconds_IRQn); |
demayer | 0:6bf0743ece18 | 39 | NVIC_EnableIRQ(RTC_Seconds_IRQn); |
demayer | 0:6bf0743ece18 | 40 | |
demayer | 0:6bf0743ece18 | 41 | printf("LR: 0x%x\n", RTC->LR); |
demayer | 0:6bf0743ece18 | 42 | printf("CR: 0x%x\n", RTC->CR); |
demayer | 0:6bf0743ece18 | 43 | wait(1); |
demayer | 0:6bf0743ece18 | 44 | if (RTC->SR & RTC_SR_TIF_MASK){ |
demayer | 0:6bf0743ece18 | 45 | RTC->TSR = 0; |
demayer | 0:6bf0743ece18 | 46 | } |
demayer | 0:6bf0743ece18 | 47 | RTC->TCR = 0; |
demayer | 0:6bf0743ece18 | 48 | |
demayer | 0:6bf0743ece18 | 49 | // After setting this bit, wait the oscillator startup time before enabling |
demayer | 0:6bf0743ece18 | 50 | // the time counter to allow the clock time to stabilize |
demayer | 0:6bf0743ece18 | 51 | RTC->CR |= RTC_CR_OSCE_MASK; |
demayer | 0:6bf0743ece18 | 52 | for (volatile int i=0; i<0x600000; i++); |
demayer | 0:6bf0743ece18 | 53 | |
demayer | 0:6bf0743ece18 | 54 | //enable seconds interrupts |
demayer | 0:6bf0743ece18 | 55 | RTC->IER |= RTC_IER_TSIE_MASK; |
demayer | 0:6bf0743ece18 | 56 | |
demayer | 0:6bf0743ece18 | 57 | // enable time counter |
demayer | 0:6bf0743ece18 | 58 | RTC->SR |= RTC_SR_TCE_MASK; |
demayer | 0:6bf0743ece18 | 59 | |
demayer | 0:6bf0743ece18 | 60 | |
demayer | 0:6bf0743ece18 | 61 | } |
demayer | 0:6bf0743ece18 | 62 | |
demayer | 0:6bf0743ece18 | 63 | int main() { |
demayer | 0:6bf0743ece18 | 64 | error_led = 1; |
demayer | 0:6bf0743ece18 | 65 | rtc_init(); |
demayer | 0:6bf0743ece18 | 66 | |
demayer | 0:6bf0743ece18 | 67 | while (true) { |
demayer | 0:6bf0743ece18 | 68 | wait(1); |
demayer | 0:6bf0743ece18 | 69 | status_led = !status_led; |
demayer | 0:6bf0743ece18 | 70 | printf("%u\n", RTC->TSR); |
demayer | 0:6bf0743ece18 | 71 | } |
demayer | 0:6bf0743ece18 | 72 | } |