mirror of
https://github.com/italicsjenga/rp-hal-boards.git
synced 2025-01-23 01:36:35 +11:00
Panic if period exceeds maximum value, fmt
This commit is contained in:
parent
cdd9a553ad
commit
c568f0d3df
1 changed files with 21 additions and 26 deletions
|
@ -1,12 +1,8 @@
|
|||
//! Watchdog
|
||||
// See [Chapter 4 Section 7](https://datasheets.raspberrypi.org/rp2040/rp2040_datasheet.pdf) for more details
|
||||
use embedded_hal::watchdog;
|
||||
use embedded_time::{
|
||||
duration,
|
||||
fixed_point::FixedPoint,
|
||||
};
|
||||
use crate::pac::WATCHDOG;
|
||||
|
||||
use embedded_hal::watchdog;
|
||||
use embedded_time::{duration, fixed_point::FixedPoint};
|
||||
|
||||
///
|
||||
pub struct Watchdog {
|
||||
|
@ -34,27 +30,22 @@ impl Watchdog {
|
|||
|
||||
///
|
||||
pub fn pause_on_debug(&mut self, pause: bool) {
|
||||
self.watchdog
|
||||
.ctrl
|
||||
.write(|w| {
|
||||
w
|
||||
.pause_dbg0().bit(pause)
|
||||
.pause_dbg1().bit(pause)
|
||||
.pause_jtag().bit(pause)
|
||||
|
||||
})
|
||||
self.watchdog.ctrl.write(|w| {
|
||||
w.pause_dbg0()
|
||||
.bit(pause)
|
||||
.pause_dbg1()
|
||||
.bit(pause)
|
||||
.pause_jtag()
|
||||
.bit(pause)
|
||||
})
|
||||
}
|
||||
|
||||
fn load_counter(&self, counter: u32) {
|
||||
self.watchdog
|
||||
.load
|
||||
.write(|w| unsafe { w.bits(counter)});
|
||||
self.watchdog.load.write(|w| unsafe { w.bits(counter) });
|
||||
}
|
||||
|
||||
fn enable(&self, bit: bool) {
|
||||
self.watchdog
|
||||
.ctrl
|
||||
.write(|w| w.enable().bit(bit))
|
||||
self.watchdog.ctrl.write(|w| w.enable().bit(bit))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -67,12 +58,16 @@ impl watchdog::Watchdog for Watchdog {
|
|||
impl watchdog::WatchdogEnable for Watchdog {
|
||||
type Time = duration::Microseconds;
|
||||
|
||||
/// Due to a logic error, the watchdog decrements by 2 and
|
||||
/// value must be compensated; see RP2040-E1
|
||||
fn start<T: Into<Self::Time>>(&mut self, period: T) {
|
||||
self.delay_ms = period
|
||||
.into()
|
||||
.integer() * 2;
|
||||
const MAX_PERIOD: u32 = 0x7FFFFF;
|
||||
|
||||
// Due to a logic error, the watchdog decrements by 2 and
|
||||
// the load value must be compensated; see RP2040-E1
|
||||
self.delay_ms = period.into().integer() * 2;
|
||||
|
||||
if self.delay_ms > MAX_PERIOD {
|
||||
panic!("Period cannot exceed maximum load value of {}", MAX_PERIOD);
|
||||
}
|
||||
|
||||
self.enable(false);
|
||||
self.load_counter(self.delay_ms);
|
||||
|
|
Loading…
Add table
Reference in a new issue