diff --git a/cpu/lpc23xx/periph/rtc.c b/cpu/lpc23xx/periph/rtc.c index 0820ada8b3..7abf3087d1 100644 --- a/cpu/lpc23xx/periph/rtc.c +++ b/cpu/lpc23xx/periph/rtc.c @@ -44,14 +44,14 @@ void RTC_IRQHandler(void) __attribute__((interrupt("IRQ"))); void rtc_init(void) { - PCONP |= BIT9; - RTC_AMR = 0xff; /* disable alarm irq */ - RTC_CIIR = 0; /* disable increase irq */ - RTC_CISS = 0; /* disable subsecond irq */ + PCONP |= BIT9; + RTC_AMR = 0xff; /* disable alarm irq */ + RTC_CIIR = 0; /* disable increase irq */ + RTC_CISS = 0; /* disable subsecond irq */ - INTWAKE |= BIT15; /* rtc irq wakes up mcu from power down */ + INTWAKE |= BIT15; /* rtc irq wakes up mcu from power down */ - RTC_CCR = CCR_CLKSRC; /* Clock from external 32 kHz Osc. */ + RTC_CCR = CCR_CLKSRC; /* Clock from external 32 kHz Osc. */ /* Initialize clock to a a sane and predictable default * after cold boot or external reset. @@ -64,7 +64,7 @@ void rtc_init(void) rtc_poweron(); DEBUG("%2lu.%2lu.%4lu %2lu:%2lu:%2lu\n", - RTC_DOM, RTC_MONTH, RTC_YEAR, RTC_HOUR, RTC_MIN, RTC_SEC); + RTC_DOM, RTC_MONTH, RTC_YEAR, RTC_HOUR, RTC_MIN, RTC_SEC); } /** @@ -81,83 +81,83 @@ int rtc_set_time(struct tm *localt) rtc_tm_normalize(localt); /* set clock */ - RTC_SEC = localt->tm_sec; - RTC_MIN = localt->tm_min; - RTC_HOUR = localt->tm_hour; - RTC_DOM = localt->tm_mday; - RTC_DOW = localt->tm_wday; - RTC_DOY = localt->tm_yday; + RTC_SEC = localt->tm_sec; + RTC_MIN = localt->tm_min; + RTC_HOUR = localt->tm_hour; + RTC_DOM = localt->tm_mday; + RTC_DOW = localt->tm_wday; + RTC_DOY = localt->tm_yday; RTC_MONTH = localt->tm_mon + 1; - RTC_YEAR = localt->tm_year; + RTC_YEAR = localt->tm_year; return 0; } int rtc_get_time(struct tm *localt) { - if (localt != NULL) { - localt->tm_sec = RTC_SEC; - localt->tm_min = RTC_MIN; - localt->tm_hour = RTC_HOUR; - localt->tm_mday = RTC_DOM; - localt->tm_wday = RTC_DOW; - localt->tm_yday = RTC_DOY; - localt->tm_mon = RTC_MONTH - 1; - localt->tm_year = RTC_YEAR; - localt->tm_isdst = -1; /* not available */ - return 0; + if (localt == NULL) { + return -1; } - return -1; + + localt->tm_sec = RTC_SEC; + localt->tm_min = RTC_MIN; + localt->tm_hour = RTC_HOUR; + localt->tm_mday = RTC_DOM; + localt->tm_wday = RTC_DOW; + localt->tm_yday = RTC_DOY; + localt->tm_mon = RTC_MONTH - 1; + localt->tm_year = RTC_YEAR; + localt->tm_isdst = -1; /* not available */ + + return 0; } int rtc_set_alarm(struct tm *localt, rtc_alarm_cb_t cb, void *arg) { if (localt != NULL) { + /* normalize input */ rtc_tm_normalize(localt); - RTC_ALSEC = localt->tm_sec; - RTC_ALMIN = localt->tm_min; + RTC_ALSEC = localt->tm_sec; + RTC_ALMIN = localt->tm_min; RTC_ALHOUR = localt->tm_hour; - RTC_ALDOM = localt->tm_mday; - RTC_ALDOW = localt->tm_wday; - RTC_ALDOY = localt->tm_yday; - RTC_ALMON = localt->tm_mon + 1; + RTC_ALDOM = localt->tm_mday; + RTC_ALDOW = localt->tm_wday; + RTC_ALDOY = localt->tm_yday; + RTC_ALMON = localt->tm_mon + 1; RTC_ALYEAR = localt->tm_year; - RTC_AMR = 0; /* set which alarm fields to check */ + RTC_AMR = 0; /* set which alarm fields to check */ DEBUG("alarm set %2lu.%2lu.%4lu %2lu:%2lu:%2lu\n", RTC_ALDOM, RTC_ALMON, RTC_ALYEAR, RTC_ALHOUR, RTC_ALMIN, RTC_ALSEC); + } + if (cb) { _cb = cb; _cb_arg = arg; - return 0; - } - else if (cb == NULL) { - return -1; } - RTC_AMR = 0xff; - return -2; + return 0; } int rtc_get_alarm(struct tm *localt) { - if (localt != NULL) { - localt->tm_sec = RTC_ALSEC; - localt->tm_min = RTC_ALMIN; - localt->tm_hour = RTC_ALHOUR; - localt->tm_mday = RTC_ALDOM; - localt->tm_wday = RTC_ALDOW; - localt->tm_yday = RTC_ALDOY; - localt->tm_mon = RTC_ALMON - 1; - localt->tm_year = RTC_ALYEAR; - localt->tm_isdst = -1; /* not available */ - - return 0; + if (localt == NULL) { + return -1; } - return -1; + localt->tm_sec = RTC_ALSEC; + localt->tm_min = RTC_ALMIN; + localt->tm_hour = RTC_ALHOUR; + localt->tm_mday = RTC_ALDOM; + localt->tm_wday = RTC_ALDOW; + localt->tm_yday = RTC_ALDOY; + localt->tm_mon = RTC_ALMON - 1; + localt->tm_year = RTC_ALYEAR; + localt->tm_isdst = -1; /* not available */ + + return 0; } void rtc_clear_alarm(void) @@ -167,8 +167,8 @@ void rtc_clear_alarm(void) void rtc_poweron(void) { - PCONP |= BIT9; - RTC_ILR = (ILR_RTSSF | ILR_RTCCIF | ILR_RTCALF); /* clear interrupt flags */ + PCONP |= BIT9; + RTC_ILR = (ILR_RTSSF | ILR_RTCCIF | ILR_RTCALF); /* clear interrupt flags */ RTC_CCR |= CCR_CLKEN; /* enable clock */ install_irq(RTC_INT, &RTC_IRQHandler, IRQP_RTC); /* install interrupt handler */ } @@ -177,20 +177,13 @@ void rtc_poweroff(void) { RTC_CCR &= ~CCR_CLKEN; /* disable clock */ install_irq(RTC_INT, NULL, 0); - RTC_ILR = 0; PCONP &= ~BIT9; } void RTC_IRQHandler(void) { - if (RTC_ILR & ILR_RTSSF) { - /* sub second interrupt (does not need flag-clearing) */ - } - else if (RTC_ILR & ILR_RTCCIF) { - /* counter increase interrupt */ - } - else if (RTC_ILR & ILR_RTCALF) { - RTC_ILR |= ILR_RTCALF; + if (RTC_ILR & ILR_RTCALF) { + RTC_ILR = ILR_RTCALF; RTC_AMR = 0xff; /* disable alarm irq */ if (_cb) { _cb(_cb_arg);