aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorkbleeke <[email protected]>2023-03-27 17:24:45 +0200
committerkbleeke <[email protected]>2023-03-27 18:19:07 +0200
commit056df98d475c3be307b7c9c3038e02b4ef79fa08 (patch)
tree3f90f3c52ea2e61eb50c6dc206c2c72a767eb714 /examples
parent273e6f5b835afe9883a37814a76caba2084d6dc2 (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.rs14
-rw-r--r--examples/rpi-pico-w/src/pio.rs24
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
217impl cyw43::SpiBusCyw43 for MySpi { 217impl 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) {