diff options
| -rw-r--r-- | cyw43-pio/src/lib.rs | 13 | ||||
| -rw-r--r-- | embassy-rp/src/pio/mod.rs | 10 | ||||
| -rw-r--r-- | embassy-rp/src/pio_programs/hd44780.rs | 4 | ||||
| -rw-r--r-- | embassy-rp/src/pio_programs/i2s.rs | 2 | ||||
| -rw-r--r-- | embassy-rp/src/pio_programs/ws2812.rs | 2 | ||||
| -rw-r--r-- | examples/rp/src/bin/pio_dma.rs | 4 | ||||
| -rw-r--r-- | examples/rp235x/src/bin/pio_dma.rs | 4 |
7 files changed, 25 insertions, 14 deletions
diff --git a/cyw43-pio/src/lib.rs b/cyw43-pio/src/lib.rs index d0d504395..c1b301547 100644 --- a/cyw43-pio/src/lib.rs +++ b/cyw43-pio/src/lib.rs | |||
| @@ -169,12 +169,12 @@ where | |||
| 169 | 169 | ||
| 170 | self.sm.set_enable(true); | 170 | self.sm.set_enable(true); |
| 171 | 171 | ||
| 172 | self.sm.tx().dma_push(self.dma.reborrow(), write).await; | 172 | self.sm.tx().dma_push(self.dma.reborrow(), write, false).await; |
| 173 | 173 | ||
| 174 | let mut status = 0; | 174 | let mut status = 0; |
| 175 | self.sm | 175 | self.sm |
| 176 | .rx() | 176 | .rx() |
| 177 | .dma_pull(self.dma.reborrow(), slice::from_mut(&mut status)) | 177 | .dma_pull(self.dma.reborrow(), slice::from_mut(&mut status), false) |
| 178 | .await; | 178 | .await; |
| 179 | status | 179 | status |
| 180 | } | 180 | } |
| @@ -201,13 +201,16 @@ where | |||
| 201 | // self.cs.set_low(); | 201 | // self.cs.set_low(); |
| 202 | self.sm.set_enable(true); | 202 | self.sm.set_enable(true); |
| 203 | 203 | ||
| 204 | self.sm.tx().dma_push(self.dma.reborrow(), slice::from_ref(&cmd)).await; | 204 | self.sm |
| 205 | self.sm.rx().dma_pull(self.dma.reborrow(), read).await; | 205 | .tx() |
| 206 | .dma_push(self.dma.reborrow(), slice::from_ref(&cmd), false) | ||
| 207 | .await; | ||
| 208 | self.sm.rx().dma_pull(self.dma.reborrow(), read, false).await; | ||
| 206 | 209 | ||
| 207 | let mut status = 0; | 210 | let mut status = 0; |
| 208 | self.sm | 211 | self.sm |
| 209 | .rx() | 212 | .rx() |
| 210 | .dma_pull(self.dma.reborrow(), slice::from_mut(&mut status)) | 213 | .dma_pull(self.dma.reborrow(), slice::from_mut(&mut status), false) |
| 211 | .await; | 214 | .await; |
| 212 | 215 | ||
| 213 | #[cfg(feature = "defmt")] | 216 | #[cfg(feature = "defmt")] |
diff --git a/embassy-rp/src/pio/mod.rs b/embassy-rp/src/pio/mod.rs index 880d6effd..fd09d4bba 100644 --- a/embassy-rp/src/pio/mod.rs +++ b/embassy-rp/src/pio/mod.rs | |||
| @@ -362,6 +362,7 @@ impl<'d, PIO: Instance, const SM: usize> StateMachineRx<'d, PIO, SM> { | |||
| 362 | &'a mut self, | 362 | &'a mut self, |
| 363 | ch: PeripheralRef<'a, C>, | 363 | ch: PeripheralRef<'a, C>, |
| 364 | data: &'a mut [W], | 364 | data: &'a mut [W], |
| 365 | bswap: bool, | ||
| 365 | ) -> Transfer<'a, C> { | 366 | ) -> Transfer<'a, C> { |
| 366 | let pio_no = PIO::PIO_NO; | 367 | let pio_no = PIO::PIO_NO; |
| 367 | let p = ch.regs(); | 368 | let p = ch.regs(); |
| @@ -379,6 +380,7 @@ impl<'d, PIO: Instance, const SM: usize> StateMachineRx<'d, PIO, SM> { | |||
| 379 | w.set_chain_to(ch.number()); | 380 | w.set_chain_to(ch.number()); |
| 380 | w.set_incr_read(false); | 381 | w.set_incr_read(false); |
| 381 | w.set_incr_write(true); | 382 | w.set_incr_write(true); |
| 383 | w.set_bswap(bswap); | ||
| 382 | w.set_en(true); | 384 | w.set_en(true); |
| 383 | }); | 385 | }); |
| 384 | compiler_fence(Ordering::SeqCst); | 386 | compiler_fence(Ordering::SeqCst); |
| @@ -447,7 +449,12 @@ impl<'d, PIO: Instance, const SM: usize> StateMachineTx<'d, PIO, SM> { | |||
| 447 | } | 449 | } |
| 448 | 450 | ||
| 449 | /// Prepare a DMA transfer to TX FIFO. | 451 | /// Prepare a DMA transfer to TX FIFO. |
| 450 | pub fn dma_push<'a, C: Channel, W: Word>(&'a mut self, ch: PeripheralRef<'a, C>, data: &'a [W]) -> Transfer<'a, C> { | 452 | pub fn dma_push<'a, C: Channel, W: Word>( |
| 453 | &'a mut self, | ||
| 454 | ch: PeripheralRef<'a, C>, | ||
| 455 | data: &'a [W], | ||
| 456 | bswap: bool, | ||
| 457 | ) -> Transfer<'a, C> { | ||
| 451 | let pio_no = PIO::PIO_NO; | 458 | let pio_no = PIO::PIO_NO; |
| 452 | let p = ch.regs(); | 459 | let p = ch.regs(); |
| 453 | p.read_addr().write_value(data.as_ptr() as u32); | 460 | p.read_addr().write_value(data.as_ptr() as u32); |
| @@ -464,6 +471,7 @@ impl<'d, PIO: Instance, const SM: usize> StateMachineTx<'d, PIO, SM> { | |||
| 464 | w.set_chain_to(ch.number()); | 471 | w.set_chain_to(ch.number()); |
| 465 | w.set_incr_read(true); | 472 | w.set_incr_read(true); |
| 466 | w.set_incr_write(false); | 473 | w.set_incr_write(false); |
| 474 | w.set_bswap(bswap); | ||
| 467 | w.set_en(true); | 475 | w.set_en(true); |
| 468 | }); | 476 | }); |
| 469 | compiler_fence(Ordering::SeqCst); | 477 | compiler_fence(Ordering::SeqCst); |
diff --git a/embassy-rp/src/pio_programs/hd44780.rs b/embassy-rp/src/pio_programs/hd44780.rs index 70129318b..6997b91f3 100644 --- a/embassy-rp/src/pio_programs/hd44780.rs +++ b/embassy-rp/src/pio_programs/hd44780.rs | |||
| @@ -173,7 +173,7 @@ impl<'l, P: Instance, const S: usize> PioHD44780<'l, P, S> { | |||
| 173 | sm.set_enable(true); | 173 | sm.set_enable(true); |
| 174 | 174 | ||
| 175 | // display on and cursor on and blinking, reset display | 175 | // display on and cursor on and blinking, reset display |
| 176 | sm.tx().dma_push(dma.reborrow(), &[0x81u8, 0x0f, 1]).await; | 176 | sm.tx().dma_push(dma.reborrow(), &[0x81u8, 0x0f, 1], false).await; |
| 177 | 177 | ||
| 178 | Self { | 178 | Self { |
| 179 | dma: dma.map_into(), | 179 | dma: dma.map_into(), |
| @@ -198,6 +198,6 @@ impl<'l, P: Instance, const S: usize> PioHD44780<'l, P, S> { | |||
| 198 | // set cursor to 1:15 | 198 | // set cursor to 1:15 |
| 199 | self.buf[38..].copy_from_slice(&[0x80, 0xcf]); | 199 | self.buf[38..].copy_from_slice(&[0x80, 0xcf]); |
| 200 | 200 | ||
| 201 | self.sm.tx().dma_push(self.dma.reborrow(), &self.buf).await; | 201 | self.sm.tx().dma_push(self.dma.reborrow(), &self.buf, false).await; |
| 202 | } | 202 | } |
| 203 | } | 203 | } |
diff --git a/embassy-rp/src/pio_programs/i2s.rs b/embassy-rp/src/pio_programs/i2s.rs index a7b4f46a6..17e321405 100644 --- a/embassy-rp/src/pio_programs/i2s.rs +++ b/embassy-rp/src/pio_programs/i2s.rs | |||
| @@ -90,6 +90,6 @@ impl<'a, P: Instance, const S: usize> PioI2sOut<'a, P, S> { | |||
| 90 | 90 | ||
| 91 | /// Return an in-prograss dma transfer future. Awaiting it will guarentee a complete transfer. | 91 | /// Return an in-prograss dma transfer future. Awaiting it will guarentee a complete transfer. |
| 92 | pub fn write<'b>(&'b mut self, buff: &'b [u32]) -> Transfer<'b, AnyChannel> { | 92 | pub fn write<'b>(&'b mut self, buff: &'b [u32]) -> Transfer<'b, AnyChannel> { |
| 93 | self.sm.tx().dma_push(self.dma.reborrow(), buff) | 93 | self.sm.tx().dma_push(self.dma.reborrow(), buff, false) |
| 94 | } | 94 | } |
| 95 | } | 95 | } |
diff --git a/embassy-rp/src/pio_programs/ws2812.rs b/embassy-rp/src/pio_programs/ws2812.rs index 875f0209f..2462a64e6 100644 --- a/embassy-rp/src/pio_programs/ws2812.rs +++ b/embassy-rp/src/pio_programs/ws2812.rs | |||
| @@ -111,7 +111,7 @@ impl<'d, P: Instance, const S: usize, const N: usize> PioWs2812<'d, P, S, N> { | |||
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | // DMA transfer | 113 | // DMA transfer |
| 114 | self.sm.tx().dma_push(self.dma.reborrow(), &words).await; | 114 | self.sm.tx().dma_push(self.dma.reborrow(), &words, false).await; |
| 115 | 115 | ||
| 116 | Timer::after_micros(55).await; | 116 | Timer::after_micros(55).await; |
| 117 | } | 117 | } |
diff --git a/examples/rp/src/bin/pio_dma.rs b/examples/rp/src/bin/pio_dma.rs index d00ed2142..da6e47a1b 100644 --- a/examples/rp/src/bin/pio_dma.rs +++ b/examples/rp/src/bin/pio_dma.rs | |||
| @@ -72,8 +72,8 @@ async fn main(_spawner: Spawner) { | |||
| 72 | loop { | 72 | loop { |
| 73 | let (rx, tx) = sm.rx_tx(); | 73 | let (rx, tx) = sm.rx_tx(); |
| 74 | join( | 74 | join( |
| 75 | tx.dma_push(dma_out_ref.reborrow(), &dout), | 75 | tx.dma_push(dma_out_ref.reborrow(), &dout, false), |
| 76 | rx.dma_pull(dma_in_ref.reborrow(), &mut din), | 76 | rx.dma_pull(dma_in_ref.reborrow(), &mut din, false), |
| 77 | ) | 77 | ) |
| 78 | .await; | 78 | .await; |
| 79 | for i in 0..din.len() { | 79 | for i in 0..din.len() { |
diff --git a/examples/rp235x/src/bin/pio_dma.rs b/examples/rp235x/src/bin/pio_dma.rs index d00ed2142..da6e47a1b 100644 --- a/examples/rp235x/src/bin/pio_dma.rs +++ b/examples/rp235x/src/bin/pio_dma.rs | |||
| @@ -72,8 +72,8 @@ async fn main(_spawner: Spawner) { | |||
| 72 | loop { | 72 | loop { |
| 73 | let (rx, tx) = sm.rx_tx(); | 73 | let (rx, tx) = sm.rx_tx(); |
| 74 | join( | 74 | join( |
| 75 | tx.dma_push(dma_out_ref.reborrow(), &dout), | 75 | tx.dma_push(dma_out_ref.reborrow(), &dout, false), |
| 76 | rx.dma_pull(dma_in_ref.reborrow(), &mut din), | 76 | rx.dma_pull(dma_in_ref.reborrow(), &mut din, false), |
| 77 | ) | 77 | ) |
| 78 | .await; | 78 | .await; |
| 79 | for i in 0..din.len() { | 79 | for i in 0..din.len() { |
