aboutsummaryrefslogtreecommitdiff
path: root/embassy-rp/src/dma.rs
diff options
context:
space:
mode:
authorMathias <[email protected]>2022-08-18 21:14:57 +0200
committerMathias <[email protected]>2022-08-18 21:20:47 +0200
commitdebff0980d6a4c5527ebdaea6f91f32b63477bc5 (patch)
tree88517f5001f2bbb05f472da2cd19064d3c8200be /embassy-rp/src/dma.rs
parent1d49b3444f2bd3e049f19a72da63804192ee0402 (diff)
Don't increment read address in DMA copy from peripherals
Diffstat (limited to 'embassy-rp/src/dma.rs')
-rw-r--r--embassy-rp/src/dma.rs12
1 files changed, 9 insertions, 3 deletions
diff --git a/embassy-rp/src/dma.rs b/embassy-rp/src/dma.rs
index cfaa6dd34..8cf8c394d 100644
--- a/embassy-rp/src/dma.rs
+++ b/embassy-rp/src/dma.rs
@@ -10,7 +10,11 @@ use pac::dma::vals::DataSize;
10use crate::pac::dma::vals; 10use crate::pac::dma::vals;
11use crate::{pac, peripherals}; 11use crate::{pac, peripherals};
12 12
13pub(crate) fn read<'a, C: Channel, W: Word>(ch: impl Peripheral<P = C> + 'a, from: *const W, to: *mut [W]) -> Transfer<'a, C> { 13pub(crate) fn read<'a, C: Channel, W: Word>(
14 ch: impl Peripheral<P = C> + 'a,
15 from: *const W,
16 to: *mut [W],
17) -> Transfer<'a, C> {
14 let (ptr, len) = crate::dma::slice_ptr_parts_mut(to); 18 let (ptr, len) = crate::dma::slice_ptr_parts_mut(to);
15 copy(ch, from as *const u32, ptr as *mut u32, len, W::size()) 19 copy(ch, from as *const u32, ptr as *mut u32, len, W::size())
16} 20}
@@ -44,7 +48,7 @@ fn copy<'a, C: Channel>(
44 48
45 p.ctrl_trig().write(|w| { 49 p.ctrl_trig().write(|w| {
46 w.set_data_size(data_size); 50 w.set_data_size(data_size);
47 w.set_incr_read(true); 51 w.set_incr_read(false);
48 w.set_incr_write(true); 52 w.set_incr_write(true);
49 w.set_chain_to(ch.number()); 53 w.set_chain_to(ch.number());
50 w.set_en(true); 54 w.set_en(true);
@@ -136,7 +140,9 @@ pub trait Channel: Peripheral<P = Self> + sealed::Channel + Into<AnyChannel> + S
136 STATE.channels[self.number() as usize].waker.register(waker); 140 STATE.channels[self.number() as usize].waker.register(waker);
137 } 141 }
138 142
139 fn on_irq() {} 143 fn on_irq() {
144 // FIXME:
145 }
140 146
141 fn degrade(self) -> AnyChannel { 147 fn degrade(self) -> AnyChannel {
142 AnyChannel { number: self.number() } 148 AnyChannel { number: self.number() }