diff options
| -rw-r--r-- | embassy-stm32/src/spi/mod.rs | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/spi/v1.rs | 15 | ||||
| -rw-r--r-- | embassy-stm32/src/spi/v2.rs | 15 | ||||
| -rw-r--r-- | embassy-stm32/src/spi/v3.rs | 15 |
4 files changed, 23 insertions, 26 deletions
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs index 730169ec0..9b04c03aa 100644 --- a/embassy-stm32/src/spi/mod.rs +++ b/embassy-stm32/src/spi/mod.rs | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | #[cfg_attr(spi_v2, path = "v2.rs")] | 4 | #[cfg_attr(spi_v2, path = "v2.rs")] |
| 5 | #[cfg_attr(spi_v3, path = "v3.rs")] | 5 | #[cfg_attr(spi_v3, path = "v3.rs")] |
| 6 | mod _version; | 6 | mod _version; |
| 7 | use crate::peripherals; | 7 | use crate::{peripherals, rcc::RccPeripheral}; |
| 8 | pub use _version::*; | 8 | pub use _version::*; |
| 9 | 9 | ||
| 10 | use crate::gpio::Pin; | 10 | use crate::gpio::Pin; |
| @@ -64,7 +64,7 @@ pub(crate) mod sealed { | |||
| 64 | } | 64 | } |
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | pub trait Instance: sealed::Instance + 'static {} | 67 | pub trait Instance: sealed::Instance + RccPeripheral + 'static {} |
| 68 | 68 | ||
| 69 | pub trait SckPin<T: Instance>: sealed::SckPin<T> + 'static {} | 69 | pub trait SckPin<T: Instance>: sealed::SckPin<T> + 'static {} |
| 70 | 70 | ||
diff --git a/embassy-stm32/src/spi/v1.rs b/embassy-stm32/src/spi/v1.rs index a4e4c0ba1..227a36a89 100644 --- a/embassy-stm32/src/spi/v1.rs +++ b/embassy-stm32/src/spi/v1.rs | |||
| @@ -2,7 +2,6 @@ | |||
| 2 | 2 | ||
| 3 | use crate::gpio::{sealed::Pin, AnyPin}; | 3 | use crate::gpio::{sealed::Pin, AnyPin}; |
| 4 | use crate::pac::spi; | 4 | use crate::pac::spi; |
| 5 | use crate::rcc::RccPeripheral; | ||
| 6 | use crate::spi::{ByteOrder, Config, Error, Instance, MisoPin, MosiPin, SckPin, WordSize}; | 5 | use crate::spi::{ByteOrder, Config, Error, Instance, MisoPin, MosiPin, SckPin, WordSize}; |
| 7 | use crate::time::Hertz; | 6 | use crate::time::Hertz; |
| 8 | use core::marker::PhantomData; | 7 | use core::marker::PhantomData; |
| @@ -20,7 +19,7 @@ impl WordSize { | |||
| 20 | } | 19 | } |
| 21 | } | 20 | } |
| 22 | 21 | ||
| 23 | pub struct Spi<'d, T: Instance + RccPeripheral> { | 22 | pub struct Spi<'d, T: Instance> { |
| 24 | sck: AnyPin, | 23 | sck: AnyPin, |
| 25 | mosi: AnyPin, | 24 | mosi: AnyPin, |
| 26 | miso: AnyPin, | 25 | miso: AnyPin, |
| @@ -28,7 +27,7 @@ pub struct Spi<'d, T: Instance + RccPeripheral> { | |||
| 28 | phantom: PhantomData<&'d mut T>, | 27 | phantom: PhantomData<&'d mut T>, |
| 29 | } | 28 | } |
| 30 | 29 | ||
| 31 | impl<'d, T: Instance + RccPeripheral> Spi<'d, T> { | 30 | impl<'d, T: Instance> Spi<'d, T> { |
| 32 | pub fn new<F>( | 31 | pub fn new<F>( |
| 33 | pclk: Hertz, | 32 | pclk: Hertz, |
| 34 | _peri: impl Unborrow<Target = T> + 'd, | 33 | _peri: impl Unborrow<Target = T> + 'd, |
| @@ -131,7 +130,7 @@ impl<'d, T: Instance + RccPeripheral> Spi<'d, T> { | |||
| 131 | } | 130 | } |
| 132 | } | 131 | } |
| 133 | 132 | ||
| 134 | impl<'d, T: Instance + RccPeripheral> Drop for Spi<'d, T> { | 133 | impl<'d, T: Instance> Drop for Spi<'d, T> { |
| 135 | fn drop(&mut self) { | 134 | fn drop(&mut self) { |
| 136 | unsafe { | 135 | unsafe { |
| 137 | self.sck.set_as_analog(); | 136 | self.sck.set_as_analog(); |
| @@ -141,7 +140,7 @@ impl<'d, T: Instance + RccPeripheral> Drop for Spi<'d, T> { | |||
| 141 | } | 140 | } |
| 142 | } | 141 | } |
| 143 | 142 | ||
| 144 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u8> for Spi<'d, T> { | 143 | impl<'d, T: Instance> embedded_hal::blocking::spi::Write<u8> for Spi<'d, T> { |
| 145 | type Error = Error; | 144 | type Error = Error; |
| 146 | 145 | ||
| 147 | fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { | 146 | fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { |
| @@ -177,7 +176,7 @@ impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u8> for | |||
| 177 | } | 176 | } |
| 178 | } | 177 | } |
| 179 | 178 | ||
| 180 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Transfer<u8> for Spi<'d, T> { | 179 | impl<'d, T: Instance> embedded_hal::blocking::spi::Transfer<u8> for Spi<'d, T> { |
| 181 | type Error = Error; | 180 | type Error = Error; |
| 182 | 181 | ||
| 183 | fn transfer<'w>(&mut self, words: &'w mut [u8]) -> Result<&'w [u8], Self::Error> { | 182 | fn transfer<'w>(&mut self, words: &'w mut [u8]) -> Result<&'w [u8], Self::Error> { |
| @@ -218,7 +217,7 @@ impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Transfer<u8> | |||
| 218 | } | 217 | } |
| 219 | } | 218 | } |
| 220 | 219 | ||
| 221 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u16> for Spi<'d, T> { | 220 | impl<'d, T: Instance> embedded_hal::blocking::spi::Write<u16> for Spi<'d, T> { |
| 222 | type Error = Error; | 221 | type Error = Error; |
| 223 | 222 | ||
| 224 | fn write(&mut self, words: &[u16]) -> Result<(), Self::Error> { | 223 | fn write(&mut self, words: &[u16]) -> Result<(), Self::Error> { |
| @@ -254,7 +253,7 @@ impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u16> fo | |||
| 254 | } | 253 | } |
| 255 | } | 254 | } |
| 256 | 255 | ||
| 257 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Transfer<u16> for Spi<'d, T> { | 256 | impl<'d, T: Instance> embedded_hal::blocking::spi::Transfer<u16> for Spi<'d, T> { |
| 258 | type Error = Error; | 257 | type Error = Error; |
| 259 | 258 | ||
| 260 | fn transfer<'w>(&mut self, words: &'w mut [u16]) -> Result<&'w [u16], Self::Error> { | 259 | fn transfer<'w>(&mut self, words: &'w mut [u16]) -> Result<&'w [u16], Self::Error> { |
diff --git a/embassy-stm32/src/spi/v2.rs b/embassy-stm32/src/spi/v2.rs index 8f91ca5a7..a7ac54cdd 100644 --- a/embassy-stm32/src/spi/v2.rs +++ b/embassy-stm32/src/spi/v2.rs | |||
| @@ -4,7 +4,6 @@ use crate::gpio::{AnyPin, Pin}; | |||
| 4 | use crate::pac::gpio::vals::{Afr, Moder}; | 4 | use crate::pac::gpio::vals::{Afr, Moder}; |
| 5 | use crate::pac::gpio::Gpio; | 5 | use crate::pac::gpio::Gpio; |
| 6 | use crate::pac::spi; | 6 | use crate::pac::spi; |
| 7 | use crate::rcc::RccPeripheral; | ||
| 8 | use crate::spi::{ByteOrder, Config, Error, Instance, MisoPin, MosiPin, SckPin, WordSize}; | 7 | use crate::spi::{ByteOrder, Config, Error, Instance, MisoPin, MosiPin, SckPin, WordSize}; |
| 9 | use crate::time::Hertz; | 8 | use crate::time::Hertz; |
| 10 | use core::marker::PhantomData; | 9 | use core::marker::PhantomData; |
| @@ -29,14 +28,14 @@ impl WordSize { | |||
| 29 | } | 28 | } |
| 30 | } | 29 | } |
| 31 | 30 | ||
| 32 | pub struct Spi<'d, T: Instance + RccPeripheral> { | 31 | pub struct Spi<'d, T: Instance> { |
| 33 | sck: AnyPin, | 32 | sck: AnyPin, |
| 34 | mosi: AnyPin, | 33 | mosi: AnyPin, |
| 35 | miso: AnyPin, | 34 | miso: AnyPin, |
| 36 | phantom: PhantomData<&'d mut T>, | 35 | phantom: PhantomData<&'d mut T>, |
| 37 | } | 36 | } |
| 38 | 37 | ||
| 39 | impl<'d, T: Instance + RccPeripheral> Spi<'d, T> { | 38 | impl<'d, T: Instance> Spi<'d, T> { |
| 40 | pub fn new<F>( | 39 | pub fn new<F>( |
| 41 | pclk: Hertz, | 40 | pclk: Hertz, |
| 42 | _peri: impl Unborrow<Target = T> + 'd, | 41 | _peri: impl Unborrow<Target = T> + 'd, |
| @@ -143,7 +142,7 @@ impl<'d, T: Instance + RccPeripheral> Spi<'d, T> { | |||
| 143 | } | 142 | } |
| 144 | } | 143 | } |
| 145 | 144 | ||
| 146 | impl<'d, T: Instance + RccPeripheral> Drop for Spi<'d, T> { | 145 | impl<'d, T: Instance> Drop for Spi<'d, T> { |
| 147 | fn drop(&mut self) { | 146 | fn drop(&mut self) { |
| 148 | unsafe { | 147 | unsafe { |
| 149 | Self::unconfigure_pin(self.sck.block(), self.sck.pin() as _); | 148 | Self::unconfigure_pin(self.sck.block(), self.sck.pin() as _); |
| @@ -201,7 +200,7 @@ fn read_word<W: Word>(regs: &'static crate::pac::spi::Spi) -> Result<W, Error> { | |||
| 201 | } | 200 | } |
| 202 | } | 201 | } |
| 203 | 202 | ||
| 204 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u8> for Spi<'d, T> { | 203 | impl<'d, T: Instance> embedded_hal::blocking::spi::Write<u8> for Spi<'d, T> { |
| 205 | type Error = Error; | 204 | type Error = Error; |
| 206 | 205 | ||
| 207 | fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { | 206 | fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { |
| @@ -217,7 +216,7 @@ impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u8> for | |||
| 217 | } | 216 | } |
| 218 | } | 217 | } |
| 219 | 218 | ||
| 220 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Transfer<u8> for Spi<'d, T> { | 219 | impl<'d, T: Instance> embedded_hal::blocking::spi::Transfer<u8> for Spi<'d, T> { |
| 221 | type Error = Error; | 220 | type Error = Error; |
| 222 | 221 | ||
| 223 | fn transfer<'w>(&mut self, words: &'w mut [u8]) -> Result<&'w [u8], Self::Error> { | 222 | fn transfer<'w>(&mut self, words: &'w mut [u8]) -> Result<&'w [u8], Self::Error> { |
| @@ -233,7 +232,7 @@ impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Transfer<u8> | |||
| 233 | } | 232 | } |
| 234 | } | 233 | } |
| 235 | 234 | ||
| 236 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u16> for Spi<'d, T> { | 235 | impl<'d, T: Instance> embedded_hal::blocking::spi::Write<u16> for Spi<'d, T> { |
| 237 | type Error = Error; | 236 | type Error = Error; |
| 238 | 237 | ||
| 239 | fn write(&mut self, words: &[u16]) -> Result<(), Self::Error> { | 238 | fn write(&mut self, words: &[u16]) -> Result<(), Self::Error> { |
| @@ -249,7 +248,7 @@ impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u16> fo | |||
| 249 | } | 248 | } |
| 250 | } | 249 | } |
| 251 | 250 | ||
| 252 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Transfer<u16> for Spi<'d, T> { | 251 | impl<'d, T: Instance> embedded_hal::blocking::spi::Transfer<u16> for Spi<'d, T> { |
| 253 | type Error = Error; | 252 | type Error = Error; |
| 254 | 253 | ||
| 255 | fn transfer<'w>(&mut self, words: &'w mut [u16]) -> Result<&'w [u16], Self::Error> { | 254 | fn transfer<'w>(&mut self, words: &'w mut [u16]) -> Result<&'w [u16], Self::Error> { |
diff --git a/embassy-stm32/src/spi/v3.rs b/embassy-stm32/src/spi/v3.rs index 3b768751d..6073616bd 100644 --- a/embassy-stm32/src/spi/v3.rs +++ b/embassy-stm32/src/spi/v3.rs | |||
| @@ -4,7 +4,6 @@ use crate::gpio::{AnyPin, Pin}; | |||
| 4 | use crate::pac::gpio::vals::{Afr, Moder}; | 4 | use crate::pac::gpio::vals::{Afr, Moder}; |
| 5 | use crate::pac::gpio::Gpio; | 5 | use crate::pac::gpio::Gpio; |
| 6 | use crate::pac::spi; | 6 | use crate::pac::spi; |
| 7 | use crate::rcc::RccPeripheral; | ||
| 8 | use crate::spi::{ByteOrder, Config, Error, Instance, MisoPin, MosiPin, SckPin, WordSize}; | 7 | use crate::spi::{ByteOrder, Config, Error, Instance, MisoPin, MosiPin, SckPin, WordSize}; |
| 9 | use crate::time::Hertz; | 8 | use crate::time::Hertz; |
| 10 | use core::marker::PhantomData; | 9 | use core::marker::PhantomData; |
| @@ -29,14 +28,14 @@ impl WordSize { | |||
| 29 | } | 28 | } |
| 30 | } | 29 | } |
| 31 | 30 | ||
| 32 | pub struct Spi<'d, T: Instance + RccPeripheral> { | 31 | pub struct Spi<'d, T: Instance> { |
| 33 | sck: AnyPin, | 32 | sck: AnyPin, |
| 34 | mosi: AnyPin, | 33 | mosi: AnyPin, |
| 35 | miso: AnyPin, | 34 | miso: AnyPin, |
| 36 | phantom: PhantomData<&'d mut T>, | 35 | phantom: PhantomData<&'d mut T>, |
| 37 | } | 36 | } |
| 38 | 37 | ||
| 39 | impl<'d, T: Instance + RccPeripheral> Spi<'d, T> { | 38 | impl<'d, T: Instance> Spi<'d, T> { |
| 40 | pub fn new<F>( | 39 | pub fn new<F>( |
| 41 | pclk: Hertz, | 40 | pclk: Hertz, |
| 42 | _peri: impl Unborrow<Target = T> + 'd, | 41 | _peri: impl Unborrow<Target = T> + 'd, |
| @@ -164,7 +163,7 @@ impl<'d, T: Instance + RccPeripheral> Spi<'d, T> { | |||
| 164 | } | 163 | } |
| 165 | } | 164 | } |
| 166 | 165 | ||
| 167 | impl<'d, T: Instance + RccPeripheral> Drop for Spi<'d, T> { | 166 | impl<'d, T: Instance> Drop for Spi<'d, T> { |
| 168 | fn drop(&mut self) { | 167 | fn drop(&mut self) { |
| 169 | unsafe { | 168 | unsafe { |
| 170 | Self::unconfigure_pin(self.sck.block(), self.sck.pin() as _); | 169 | Self::unconfigure_pin(self.sck.block(), self.sck.pin() as _); |
| @@ -174,7 +173,7 @@ impl<'d, T: Instance + RccPeripheral> Drop for Spi<'d, T> { | |||
| 174 | } | 173 | } |
| 175 | } | 174 | } |
| 176 | 175 | ||
| 177 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u8> for Spi<'d, T> { | 176 | impl<'d, T: Instance> embedded_hal::blocking::spi::Write<u8> for Spi<'d, T> { |
| 178 | type Error = Error; | 177 | type Error = Error; |
| 179 | 178 | ||
| 180 | fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { | 179 | fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { |
| @@ -211,7 +210,7 @@ impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u8> for | |||
| 211 | } | 210 | } |
| 212 | } | 211 | } |
| 213 | 212 | ||
| 214 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Transfer<u8> for Spi<'d, T> { | 213 | impl<'d, T: Instance> embedded_hal::blocking::spi::Transfer<u8> for Spi<'d, T> { |
| 215 | type Error = Error; | 214 | type Error = Error; |
| 216 | 215 | ||
| 217 | fn transfer<'w>(&mut self, words: &'w mut [u8]) -> Result<&'w [u8], Self::Error> { | 216 | fn transfer<'w>(&mut self, words: &'w mut [u8]) -> Result<&'w [u8], Self::Error> { |
| @@ -268,7 +267,7 @@ impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Transfer<u8> | |||
| 268 | } | 267 | } |
| 269 | } | 268 | } |
| 270 | 269 | ||
| 271 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u16> for Spi<'d, T> { | 270 | impl<'d, T: Instance> embedded_hal::blocking::spi::Write<u16> for Spi<'d, T> { |
| 272 | type Error = Error; | 271 | type Error = Error; |
| 273 | 272 | ||
| 274 | fn write(&mut self, words: &[u16]) -> Result<(), Self::Error> { | 273 | fn write(&mut self, words: &[u16]) -> Result<(), Self::Error> { |
| @@ -305,7 +304,7 @@ impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Write<u16> fo | |||
| 305 | } | 304 | } |
| 306 | } | 305 | } |
| 307 | 306 | ||
| 308 | impl<'d, T: Instance + RccPeripheral> embedded_hal::blocking::spi::Transfer<u16> for Spi<'d, T> { | 307 | impl<'d, T: Instance> embedded_hal::blocking::spi::Transfer<u16> for Spi<'d, T> { |
| 309 | type Error = Error; | 308 | type Error = Error; |
| 310 | 309 | ||
| 311 | fn transfer<'w>(&mut self, words: &'w mut [u16]) -> Result<&'w [u16], Self::Error> { | 310 | fn transfer<'w>(&mut self, words: &'w mut [u16]) -> Result<&'w [u16], Self::Error> { |
