diff --git a/embassy-stm32/src/spi/v1.rs b/embassy-stm32/src/spi/v1.rs index d4fa888c9..b727f2008 100644 --- a/embassy-stm32/src/spi/v1.rs +++ b/embassy-stm32/src/spi/v1.rs @@ -439,13 +439,18 @@ fn write_word<W: Word>(regs: &'static crate::pac::spi::Spi, word: W) -> Result<( let sr = unsafe { regs.sr().read() }; if sr.ovr() { return Err(Error::Overrun); - } else if sr_fre(sr) { + } + #[cfg(not(spi_f1))] + if sr.fre() { return Err(Error::Framing); - } else if sr.modf() { + } + if sr.modf() { return Err(Error::ModeFault); - } else if sr.crcerr() { + } + if sr.crcerr() { return Err(Error::Crc); - } else if sr.txe() { + } + if sr.txe() { unsafe { let dr = regs.dr().ptr() as *mut W; ptr::write_volatile(dr, word); @@ -461,13 +466,18 @@ fn read_word<W: Word>(regs: &'static crate::pac::spi::Spi) -> Result<W, Error> { let sr = unsafe { regs.sr().read() }; if sr.ovr() { return Err(Error::Overrun); - } else if sr.modf() { - return Err(Error::ModeFault); - } else if sr_fre(sr) { + } + #[cfg(not(spi_f1))] + if sr.fre() { return Err(Error::Framing); - } else if sr.crcerr() { + } + if sr.modf() { + return Err(Error::ModeFault); + } + if sr.crcerr() { return Err(Error::Crc); - } else if sr.rxne() { + } + if sr.rxne() { unsafe { let dr = regs.dr().ptr() as *const W; return Ok(ptr::read_volatile(dr)); @@ -475,17 +485,3 @@ fn read_word<W: Word>(regs: &'static crate::pac::spi::Spi) -> Result<W, Error> { } } } - -// SPI on F1 is just V1 without FRE and FRF fields -// This driver only uses FRE, so add a simple function here to read fre on v1, -// and return false on f1 - -#[cfg(spi_v1)] -fn sr_fre(sr: crate::pac::spi::regs::Sr) -> bool { - sr.fre() -} - -#[cfg(spi_f1)] -fn sr_fre(_sr: crate::pac::spi::regs::Sr) -> bool { - false -}