diff options
| author | Jacob Rosenthal <[email protected]> | 2021-11-10 17:19:03 -0700 |
|---|---|---|
| committer | Jacob Rosenthal <[email protected]> | 2021-11-10 17:19:03 -0700 |
| commit | 5f28153b811caf1e47b51d87eae74d36eeff9a7e (patch) | |
| tree | 18cb4136421f76111e7f4ca9b9d6460583ef0f69 | |
| parent | 3b7af2f4edccc57d31c6db5644b3f1384600f0fd (diff) | |
disconnect pwm pins on drop
| -rw-r--r-- | embassy-nrf/src/pwm.rs | 12 |
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 | ||
| 238 | impl<'a, T: Instance> Drop for SequencePwm<'a, T> { | 238 | impl<'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 | ||
| 523 | impl<'a, T: Instance> Drop for SimplePwm<'a, T> { | 529 | impl<'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"); |
