diff options
| author | Mathias <[email protected]> | 2022-08-18 21:14:57 +0200 |
|---|---|---|
| committer | Mathias <[email protected]> | 2022-08-18 21:20:47 +0200 |
| commit | debff0980d6a4c5527ebdaea6f91f32b63477bc5 (patch) | |
| tree | 88517f5001f2bbb05f472da2cd19064d3c8200be /embassy-rp/src/dma.rs | |
| parent | 1d49b3444f2bd3e049f19a72da63804192ee0402 (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.rs | 12 |
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; | |||
| 10 | use crate::pac::dma::vals; | 10 | use crate::pac::dma::vals; |
| 11 | use crate::{pac, peripherals}; | 11 | use crate::{pac, peripherals}; |
| 12 | 12 | ||
| 13 | pub(crate) fn read<'a, C: Channel, W: Word>(ch: impl Peripheral<P = C> + 'a, from: *const W, to: *mut [W]) -> Transfer<'a, C> { | 13 | pub(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() } |
