From 5f28153b811caf1e47b51d87eae74d36eeff9a7e Mon Sep 17 00:00:00 2001 From: Jacob Rosenthal Date: Wed, 10 Nov 2021 17:19:03 -0700 Subject: [PATCH] disconnect pwm pins on drop --- embassy-nrf/src/pwm.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/embassy-nrf/src/pwm.rs b/embassy-nrf/src/pwm.rs index f0436b5b4..252e6385e 100644 --- a/embassy-nrf/src/pwm.rs +++ b/embassy-nrf/src/pwm.rs @@ -237,24 +237,30 @@ impl<'d, T: Instance> SequencePwm<'d, T> { impl<'a, T: Instance> Drop for SequencePwm<'a, T> { fn drop(&mut self) { + let r = T::regs(); + self.stop(); self.disable(); if let Some(pin) = &self.ch0 { pin.set_low(); pin.conf().write(|w| w); + r.psel.out[0].write(|w| unsafe { w.bits(0x80000000) }); } if let Some(pin) = &self.ch1 { pin.set_low(); pin.conf().write(|w| w); + r.psel.out[1].write(|w| unsafe { w.bits(0x80000000) }); } if let Some(pin) = &self.ch2 { pin.set_low(); pin.conf().write(|w| w); + r.psel.out[2].write(|w| unsafe { w.bits(0x80000000) }); } if let Some(pin) = &self.ch3 { pin.set_low(); pin.conf().write(|w| w); + r.psel.out[3].write(|w| unsafe { w.bits(0x80000000) }); } info!("pwm drop: done"); @@ -522,24 +528,30 @@ impl<'d, T: Instance> SimplePwm<'d, T> { impl<'a, T: Instance> Drop for SimplePwm<'a, T> { fn drop(&mut self) { + let r = T::regs(); + self.stop(); self.disable(); if let Some(pin) = &self.ch0 { pin.set_low(); pin.conf().write(|w| w); + r.psel.out[0].write(|w| unsafe { w.bits(0x80000000) }); } if let Some(pin) = &self.ch1 { pin.set_low(); pin.conf().write(|w| w); + r.psel.out[1].write(|w| unsafe { w.bits(0x80000000) }); } if let Some(pin) = &self.ch2 { pin.set_low(); pin.conf().write(|w| w); + r.psel.out[2].write(|w| unsafe { w.bits(0x80000000) }); } if let Some(pin) = &self.ch3 { pin.set_low(); pin.conf().write(|w| w); + r.psel.out[3].write(|w| unsafe { w.bits(0x80000000) }); } info!("pwm drop: done");