aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cyw43-pio/src/lib.rs13
-rw-r--r--embassy-rp/src/pio/mod.rs10
-rw-r--r--embassy-rp/src/pio_programs/hd44780.rs4
-rw-r--r--embassy-rp/src/pio_programs/i2s.rs2
-rw-r--r--embassy-rp/src/pio_programs/ws2812.rs2
-rw-r--r--examples/rp/src/bin/pio_dma.rs4
-rw-r--r--examples/rp235x/src/bin/pio_dma.rs4
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() {