00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00020 #include "sceptre.h"
00021
00022 extern void rtc_handler(void) __irq;
00023
00024 volatile uint32_t rtc_alarm_active = 0;
00025
00026
00030 void rtc_handler(void) __irq
00031 {
00032 ILR |= ILR_RTCCIF;
00033 IENABLE;
00034
00035 rtc_alarm_active = 1;
00036
00037 IDISABLE;
00038 VICVectAddr = 0;
00039 }
00040
00041
00045 void rtc_init(void)
00046 {
00047 rtc_alarm_active = 0;
00048
00049 AMR = 0;
00050 CIIR = 0;
00051 CCR = 0;
00052
00053
00054 PREINT = PREINT_RTC;
00055 PREFRAC = PREFRAC_RTC;
00056
00057 CCR = CCR_CLKEN;
00058 CCR |= CCR_CLKSRC;
00059 PCONP &= ~(1<<9);
00060 }
00061
00062
00066 void rtc_start(void)
00067 {
00068 CCR |= CCR_CLKEN;
00069 ILR = ILR_RTCCIF;
00070 }
00071
00072
00076 void rtc_stop(void)
00077 {
00078 CCR &= ~CCR_CLKEN;
00079 }
00080
00081
00085 void rtc_clear_tick_counter(void)
00086 {
00087 CCR |= CCR_CTCRST;
00088 }
00089
00090
00096 void rtc_set_time(const rtc_time_t *p_time)
00097 {
00098 SEC = p_time->seconds;
00099 MINUTES = p_time->minutes;
00100 HOUR = p_time->hours;
00101 DOM = p_time->day_of_month;
00102 DOW = p_time->day_of_week;
00103 DOY = p_time->day_of_year;
00104 MONTH = p_time->month;
00105 YEAR = p_time->year;
00106 }
00107
00108
00114 void rtc_set_alarm(const rtc_time_t *p_time)
00115 {
00116 ALSEC = p_time->seconds;
00117 ALMIN = p_time->minutes;
00118 ALHOUR = p_time->hours;
00119 ALDOM = p_time->day_of_month;
00120 ALDOW = p_time->day_of_week;
00121 ALDOY = p_time->day_of_year;
00122 ALMON = p_time->month;
00123 ALYEAR = p_time->year;
00124 }
00125
00126
00132 void rtc_get_time(rtc_time_t *p_time)
00133 {
00134 p_time->seconds = SEC;
00135 p_time->minutes = MINUTES;
00136 p_time->hours = HOUR;
00137 p_time->day_of_month = DOM;
00138 p_time->day_of_week = DOW;
00139 p_time->day_of_year = DOY;
00140 p_time->month = MONTH;
00141 p_time->year = YEAR;
00142 }
00143
00144
00150 void rtc_set_alarm_mask(uint32_t mask)
00151 {
00152 AMR = mask;
00153 }
00154
00155
00156
00157
00158