diff options
| -rw-r--r-- | embassy-stm32/build.rs | 5 | ||||
| -rw-r--r-- | embassy-stm32/src/eth/mod.rs | 1 | ||||
| -rw-r--r-- | embassy-stm32/src/eth/sma/mod.rs | 33 |
3 files changed, 39 insertions, 0 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index 1e11eb8dc..9dd94941c 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs | |||
| @@ -170,6 +170,11 @@ fn main() { | |||
| 170 | } | 170 | } |
| 171 | singletons.push(p.name.to_string()); | 171 | singletons.push(p.name.to_string()); |
| 172 | } | 172 | } |
| 173 | |||
| 174 | "eth" => { | ||
| 175 | singletons.push(p.name.to_string()); | ||
| 176 | singletons.push("ETH_SMA".to_string()); | ||
| 177 | } | ||
| 173 | //"dbgmcu" => {} | 178 | //"dbgmcu" => {} |
| 174 | //"syscfg" => {} | 179 | //"syscfg" => {} |
| 175 | //"dma" => {} | 180 | //"dma" => {} |
diff --git a/embassy-stm32/src/eth/mod.rs b/embassy-stm32/src/eth/mod.rs index 10b3a0517..bef6a02b2 100644 --- a/embassy-stm32/src/eth/mod.rs +++ b/embassy-stm32/src/eth/mod.rs | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #[cfg_attr(eth_v2, path = "v2/mod.rs")] | 5 | #[cfg_attr(eth_v2, path = "v2/mod.rs")] |
| 6 | mod _version; | 6 | mod _version; |
| 7 | mod generic_phy; | 7 | mod generic_phy; |
| 8 | mod sma; | ||
| 8 | 9 | ||
| 9 | use core::mem::MaybeUninit; | 10 | use core::mem::MaybeUninit; |
| 10 | use core::task::Context; | 11 | use core::task::Context; |
diff --git a/embassy-stm32/src/eth/sma/mod.rs b/embassy-stm32/src/eth/sma/mod.rs new file mode 100644 index 000000000..106a6b2bd --- /dev/null +++ b/embassy-stm32/src/eth/sma/mod.rs | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | //! Station Management Agent (also known as MDIO or SMI). | ||
| 2 | |||
| 3 | #![macro_use] | ||
| 4 | |||
| 5 | use embassy_hal_internal::PeripheralType; | ||
| 6 | #[cfg(eth_v2)] | ||
| 7 | pub(crate) use regs::{Macmdioar as AddressRegister, Macmdiodr as DataRegister}; | ||
| 8 | #[cfg(any(eth_v1a, eth_v1b, eth_v1c))] | ||
| 9 | pub(crate) use regs::{Macmiiar as AddressRegister, Macmiidr as DataRegister}; | ||
| 10 | use stm32_metapac::common::{RW, Reg}; | ||
| 11 | use stm32_metapac::eth::regs; | ||
| 12 | |||
| 13 | trait SealedInstance { | ||
| 14 | fn regs() -> (Reg<AddressRegister, RW>, Reg<DataRegister, RW>); | ||
| 15 | } | ||
| 16 | |||
| 17 | /// MDIO instance. | ||
| 18 | #[allow(private_bounds)] | ||
| 19 | pub trait Instance: SealedInstance + PeripheralType + Send + 'static {} | ||
| 20 | |||
| 21 | impl SealedInstance for crate::peripherals::ETH_SMA { | ||
| 22 | fn regs() -> (Reg<AddressRegister, RW>, Reg<DataRegister, RW>) { | ||
| 23 | let mac = crate::pac::ETH.ethernet_mac(); | ||
| 24 | |||
| 25 | #[cfg(any(eth_v1a, eth_v1b, eth_v1c))] | ||
| 26 | return (mac.macmiiar(), mac.macmiidr()); | ||
| 27 | |||
| 28 | #[cfg(eth_v2)] | ||
| 29 | return (mac.macmdioar(), mac.macmdiodr()); | ||
| 30 | } | ||
| 31 | } | ||
| 32 | |||
| 33 | impl Instance for crate::peripherals::ETH_SMA {} | ||
