502: Ensure SPI DMA write is completed r=lulf a=lulf

Fix a bug where DMA writes were not fully completed and only a single
byte out of two were written.

Co-authored-by: Ulf Lilleengen <lulf@redhat.com>
This commit is contained in:
bors[bot] 2021-11-24 20:02:49 +00:00 committed by GitHub
commit 539c007b44
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,7 +17,7 @@ use embassy::util::Unborrow;
use embassy_hal_common::unborrow; use embassy_hal_common::unborrow;
use embassy_traits::spi as traits; use embassy_traits::spi as traits;
pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3};
use futures::future::join3; use futures::future::{join, join3};
impl WordSize { impl WordSize {
fn ds(&self) -> spi::vals::Ds { fn ds(&self) -> spi::vals::Ds {
@ -186,7 +186,16 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> {
}); });
} }
f.await; join(f, Self::wait_for_idle()).await;
unsafe {
T::regs().cr2().modify(|reg| {
reg.set_txdmaen(false);
});
T::regs().cr1().modify(|w| {
w.set_spe(false);
});
}
Ok(()) Ok(())
} }