stm32/spi: fix occasional data corruption
Need to clear the rx fifo before enabling rx dma.
This commit is contained in:
parent
dda5a4cc9d
commit
aabc275186
1 changed files with 4 additions and 2 deletions
|
@ -456,13 +456,14 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> {
|
|||
T::REGS.cr1().modify(|w| {
|
||||
w.set_spe(false);
|
||||
});
|
||||
set_rxdmaen(T::REGS, true);
|
||||
}
|
||||
|
||||
// SPIv3 clears rxfifo on SPE=0
|
||||
#[cfg(not(any(spi_v3, spi_v4)))]
|
||||
flush_rx_fifo(T::REGS);
|
||||
|
||||
set_rxdmaen(T::REGS, true);
|
||||
|
||||
let clock_byte_count = data.len();
|
||||
|
||||
let rx_request = self.rxdma.request();
|
||||
|
@ -510,13 +511,14 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> {
|
|||
T::REGS.cr1().modify(|w| {
|
||||
w.set_spe(false);
|
||||
});
|
||||
set_rxdmaen(T::REGS, true);
|
||||
}
|
||||
|
||||
// SPIv3 clears rxfifo on SPE=0
|
||||
#[cfg(not(any(spi_v3, spi_v4)))]
|
||||
flush_rx_fifo(T::REGS);
|
||||
|
||||
set_rxdmaen(T::REGS, true);
|
||||
|
||||
let rx_request = self.rxdma.request();
|
||||
let rx_src = T::REGS.rx_ptr();
|
||||
unsafe { self.rxdma.start_read(rx_request, rx_src, read, Default::default()) };
|
||||
|
|
Loading…
Reference in a new issue