diff options
| author | Grant Miller <[email protected]> | 2022-03-14 18:04:31 -0500 |
|---|---|---|
| committer | Grant Miller <[email protected]> | 2022-03-14 18:04:31 -0500 |
| commit | 15c533fe2a7fe2adad3aff186a3d57332eb014fb (patch) | |
| tree | 5ac7c9d453d49fc0a8185b6762ebfb6195420235 | |
| parent | 064170fce0494f51e91163aa4ec9e1009c7f6a62 (diff) | |
Fix async `write` bug
| -rw-r--r-- | embassy-stm32/src/spi/mod.rs | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs index 3b39f0fd2..1b2cdf19e 100644 --- a/embassy-stm32/src/spi/mod.rs +++ b/embassy-stm32/src/spi/mod.rs | |||
| @@ -418,10 +418,6 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 418 | }); | 418 | }); |
| 419 | } | 419 | } |
| 420 | 420 | ||
| 421 | // TODO: This is unnecessary in some versions because | ||
| 422 | // clearing SPE automatically clears the fifos | ||
| 423 | flush_rx_fifo(T::REGS); | ||
| 424 | |||
| 425 | let tx_request = self.txdma.request(); | 421 | let tx_request = self.txdma.request(); |
| 426 | let tx_dst = T::REGS.tx_ptr(); | 422 | let tx_dst = T::REGS.tx_ptr(); |
| 427 | unsafe { self.txdma.start_write(tx_request, data, tx_dst) } | 423 | unsafe { self.txdma.start_write(tx_request, data, tx_dst) } |
| @@ -440,6 +436,9 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 440 | 436 | ||
| 441 | tx_f.await; | 437 | tx_f.await; |
| 442 | 438 | ||
| 439 | // flush here otherwise `finish_dma` hangs waiting for the rx fifo to empty | ||
| 440 | flush_rx_fifo(T::REGS); | ||
| 441 | |||
| 443 | finish_dma(T::REGS); | 442 | finish_dma(T::REGS); |
| 444 | 443 | ||
| 445 | Ok(()) | 444 | Ok(()) |
