Adding some useful functions for wakeup timer interrupts
This commit is contained in:
parent
a121769785
commit
dd75633245
@ -305,6 +305,8 @@ void rtc_set_prescaler(u32 sync, u32 async);
|
|||||||
void rtc_wait_for_synchro(void);
|
void rtc_wait_for_synchro(void);
|
||||||
void rtc_lock(void);
|
void rtc_lock(void);
|
||||||
void rtc_unlock(void);
|
void rtc_unlock(void);
|
||||||
|
void rtc_set_wakeup_time(u16 wkup_time, u8 rtc_cr_wucksel);
|
||||||
|
void rtc_clear_wakeup_flag(void);
|
||||||
|
|
||||||
END_DECLS
|
END_DECLS
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
@ -75,4 +75,35 @@ void rtc_lock(void) {
|
|||||||
RTC_WPR = 0xff;
|
RTC_WPR = 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
/** @brief Sets the wakeup time auto-reload value
|
||||||
|
|
||||||
|
*/
|
||||||
|
void rtc_set_wakeup_time(u16 wkup_time, u8 rtc_cr_wucksel) {
|
||||||
|
// FTFM:
|
||||||
|
// The following sequence is required to configure or change the wakeup timer
|
||||||
|
// auto-reload value (WUT[15:0] in RTC_WUTR):
|
||||||
|
// 1. Clear WUTE in RTC_CR to disable the wakeup timer.
|
||||||
|
RTC_CR &= ~RTC_CR_WUTE;
|
||||||
|
// 2. Poll WUTWF until it is set in RTC_ISR to make sure the access to wakeup
|
||||||
|
// auto-reload counter and to WUCKSEL[2:0] bits is allowed. It takes around 2
|
||||||
|
// RTCCLK clock cycles (due to clock synchronization).
|
||||||
|
while (!((RTC_ISR) & (RTC_ISR_WUTWF))) { }
|
||||||
|
// 3. Program the wakeup auto-reload value WUT[15:0], and the wakeup clock
|
||||||
|
// selection (WUCKSEL[2:0] bits in RTC_CR).Set WUTE in RTC_CR to enable the
|
||||||
|
// timer again. The wakeup timer restarts down-counting.
|
||||||
|
RTC_WUTR = wkup_time;
|
||||||
|
RTC_CR |= (rtc_cr_wucksel << RTC_CR_WUCLKSEL_SHIFT);
|
||||||
|
RTC_CR |= RTC_CR_WUTE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
/** @brief Clears the wakeup flag
|
||||||
|
|
||||||
|
@details This function should be called first in the rtc_wkup_isr()
|
||||||
|
*/
|
||||||
|
void rtc_clear_wakeup_flag(void) {
|
||||||
|
RTC_ISR &= ~RTC_ISR_WUTF;
|
||||||
|
}
|
||||||
|
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user