00001
00059 #include "rtc_driver.h"
00060
00061
00074 void RTC_Initialize( uint16_t period,
00075 uint16_t count,
00076 uint16_t compareValue,
00077 RTC_PRESCALER_t prescaler )
00078 {
00079 RTC.PER = period - 1;
00080 RTC.CNT = count;
00081 RTC.COMP = compareValue;
00082 RTC.CTRL = ( RTC.CTRL & ~RTC_PRESCALER_gm ) | prescaler;
00083 }
00084
00085
00090 void RTC_SetOverflowIntLevel( RTC_OVFINTLVL_t intLevel )
00091 {
00092 RTC.INTCTRL = ( RTC.INTCTRL & ~RTC_OVFINTLVL_gm ) | intLevel;
00093 }
00094
00095
00100 void RTC_SetCompareIntLevel( RTC_COMPINTLVL_t intLevel )
00101 {
00102 RTC.INTCTRL = ( RTC.INTCTRL & ~RTC_COMPINTLVL_gm ) | intLevel;
00103 }
00104
00105
00112 void RTC_SetIntLevels( RTC_OVFINTLVL_t ovfIntLevel,
00113 RTC_COMPINTLVL_t compIntLevel )
00114 {
00115 RTC.INTCTRL = ( RTC.INTCTRL &
00116 ~( RTC_COMPINTLVL_gm | RTC_OVFINTLVL_gm ) ) |
00117 ovfIntLevel |
00118 compIntLevel;
00119 }
00120
00121
00137 void RTC_SetAlarm( uint16_t alarmTimeout )
00138 {
00139
00140 uint16_t compareValue = RTC.CNT + alarmTimeout;
00141
00142
00143 if (compareValue > RTC.PER){
00144 compareValue -= RTC.PER;
00145 }
00146
00147
00148 RTC.COMP = compareValue;
00149 }
00150
00151
00159 void RTC_SetPrescaler( RTC_PRESCALER_t prescaler )
00160 {
00161 RTC.CTRL = ( RTC.CTRL & ~RTC_PRESCALER_gm ) | prescaler;
00162 }