aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Pisani <[email protected]>2021-10-06 21:02:15 +0200
committerTobias Pisani <[email protected]>2021-10-11 22:39:48 +0200
commitf9a576d13d736ccbcf17960228ac0df8d82d0928 (patch)
tree1c0fd53ef7e9e0193486d23c1accd38c9a6f855d
parenta7c37d2ff49de0cb002b27c2cf536d8371748485 (diff)
feat: Add spi support for STM32F1 variants
-rw-r--r--embassy-stm32/src/spi/mod.rs1
-rw-r--r--embassy-stm32/src/spi/v1.rs18
m---------stm32-data0
3 files changed, 17 insertions, 2 deletions
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs
index 6249de84e..808854f00 100644
--- a/embassy-stm32/src/spi/mod.rs
+++ b/embassy-stm32/src/spi/mod.rs
@@ -1,6 +1,7 @@
1#![macro_use] 1#![macro_use]
2 2
3#[cfg_attr(spi_v1, path = "v1.rs")] 3#[cfg_attr(spi_v1, path = "v1.rs")]
4#[cfg_attr(spi_f1, path = "v1.rs")]
4#[cfg_attr(spi_v2, path = "v2.rs")] 5#[cfg_attr(spi_v2, path = "v2.rs")]
5#[cfg_attr(spi_v3, path = "v3.rs")] 6#[cfg_attr(spi_v3, path = "v3.rs")]
6mod _version; 7mod _version;
diff --git a/embassy-stm32/src/spi/v1.rs b/embassy-stm32/src/spi/v1.rs
index 53d8252e6..982f1cc4b 100644
--- a/embassy-stm32/src/spi/v1.rs
+++ b/embassy-stm32/src/spi/v1.rs
@@ -414,7 +414,7 @@ fn write_word<W: Word>(regs: &'static crate::pac::spi::Spi, word: W) -> Result<(
414 let sr = unsafe { regs.sr().read() }; 414 let sr = unsafe { regs.sr().read() };
415 if sr.ovr() { 415 if sr.ovr() {
416 return Err(Error::Overrun); 416 return Err(Error::Overrun);
417 } else if sr.fre() { 417 } else if sr_fre(sr) {
418 return Err(Error::Framing); 418 return Err(Error::Framing);
419 } else if sr.modf() { 419 } else if sr.modf() {
420 return Err(Error::ModeFault); 420 return Err(Error::ModeFault);
@@ -438,7 +438,7 @@ fn read_word<W: Word>(regs: &'static crate::pac::spi::Spi) -> Result<W, Error> {
438 return Err(Error::Overrun); 438 return Err(Error::Overrun);
439 } else if sr.modf() { 439 } else if sr.modf() {
440 return Err(Error::ModeFault); 440 return Err(Error::ModeFault);
441 } else if sr.fre() { 441 } else if sr_fre(sr) {
442 return Err(Error::Framing); 442 return Err(Error::Framing);
443 } else if sr.crcerr() { 443 } else if sr.crcerr() {
444 return Err(Error::Crc); 444 return Err(Error::Crc);
@@ -450,3 +450,17 @@ fn read_word<W: Word>(regs: &'static crate::pac::spi::Spi) -> Result<W, Error> {
450 } 450 }
451 } 451 }
452} 452}
453
454// SPI on F1 is just V1 without FRE and FRF fields
455// This driver only uses FRE, so add a simple function here to read fre on v1,
456// and return false on f1
457
458#[cfg(spi_v1)]
459fn sr_fre(sr: crate::pac::spi::regs::Sr) -> bool {
460 sr.fre()
461}
462
463#[cfg(spi_f1)]
464fn sr_fre(_sr: crate::pac::spi::regs::Sr) -> bool {
465 false
466}
diff --git a/stm32-data b/stm32-data
Subproject e78ea6f05058dc1eff1dd4a4f07227d502a3b65 Subproject bae2d34445f87e7b9a88b683c789c5d0c7560fb