aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias <[email protected]>2022-08-18 20:30:24 +0200
committerMathias <[email protected]>2022-08-18 20:30:24 +0200
commit3bbfc11f45149c5624e2ff6370f8e71b956402af (patch)
tree54613cda53df9e002a6a5cd649609f87e80a27c1
parentd35a1c9790e32477aac2fd6abe38a8c76263fcc8 (diff)
Stop active DMA transfer on drop
-rw-r--r--embassy-rp/src/dma.rs16
1 files changed, 7 insertions, 9 deletions
diff --git a/embassy-rp/src/dma.rs b/embassy-rp/src/dma.rs
index dfa047a2f..bf15e1f4e 100644
--- a/embassy-rp/src/dma.rs
+++ b/embassy-rp/src/dma.rs
@@ -30,9 +30,6 @@ pub fn copy<'a, C: Channel, W: Word>(ch: impl Peripheral<P = C> + 'a, from: &[W]
30 w.set_en(true); 30 w.set_en(true);
31 }); 31 });
32 32
33 // FIXME:
34 while p.ctrl_trig().read().busy() {}
35
36 compiler_fence(Ordering::SeqCst); 33 compiler_fence(Ordering::SeqCst);
37 } 34 }
38 Transfer::new(ch) 35 Transfer::new(ch)
@@ -51,8 +48,11 @@ impl<'a, C: Channel> Transfer<'a, C> {
51 48
52impl<'a, C: Channel> Drop for Transfer<'a, C> { 49impl<'a, C: Channel> Drop for Transfer<'a, C> {
53 fn drop(&mut self) { 50 fn drop(&mut self) {
54 // self.channel.request_stop(); 51 let p = self.channel.regs();
55 // while self.channel.is_running() {} 52 unsafe {
53 p.ctrl_trig().write(|w| w.set_en(false));
54 while p.ctrl_trig().read().busy() {}
55 }
56 } 56 }
57} 57}
58 58
@@ -64,7 +64,7 @@ impl<'a, C: Channel> Future for Transfer<'a, C> {
64 // if self.channel.is_running() { 64 // if self.channel.is_running() {
65 // Poll::Pending 65 // Poll::Pending
66 // } else { 66 // } else {
67 Poll::Ready(()) 67 Poll::Ready(())
68 // } 68 // }
69 } 69 }
70} 70}
@@ -87,9 +87,7 @@ pub trait Channel: Peripheral<P = Self> + sealed::Channel + Into<AnyChannel> + S
87 } 87 }
88 88
89 fn degrade(self) -> AnyChannel { 89 fn degrade(self) -> AnyChannel {
90 AnyChannel { 90 AnyChannel { number: self.number() }
91 number: self.number(),
92 }
93 } 91 }
94} 92}
95 93