stm32/rtc: implement stop_wakeup_alarm
This commit is contained in:
parent
a0c69ffe02
commit
b69861013a
@ -137,20 +137,24 @@ impl super::Rtc {
|
|||||||
use crate::interrupt::typelevel::Interrupt;
|
use crate::interrupt::typelevel::Interrupt;
|
||||||
use crate::rcc::get_freqs;
|
use crate::rcc::get_freqs;
|
||||||
|
|
||||||
crate::interrupt::typelevel::RTC_WKUP::disable();
|
|
||||||
|
|
||||||
RTC::regs().cr().modify(|w| {
|
RTC::regs().cr().modify(|w| {
|
||||||
w.set_wute(false);
|
w.set_wute(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
let rtc_hz = unsafe { get_freqs() }.rtc.unwrap().0 as u64;
|
// Wait for the wakeup timer to stop
|
||||||
|
while !RTC::regs().isr().read().wutf() {}
|
||||||
|
|
||||||
// Choose the lowest prescaler available
|
RTC::regs().isr().modify(|w| w.set_wutf(false));
|
||||||
#[cfg(stm32wb)]
|
|
||||||
let rtc_hz = rtc_hz / 2;
|
crate::interrupt::typelevel::RTC_WKUP::disable();
|
||||||
|
|
||||||
|
let rtc_hz = unsafe { get_freqs() }.rtc.unwrap().0 as u64;
|
||||||
|
let prescaler: WakeupPrescaler = RTC::regs().cr().read().wucksel().into();
|
||||||
let rtc_ticks = RTC::regs().wutr().read().wut();
|
let rtc_ticks = RTC::regs().wutr().read().wut();
|
||||||
|
|
||||||
Duration::from_ticks(rtc_ticks as u64 * TICK_HZ / rtc_hz)
|
Duration::from_ticks(
|
||||||
|
rtc_ticks as u64 * TICK_HZ * (<WakeupPrescaler as Into<u32>>::into(prescaler) as u64) / rtc_hz,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user