EL4121 Embedded System / mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

UserRevisionLine numberNew contents of line
be_bryan 0:b74591d5ab33 1 #include "mbed.h"
be_bryan 0:b74591d5ab33 2
be_bryan 0:b74591d5ab33 3 DigitalOut status_led(LED_BLUE);
be_bryan 0:b74591d5ab33 4 DigitalOut error_led(LED_RED);
be_bryan 0:b74591d5ab33 5
be_bryan 0:b74591d5ab33 6 extern "C" void RTC_IRQHandler(void) {
be_bryan 0:b74591d5ab33 7 error_led = 0;
be_bryan 0:b74591d5ab33 8 }
be_bryan 0:b74591d5ab33 9
be_bryan 0:b74591d5ab33 10 extern "C" void RTC_Seconds_IRQHandler(void) {
be_bryan 0:b74591d5ab33 11 error_led = 0;
be_bryan 0:b74591d5ab33 12 }
be_bryan 0:b74591d5ab33 13
be_bryan 0:b74591d5ab33 14 extern "C" void HardFault_Handler(void) {
be_bryan 0:b74591d5ab33 15 error_led = 0;
be_bryan 0:b74591d5ab33 16 }
be_bryan 0:b74591d5ab33 17
be_bryan 0:b74591d5ab33 18 extern "C" void NMI_Handler_Handler(void) {
be_bryan 0:b74591d5ab33 19 error_led = 0;
be_bryan 0:b74591d5ab33 20 }
be_bryan 0:b74591d5ab33 21
be_bryan 0:b74591d5ab33 22 void rtc_init(void) {
be_bryan 0:b74591d5ab33 23 // enable the clock to SRTC module register space
be_bryan 0:b74591d5ab33 24 SIM->SCGC6 |= SIM_SCGC6_RTC_MASK;
be_bryan 0:b74591d5ab33 25 SIM->SOPT1 = (SIM->SOPT1 & ~SIM_SOPT1_OSC32KSEL_MASK) | SIM_SOPT1_OSC32KSEL(0);
be_bryan 0:b74591d5ab33 26
be_bryan 0:b74591d5ab33 27 // disable interrupts
be_bryan 0:b74591d5ab33 28 NVIC_DisableIRQ(RTC_Seconds_IRQn);
be_bryan 0:b74591d5ab33 29 NVIC_DisableIRQ(RTC_IRQn);
be_bryan 0:b74591d5ab33 30
be_bryan 0:b74591d5ab33 31 // Reset
be_bryan 0:b74591d5ab33 32 RTC->CR = RTC_CR_SWR_MASK;
be_bryan 0:b74591d5ab33 33 RTC->CR &= ~RTC_CR_SWR_MASK;
be_bryan 0:b74591d5ab33 34
be_bryan 0:b74591d5ab33 35 // Allow write
be_bryan 0:b74591d5ab33 36 RTC->CR = RTC_CR_UM_MASK | RTC_CR_SUP_MASK;
be_bryan 0:b74591d5ab33 37
be_bryan 0:b74591d5ab33 38 NVIC_EnableIRQ(RTC_Seconds_IRQn);
be_bryan 0:b74591d5ab33 39 NVIC_EnableIRQ(RTC_Seconds_IRQn);
be_bryan 0:b74591d5ab33 40
be_bryan 0:b74591d5ab33 41 printf("LR: 0x%x\n", RTC->LR);
be_bryan 0:b74591d5ab33 42 printf("CR: 0x%x\n", RTC->CR);
be_bryan 0:b74591d5ab33 43 wait(1);
be_bryan 0:b74591d5ab33 44 if (RTC->SR & RTC_SR_TIF_MASK){
be_bryan 0:b74591d5ab33 45 RTC->TSR = 0;
be_bryan 0:b74591d5ab33 46 }
be_bryan 0:b74591d5ab33 47 RTC->TCR = 0;
be_bryan 0:b74591d5ab33 48
be_bryan 0:b74591d5ab33 49 // After setting this bit, wait the oscillator startup time before enabling
be_bryan 0:b74591d5ab33 50 // the time counter to allow the clock time to stabilize
be_bryan 0:b74591d5ab33 51 RTC->CR |= RTC_CR_OSCE_MASK;
be_bryan 0:b74591d5ab33 52 for (volatile int i=0; i<0x600000; i++);
be_bryan 0:b74591d5ab33 53
be_bryan 0:b74591d5ab33 54 //enable seconds interrupts
be_bryan 0:b74591d5ab33 55 RTC->IER |= RTC_IER_TSIE_MASK;
be_bryan 0:b74591d5ab33 56
be_bryan 0:b74591d5ab33 57 // enable time counter
be_bryan 0:b74591d5ab33 58 RTC->SR |= RTC_SR_TCE_MASK;
be_bryan 0:b74591d5ab33 59
be_bryan 0:b74591d5ab33 60
be_bryan 0:b74591d5ab33 61 }
be_bryan 0:b74591d5ab33 62
be_bryan 0:b74591d5ab33 63 int main() {
be_bryan 0:b74591d5ab33 64 error_led = 1;
be_bryan 0:b74591d5ab33 65 rtc_init();
be_bryan 0:b74591d5ab33 66
be_bryan 0:b74591d5ab33 67 while (true) {
be_bryan 0:b74591d5ab33 68 wait(1);
be_bryan 0:b74591d5ab33 69 status_led = !status_led;
be_bryan 0:b74591d5ab33 70 printf("%u\n", RTC->TSR);
be_bryan 0:b74591d5ab33 71 }
be_bryan 0:b74591d5ab33 72 }