aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Rosenthal <[email protected]>2021-11-10 17:19:03 -0700
committerJacob Rosenthal <[email protected]>2021-11-10 17:19:03 -0700
commit5f28153b811caf1e47b51d87eae74d36eeff9a7e (patch)
tree18cb4136421f76111e7f4ca9b9d6460583ef0f69
parent3b7af2f4edccc57d31c6db5644b3f1384600f0fd (diff)
disconnect pwm pins on drop
-rw-r--r--embassy-nrf/src/pwm.rs12
1 files changed, 12 insertions, 0 deletions
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> {
237 237
238impl<'a, T: Instance> Drop for SequencePwm<'a, T> { 238impl<'a, T: Instance> Drop for SequencePwm<'a, T> {
239 fn drop(&mut self) { 239 fn drop(&mut self) {
240 let r = T::regs();
241
240 self.stop(); 242 self.stop();
241 self.disable(); 243 self.disable();
242 244
243 if let Some(pin) = &self.ch0 { 245 if let Some(pin) = &self.ch0 {
244 pin.set_low(); 246 pin.set_low();
245 pin.conf().write(|w| w); 247 pin.conf().write(|w| w);
248 r.psel.out[0].write(|w| unsafe { w.bits(0x80000000) });
246 } 249 }
247 if let Some(pin) = &self.ch1 { 250 if let Some(pin) = &self.ch1 {
248 pin.set_low(); 251 pin.set_low();
249 pin.conf().write(|w| w); 252 pin.conf().write(|w| w);
253 r.psel.out[1].write(|w| unsafe { w.bits(0x80000000) });
250 } 254 }
251 if let Some(pin) = &self.ch2 { 255 if let Some(pin) = &self.ch2 {
252 pin.set_low(); 256 pin.set_low();
253 pin.conf().write(|w| w); 257 pin.conf().write(|w| w);
258 r.psel.out[2].write(|w| unsafe { w.bits(0x80000000) });
254 } 259 }
255 if let Some(pin) = &self.ch3 { 260 if let Some(pin) = &self.ch3 {
256 pin.set_low(); 261 pin.set_low();
257 pin.conf().write(|w| w); 262 pin.conf().write(|w| w);
263 r.psel.out[3].write(|w| unsafe { w.bits(0x80000000) });
258 } 264 }
259 265
260 info!("pwm drop: done"); 266 info!("pwm drop: done");
@@ -522,24 +528,30 @@ impl<'d, T: Instance> SimplePwm<'d, T> {
522 528
523impl<'a, T: Instance> Drop for SimplePwm<'a, T> { 529impl<'a, T: Instance> Drop for SimplePwm<'a, T> {
524 fn drop(&mut self) { 530 fn drop(&mut self) {
531 let r = T::regs();
532
525 self.stop(); 533 self.stop();
526 self.disable(); 534 self.disable();
527 535
528 if let Some(pin) = &self.ch0 { 536 if let Some(pin) = &self.ch0 {
529 pin.set_low(); 537 pin.set_low();
530 pin.conf().write(|w| w); 538 pin.conf().write(|w| w);
539 r.psel.out[0].write(|w| unsafe { w.bits(0x80000000) });
531 } 540 }
532 if let Some(pin) = &self.ch1 { 541 if let Some(pin) = &self.ch1 {
533 pin.set_low(); 542 pin.set_low();
534 pin.conf().write(|w| w); 543 pin.conf().write(|w| w);
544 r.psel.out[1].write(|w| unsafe { w.bits(0x80000000) });
535 } 545 }
536 if let Some(pin) = &self.ch2 { 546 if let Some(pin) = &self.ch2 {
537 pin.set_low(); 547 pin.set_low();
538 pin.conf().write(|w| w); 548 pin.conf().write(|w| w);
549 r.psel.out[2].write(|w| unsafe { w.bits(0x80000000) });
539 } 550 }
540 if let Some(pin) = &self.ch3 { 551 if let Some(pin) = &self.ch3 {
541 pin.set_low(); 552 pin.set_low();
542 pin.conf().write(|w| w); 553 pin.conf().write(|w| w);
554 r.psel.out[3].write(|w| unsafe { w.bits(0x80000000) });
543 } 555 }
544 556
545 info!("pwm drop: done"); 557 info!("pwm drop: done");