/** * \brief Interrupt handler for the RTC. Refresh the display. */ void RTC_Handler(void) { uint32_t ul_status = rtc_get_status(RTC); /* Second increment interrupt */ if ((ul_status & RTC_SR_SEC) == RTC_SR_SEC) { /* Disable RTC interrupt */ rtc_disable_interrupt(RTC, RTC_IDR_SECDIS); refresh_display(); rtc_clear_status(RTC, RTC_SCCR_SECCLR); rtc_enable_interrupt(RTC, RTC_IER_SECEN); } else { /* Time or date alarm */ if ((ul_status & RTC_SR_ALARM) == RTC_SR_ALARM) { /* Disable RTC interrupt */ rtc_disable_interrupt(RTC, RTC_IDR_ALRDIS); gs_ul_alarm_triggered = 1; refresh_display(); /* Show additional menu item for clear notification */ gs_ul_menu_shown = 0; rtc_clear_status(RTC, RTC_SCCR_ALRCLR); rtc_enable_interrupt(RTC, RTC_IER_ALREN); } } }
static int rtc_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data) { int len = rtc_get_status(page); if (len <= off+count) *eof = 1; *start = page + off; len -= off; if (len>count) len = count; if (len<0) len = 0; return len; }