diff options
| author | kbleeke <[email protected]> | 2023-03-27 17:24:45 +0200 |
|---|---|---|
| committer | kbleeke <[email protected]> | 2023-03-27 18:19:07 +0200 |
| commit | 056df98d475c3be307b7c9c3038e02b4ef79fa08 (patch) | |
| tree | 3f90f3c52ea2e61eb50c6dc206c2c72a767eb714 /examples | |
| parent | 273e6f5b835afe9883a37814a76caba2084d6dc2 (diff) | |
use send status feature of cyw43 instead of manually checking status
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/rpi-pico-w/src/main.rs | 14 | ||||
| -rw-r--r-- | examples/rpi-pico-w/src/pio.rs | 24 |
2 files changed, 26 insertions, 12 deletions
diff --git a/examples/rpi-pico-w/src/main.rs b/examples/rpi-pico-w/src/main.rs index 434851378..e3c59223b 100644 --- a/examples/rpi-pico-w/src/main.rs +++ b/examples/rpi-pico-w/src/main.rs | |||
| @@ -215,16 +215,26 @@ impl MySpi { | |||
| 215 | } | 215 | } |
| 216 | 216 | ||
| 217 | impl cyw43::SpiBusCyw43 for MySpi { | 217 | impl cyw43::SpiBusCyw43 for MySpi { |
| 218 | async fn cmd_write(&mut self, write: &[u32]) { | 218 | async fn cmd_write(&mut self, write: &[u32]) -> u32 { |
| 219 | self.cs.set_low(); | 219 | self.cs.set_low(); |
| 220 | self.write(write).await; | 220 | self.write(write).await; |
| 221 | |||
| 222 | let mut status = 0; | ||
| 223 | self.read(slice::from_mut(&mut status)).await; | ||
| 224 | |||
| 221 | self.cs.set_high(); | 225 | self.cs.set_high(); |
| 226 | status | ||
| 222 | } | 227 | } |
| 223 | 228 | ||
| 224 | async fn cmd_read(&mut self, write: u32, read: &mut [u32]) { | 229 | async fn cmd_read(&mut self, write: u32, read: &mut [u32]) -> u32 { |
| 225 | self.cs.set_low(); | 230 | self.cs.set_low(); |
| 226 | self.write(slice::from_ref(&write)).await; | 231 | self.write(slice::from_ref(&write)).await; |
| 227 | self.read(read).await; | 232 | self.read(read).await; |
| 233 | |||
| 234 | let mut status = 0; | ||
| 235 | self.read(slice::from_mut(&mut status)).await; | ||
| 236 | |||
| 228 | self.cs.set_high(); | 237 | self.cs.set_high(); |
| 238 | status | ||
| 229 | } | 239 | } |
| 230 | } | 240 | } |
diff --git a/examples/rpi-pico-w/src/pio.rs b/examples/rpi-pico-w/src/pio.rs index 1cefb1734..846113060 100644 --- a/examples/rpi-pico-w/src/pio.rs +++ b/examples/rpi-pico-w/src/pio.rs | |||
| @@ -108,7 +108,7 @@ where | |||
| 108 | } | 108 | } |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | pub async fn write(&mut self, write: &[u32]) { | 111 | pub async fn write(&mut self, write: &[u32]) -> u32 { |
| 112 | self.sm.set_enable(false); | 112 | self.sm.set_enable(false); |
| 113 | let write_bits = write.len() * 32 - 1; | 113 | let write_bits = write.len() * 32 - 1; |
| 114 | let read_bits = 31; | 114 | let read_bits = 31; |
| @@ -125,15 +125,14 @@ where | |||
| 125 | 125 | ||
| 126 | self.sm.dma_push(dma.reborrow(), write).await; | 126 | self.sm.dma_push(dma.reborrow(), write).await; |
| 127 | 127 | ||
| 128 | let mut status = 0; | 128 | let status = self.sm.wait_pull().await; |
| 129 | self.sm.dma_pull(dma, slice::from_mut(&mut status)).await; | 129 | status |
| 130 | defmt::trace!("{:#08x}", status); | ||
| 131 | } | 130 | } |
| 132 | 131 | ||
| 133 | pub async fn cmd_read(&mut self, cmd: u32, read: &mut [u32]) { | 132 | pub async fn cmd_read(&mut self, cmd: u32, read: &mut [u32]) -> u32 { |
| 134 | self.sm.set_enable(false); | 133 | self.sm.set_enable(false); |
| 135 | let write_bits = 31; | 134 | let write_bits = 31; |
| 136 | let read_bits = read.len() * 32 - 1; | 135 | let read_bits = read.len() * 32 + 32 - 1; |
| 137 | 136 | ||
| 138 | defmt::trace!("write={} read={}", write_bits, read_bits); | 137 | defmt::trace!("write={} read={}", write_bits, read_bits); |
| 139 | 138 | ||
| @@ -147,6 +146,9 @@ where | |||
| 147 | 146 | ||
| 148 | self.sm.dma_push(dma.reborrow(), slice::from_ref(&cmd)).await; | 147 | self.sm.dma_push(dma.reborrow(), slice::from_ref(&cmd)).await; |
| 149 | self.sm.dma_pull(dma, read).await; | 148 | self.sm.dma_pull(dma, read).await; |
| 149 | |||
| 150 | let status = self.sm.wait_pull().await; | ||
| 151 | status | ||
| 150 | } | 152 | } |
| 151 | } | 153 | } |
| 152 | 154 | ||
| @@ -156,16 +158,18 @@ where | |||
| 156 | SM: PioStateMachine, | 158 | SM: PioStateMachine, |
| 157 | DMA: Channel, | 159 | DMA: Channel, |
| 158 | { | 160 | { |
| 159 | async fn cmd_write(&mut self, write: &[u32]) { | 161 | async fn cmd_write(&mut self, write: &[u32]) -> u32 { |
| 160 | self.cs.set_low(); | 162 | self.cs.set_low(); |
| 161 | self.write(write).await; | 163 | let status = self.write(write).await; |
| 162 | self.cs.set_high(); | 164 | self.cs.set_high(); |
| 165 | status | ||
| 163 | } | 166 | } |
| 164 | 167 | ||
| 165 | async fn cmd_read(&mut self, write: u32, read: &mut [u32]) { | 168 | async fn cmd_read(&mut self, write: u32, read: &mut [u32]) -> u32 { |
| 166 | self.cs.set_low(); | 169 | self.cs.set_low(); |
| 167 | self.cmd_read(write, read).await; | 170 | let status = self.cmd_read(write, read).await; |
| 168 | self.cs.set_high(); | 171 | self.cs.set_high(); |
| 172 | status | ||
| 169 | } | 173 | } |
| 170 | 174 | ||
| 171 | async fn wait_for_event(&mut self) { | 175 | async fn wait_for_event(&mut self) { |
