aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-rp/src/watchdog.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/embassy-rp/src/watchdog.rs b/embassy-rp/src/watchdog.rs
index 760d6aac2..49cf03850 100644
--- a/embassy-rp/src/watchdog.rs
+++ b/embassy-rp/src/watchdog.rs
@@ -89,17 +89,25 @@ impl Watchdog {
89 89
90 /// Start the watchdog timer 90 /// Start the watchdog timer
91 pub fn start(&mut self, period: Duration) { 91 pub fn start(&mut self, period: Duration) {
92 #[cfg(feature = "rp2040")]
93 const MAX_PERIOD: u32 = 0xFFFFFF / 2;
94 #[cfg(feature = "_rp235x")]
92 const MAX_PERIOD: u32 = 0xFFFFFF; 95 const MAX_PERIOD: u32 = 0xFFFFFF;
93 96
94 let delay_us = period.as_micros(); 97 let delay_us = period.as_micros();
95 if delay_us > (MAX_PERIOD / 2) as u64 { 98 if delay_us > (MAX_PERIOD) as u64 {
96 panic!("Period cannot exceed {} microseconds", MAX_PERIOD / 2); 99 panic!("Period cannot exceed {} microseconds", MAX_PERIOD);
97 } 100 }
98 let delay_us = delay_us as u32; 101 let delay_us = delay_us as u32;
99 102
100 // Due to a logic error, the watchdog decrements by 2 and 103 // Due to a logic error, the watchdog decrements by 2 and
101 // the load value must be compensated; see RP2040-E1 104 // the load value must be compensated; see RP2040-E1
102 self.load_value = delay_us * 2; 105 // This errata is fixed in the RP235x
106 if cfg!(feature = "rp2040") {
107 self.load_value = delay_us * 2;
108 } else {
109 self.load_value = delay_us;
110 }
103 111
104 self.enable(false); 112 self.enable(false);
105 self.configure_wdog_reset_triggers(); 113 self.configure_wdog_reset_triggers();