#ifndef __F41X_RTC__ #define __F41X_RTC__ #include "gps.h" #define RTC_CAPTURE_BASE 0x00 #define RTC_RTC0CN 0x06 #define RTC_RTC0XCN 0x07 #define RTC_ALARM_BASE 0x08 #define RTC_RAMADDR 0x0E #define RTC_RAMDATA 0x0F #define RTC_SHORT(address) (address | 0x10) #define RTC_AUTO_READ(address) (address | 0x40) void rtc_write(u8 address, u8 value); u8 rtc_read(u8 address); void rtc_set_seconds(u32 *seconds); void rtc_set_seconds_now(); void rtc_get_seconds(u32 *seconds); void rtc_get_seconds_now(); void rtc_set_alarm(u32 *seconds); void rtc_init(); void rtc_polling(); extern u32 xdata rtc_ms_next_interrupt; #define RTC_FORECE_UPDATE_SYSTEM_TIME 5 #ifdef MAIN_C void interrupt_rtc(void) interrupt 8 { // Fake 1pps output P1 &= ~(0x01); // LED toggle P1 ^= 0x80; // update system time if GPS is not alive. if(++global_ms_update_before_n_seconds > RTC_FORECE_UPDATE_SYSTEM_TIME){ global_ms = rtc_ms_next_interrupt; global_ms_update_before_n_seconds = 0; } // Clear Flag and Alarm Disable { u8 rtc0cn = rtc_read(RTC_SHORT(RTC_RTC0CN)); rtc_write(RTC_SHORT(RTC_RTC0CN), (rtc0cn & (~0x2C))); } } #endif #endif /* __F41X_RTC__ */