aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-rp/src/dma.rs16
1 files changed, 14 insertions, 2 deletions
diff --git a/embassy-rp/src/dma.rs b/embassy-rp/src/dma.rs
index 25e3ec8fc..6423d1938 100644
--- a/embassy-rp/src/dma.rs
+++ b/embassy-rp/src/dma.rs
@@ -14,8 +14,18 @@ use crate::{interrupt, pac, peripherals};
14#[interrupt] 14#[interrupt]
15unsafe fn DMA_IRQ_0() { 15unsafe fn DMA_IRQ_0() {
16 let ints0 = pac::DMA.ints0().read().ints0(); 16 let ints0 = pac::DMA.ints0().read().ints0();
17
18 for channel in 0..CHANNEL_COUNT { 17 for channel in 0..CHANNEL_COUNT {
18 let ctrl_trig = pac::DMA.ch(channel).ctrl_trig().read();
19 if ctrl_trig.ahb_error() {
20 panic!("DMA: ahb error on DMA_0 channel {}", channel);
21 }
22 if ctrl_trig.read_error() {
23 panic!("DMA: read error on DMA_0 channel {}", channel);
24 }
25 if ctrl_trig.write_error() {
26 panic!("DMA: write error on DMA_0 channel {}", channel);
27 }
28
19 if ints0 & (1 << channel) == (1 << channel) { 29 if ints0 & (1 << channel) == (1 << channel) {
20 CHANNEL_WAKERS[channel].wake(); 30 CHANNEL_WAKERS[channel].wake();
21 } 31 }
@@ -119,7 +129,9 @@ impl<'a, C: Channel> Drop for Transfer<'a, C> {
119 fn drop(&mut self) { 129 fn drop(&mut self) {
120 let p = self.channel.regs(); 130 let p = self.channel.regs();
121 unsafe { 131 unsafe {
122 p.ctrl_trig().write(|w| w.set_en(false)); 132 pac::DMA
133 .chan_abort()
134 .modify(|m| m.set_chan_abort(1 << self.channel.number()));
123 while p.ctrl_trig().read().busy() {} 135 while p.ctrl_trig().read().busy() {}
124 } 136 }
125 } 137 }