aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2022-03-15 02:37:08 +0100
committerDario Nieuwenhuis <[email protected]>2022-03-15 02:37:08 +0100
commit059b16423458a80c5cb4e1630260d6c564a88e84 (patch)
treecf065e87589733f37d7c15c99d20b5e9132cd4c4
parent4579192832e09efaa657fea1fc975d0548499d2a (diff)
stm32/spi: do not clear rxfifo in SPIv3, the hw already does it.
-rw-r--r--embassy-stm32/src/spi/mod.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs
index 1806fb369..d8ffabb11 100644
--- a/embassy-stm32/src/spi/mod.rs
+++ b/embassy-stm32/src/spi/mod.rs
@@ -462,6 +462,10 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> {
462 set_rxdmaen(T::REGS, true); 462 set_rxdmaen(T::REGS, true);
463 } 463 }
464 464
465 // SPIv3 clears rxfifo on SPE=0
466 #[cfg(not(spi_v3))]
467 flush_rx_fifo(T::REGS);
468
465 let clock_byte_count = data.len(); 469 let clock_byte_count = data.len();
466 470
467 let rx_request = self.rxdma.request(); 471 let rx_request = self.rxdma.request();
@@ -522,8 +526,8 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> {
522 set_rxdmaen(T::REGS, true); 526 set_rxdmaen(T::REGS, true);
523 } 527 }
524 528
525 // TODO: This is unnecessary in some versions because 529 // SPIv3 clears rxfifo on SPE=0
526 // clearing SPE automatically clears the fifos 530 #[cfg(not(spi_v3))]
527 flush_rx_fifo(T::REGS); 531 flush_rx_fifo(T::REGS);
528 532
529 let rx_request = self.rxdma.request(); 533 let rx_request = self.rxdma.request();
@@ -723,6 +727,7 @@ fn spin_until_rx_ready(regs: Regs) -> Result<(), Error> {
723 } 727 }
724} 728}
725 729
730#[cfg(not(spi_v3))]
726fn flush_rx_fifo(regs: Regs) { 731fn flush_rx_fifo(regs: Regs) {
727 unsafe { 732 unsafe {
728 #[cfg(not(spi_v3))] 733 #[cfg(not(spi_v3))]