diff options
| author | Grant Miller <[email protected]> | 2022-03-14 21:55:37 -0500 |
|---|---|---|
| committer | Grant Miller <[email protected]> | 2022-03-14 21:55:37 -0500 |
| commit | 49ef19c0b284eeb6d97cec597bbb1f82d18397c5 (patch) | |
| tree | c3e89932932bd9623196f208f11ca3a866a2cbf8 | |
| parent | ff1215c6f9295d960c5111d30f27ca047605414d (diff) | |
stm32/spi: Clear rx fifo in blocking methods
| -rw-r--r-- | embassy-stm32/src/spi/mod.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs index d8ffabb11..a743a036c 100644 --- a/embassy-stm32/src/spi/mod.rs +++ b/embassy-stm32/src/spi/mod.rs | |||
| @@ -575,6 +575,7 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 575 | } | 575 | } |
| 576 | 576 | ||
| 577 | pub fn blocking_write<W: Word>(&mut self, words: &[W]) -> Result<(), Error> { | 577 | pub fn blocking_write<W: Word>(&mut self, words: &[W]) -> Result<(), Error> { |
| 578 | flush_rx_fifo(T::REGS); | ||
| 578 | self.set_word_size(W::WORDSIZE); | 579 | self.set_word_size(W::WORDSIZE); |
| 579 | for word in words.iter() { | 580 | for word in words.iter() { |
| 580 | let _ = transfer_word(T::REGS, *word)?; | 581 | let _ = transfer_word(T::REGS, *word)?; |
| @@ -583,6 +584,7 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 583 | } | 584 | } |
| 584 | 585 | ||
| 585 | pub fn blocking_read<W: Word>(&mut self, words: &mut [W]) -> Result<(), Error> { | 586 | pub fn blocking_read<W: Word>(&mut self, words: &mut [W]) -> Result<(), Error> { |
| 587 | flush_rx_fifo(T::REGS); | ||
| 586 | self.set_word_size(W::WORDSIZE); | 588 | self.set_word_size(W::WORDSIZE); |
| 587 | for word in words.iter_mut() { | 589 | for word in words.iter_mut() { |
| 588 | *word = transfer_word(T::REGS, W::default())?; | 590 | *word = transfer_word(T::REGS, W::default())?; |
| @@ -591,6 +593,7 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 591 | } | 593 | } |
| 592 | 594 | ||
| 593 | pub fn blocking_transfer_in_place<W: Word>(&mut self, words: &mut [W]) -> Result<(), Error> { | 595 | pub fn blocking_transfer_in_place<W: Word>(&mut self, words: &mut [W]) -> Result<(), Error> { |
| 596 | flush_rx_fifo(T::REGS); | ||
| 594 | self.set_word_size(W::WORDSIZE); | 597 | self.set_word_size(W::WORDSIZE); |
| 595 | for word in words.iter_mut() { | 598 | for word in words.iter_mut() { |
| 596 | *word = transfer_word(T::REGS, *word)?; | 599 | *word = transfer_word(T::REGS, *word)?; |
| @@ -599,6 +602,7 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 599 | } | 602 | } |
| 600 | 603 | ||
| 601 | pub fn blocking_transfer<W: Word>(&mut self, read: &mut [W], write: &[W]) -> Result<(), Error> { | 604 | pub fn blocking_transfer<W: Word>(&mut self, read: &mut [W], write: &[W]) -> Result<(), Error> { |
| 605 | flush_rx_fifo(T::REGS); | ||
| 602 | self.set_word_size(W::WORDSIZE); | 606 | self.set_word_size(W::WORDSIZE); |
| 603 | let len = read.len().max(write.len()); | 607 | let len = read.len().max(write.len()); |
| 604 | for i in 0..len { | 608 | for i in 0..len { |
| @@ -727,7 +731,6 @@ fn spin_until_rx_ready(regs: Regs) -> Result<(), Error> { | |||
| 727 | } | 731 | } |
| 728 | } | 732 | } |
| 729 | 733 | ||
| 730 | #[cfg(not(spi_v3))] | ||
| 731 | fn flush_rx_fifo(regs: Regs) { | 734 | fn flush_rx_fifo(regs: Regs) { |
| 732 | unsafe { | 735 | unsafe { |
| 733 | #[cfg(not(spi_v3))] | 736 | #[cfg(not(spi_v3))] |
