aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/src/spi/mod.rs5
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))]
731fn flush_rx_fifo(regs: Regs) { 734fn flush_rx_fifo(regs: Regs) {
732 unsafe { 735 unsafe {
733 #[cfg(not(spi_v3))] 736 #[cfg(not(spi_v3))]