aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxoviat <[email protected]>2021-04-24 13:50:31 -0500
committerGitHub <[email protected]>2021-04-24 13:50:31 -0500
commit37eb7e95066abf3e51b20e65fbec4e28103ad33f (patch)
tree87fae147f2e79f0253b61c419a0cf2b9db49d3ad
parent578d920723ca7c2abf0c17c512114ed4e2eeaea4 (diff)
parent1fef2d08fbacb7b37cc7a47734bdd840f8a97e04 (diff)
Merge pull request #148 from xoviat/spi
stm32: use interrupt for spi transmit
-rw-r--r--embassy-stm32/src/f4/spi.rs20
1 files changed, 19 insertions, 1 deletions
diff --git a/embassy-stm32/src/f4/spi.rs b/embassy-stm32/src/f4/spi.rs
index 65bf7287a..990fc5e95 100644
--- a/embassy-stm32/src/f4/spi.rs
+++ b/embassy-stm32/src/f4/spi.rs
@@ -259,6 +259,9 @@ where
259 let tx_stream = self.tx_stream.take().unwrap(); 259 let tx_stream = self.tx_stream.take().unwrap();
260 let spi = self.spi.take().unwrap(); 260 let spi = self.spi.take().unwrap();
261 261
262 spi.cr2
263 .modify(|_, w| w.errie().set_bit().txeie().set_bit().rxneie().set_bit());
264
262 // let mut tx_transfer = Transfer::init( 265 // let mut tx_transfer = Transfer::init(
263 // tx_stream, 266 // tx_stream,
264 // spi, 267 // spi,
@@ -279,9 +282,24 @@ where
279 282
280 for i in 0..(static_buf.len() - 1) { 283 for i in 0..(static_buf.len() - 1) {
281 let byte = static_buf[i]; 284 let byte = static_buf[i];
282 nb::block!(write_sr(&spi, byte)); 285 loop {
286 let fut = InterruptFuture::new(&mut self.spi_int);
287 match write_sr(&spi, byte) {
288 Ok(()) => break,
289 _ => {}
290 }
291 fut.await;
292 }
283 } 293 }
284 294
295 spi.cr2.modify(|_, w| {
296 w.errie()
297 .clear_bit()
298 .txeie()
299 .clear_bit()
300 .rxneie()
301 .clear_bit()
302 });
285 self.tx_stream.replace(tx_stream); 303 self.tx_stream.replace(tx_stream);
286 self.spi.replace(spi); 304 self.spi.replace(spi);
287 305