diff options
| author | datdenkikniet <[email protected]> | 2025-11-12 21:43:50 +0100 |
|---|---|---|
| committer | datdenkikniet <[email protected]> | 2025-11-13 23:08:33 +0100 |
| commit | aad63ecd597a5b12663bf12329327de6d9cd65f2 (patch) | |
| tree | cc5440333f2afa98690ec1b40583a5ca1984f4bd | |
| parent | 3f9865f9d8e9be95cad25df3f535fbe01087ed83 (diff) | |
Add SMA peripheral
| -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 {} | ||
