aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Pisani <[email protected]>2021-10-11 23:33:32 +0200
committerTobias Pisani <[email protected]>2021-10-11 23:33:32 +0200
commit43a7226d8b8e5a2dabae8afbaf9e81651b59ca6e (patch)
treeb04e9f1524c9750c9eeabd88216aab4e781dfbd2
parent2cbb8a7ece70f5d489b8527f80de708693d9f55b (diff)
inline FRE register check for SPI on F1
-rw-r--r--embassy-stm32/src/spi/v1.rs42
1 files changed, 19 insertions, 23 deletions
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<(
439 let sr = unsafe { regs.sr().read() }; 439 let sr = unsafe { regs.sr().read() };
440 if sr.ovr() { 440 if sr.ovr() {
441 return Err(Error::Overrun); 441 return Err(Error::Overrun);
442 } else if sr_fre(sr) { 442 }
443 #[cfg(not(spi_f1))]
444 if sr.fre() {
443 return Err(Error::Framing); 445 return Err(Error::Framing);
444 } else if sr.modf() { 446 }
447 if sr.modf() {
445 return Err(Error::ModeFault); 448 return Err(Error::ModeFault);
446 } else if sr.crcerr() { 449 }
450 if sr.crcerr() {
447 return Err(Error::Crc); 451 return Err(Error::Crc);
448 } else if sr.txe() { 452 }
453 if sr.txe() {
449 unsafe { 454 unsafe {
450 let dr = regs.dr().ptr() as *mut W; 455 let dr = regs.dr().ptr() as *mut W;
451 ptr::write_volatile(dr, word); 456 ptr::write_volatile(dr, word);
@@ -461,13 +466,18 @@ fn read_word<W: Word>(regs: &'static crate::pac::spi::Spi) -> Result<W, Error> {
461 let sr = unsafe { regs.sr().read() }; 466 let sr = unsafe { regs.sr().read() };
462 if sr.ovr() { 467 if sr.ovr() {
463 return Err(Error::Overrun); 468 return Err(Error::Overrun);
464 } else if sr.modf() { 469 }
465 return Err(Error::ModeFault); 470 #[cfg(not(spi_f1))]
466 } else if sr_fre(sr) { 471 if sr.fre() {
467 return Err(Error::Framing); 472 return Err(Error::Framing);
468 } else if sr.crcerr() { 473 }
474 if sr.modf() {
475 return Err(Error::ModeFault);
476 }
477 if sr.crcerr() {
469 return Err(Error::Crc); 478 return Err(Error::Crc);
470 } else if sr.rxne() { 479 }
480 if sr.rxne() {
471 unsafe { 481 unsafe {
472 let dr = regs.dr().ptr() as *const W; 482 let dr = regs.dr().ptr() as *const W;
473 return Ok(ptr::read_volatile(dr)); 483 return Ok(ptr::read_volatile(dr));
@@ -475,17 +485,3 @@ fn read_word<W: Word>(regs: &'static crate::pac::spi::Spi) -> Result<W, Error> {
475 } 485 }
476 } 486 }
477} 487}
478
479// SPI on F1 is just V1 without FRE and FRF fields
480// This driver only uses FRE, so add a simple function here to read fre on v1,
481// and return false on f1
482
483#[cfg(spi_v1)]
484fn sr_fre(sr: crate::pac::spi::regs::Sr) -> bool {
485 sr.fre()
486}
487
488#[cfg(spi_f1)]
489fn sr_fre(_sr: crate::pac::spi::regs::Sr) -> bool {
490 false
491}