diff options
| author | Timo Kröger <[email protected]> | 2024-03-01 14:59:21 +0100 |
|---|---|---|
| committer | Timo Kröger <[email protected]> | 2024-03-12 08:14:41 +0100 |
| commit | 8a255b375b7598c2825535cb0d0729311a7b882d (patch) | |
| tree | 44fc73227a747209e44235aa4047982c79b0a709 | |
| parent | 1ef02e538497d1876ec26f8acf0763d6c3263382 (diff) | |
[UCPD] Instance and Pin Traits
Skip FRSTX pin for now. Its available twice in the device JSON as
FRSTX1 and FRSTX2 both with the same pins as targets.
I don’t know enough about the FRS (fast role switch) feature to
understand if that is correct and how to handle the pins.
| -rw-r--r-- | embassy-stm32/build.rs | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/lib.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/ucpd.rs | 28 |
3 files changed, 34 insertions, 0 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index 84e8be25d..680216034 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs | |||
| @@ -764,6 +764,8 @@ fn main() { | |||
| 764 | #[rustfmt::skip] | 764 | #[rustfmt::skip] |
| 765 | let signals: HashMap<_, _> = [ | 765 | let signals: HashMap<_, _> = [ |
| 766 | // (kind, signal) => trait | 766 | // (kind, signal) => trait |
| 767 | (("ucpd", "CC1"), quote!(crate::ucpd::Cc1Pin)), | ||
| 768 | (("ucpd", "CC2"), quote!(crate::ucpd::Cc2Pin)), | ||
| 767 | (("usart", "TX"), quote!(crate::usart::TxPin)), | 769 | (("usart", "TX"), quote!(crate::usart::TxPin)), |
| 768 | (("usart", "RX"), quote!(crate::usart::RxPin)), | 770 | (("usart", "RX"), quote!(crate::usart::RxPin)), |
| 769 | (("usart", "CTS"), quote!(crate::usart::CtsPin)), | 771 | (("usart", "CTS"), quote!(crate::usart::CtsPin)), |
| @@ -1102,6 +1104,8 @@ fn main() { | |||
| 1102 | 1104 | ||
| 1103 | let signals: HashMap<_, _> = [ | 1105 | let signals: HashMap<_, _> = [ |
| 1104 | // (kind, signal) => trait | 1106 | // (kind, signal) => trait |
| 1107 | (("ucpd", "RX"), quote!(crate::ucpd::RxDma)), | ||
| 1108 | (("ucpd", "TX"), quote!(crate::ucpd::TxDma)), | ||
| 1105 | (("usart", "RX"), quote!(crate::usart::RxDma)), | 1109 | (("usart", "RX"), quote!(crate::usart::RxDma)), |
| 1106 | (("usart", "TX"), quote!(crate::usart::TxDma)), | 1110 | (("usart", "TX"), quote!(crate::usart::TxDma)), |
| 1107 | (("lpuart", "RX"), quote!(crate::usart::RxDma)), | 1111 | (("lpuart", "RX"), quote!(crate::usart::RxDma)), |
diff --git a/embassy-stm32/src/lib.rs b/embassy-stm32/src/lib.rs index b548a0343..361dc6f53 100644 --- a/embassy-stm32/src/lib.rs +++ b/embassy-stm32/src/lib.rs | |||
| @@ -73,6 +73,8 @@ pub mod sai; | |||
| 73 | pub mod sdmmc; | 73 | pub mod sdmmc; |
| 74 | #[cfg(spi)] | 74 | #[cfg(spi)] |
| 75 | pub mod spi; | 75 | pub mod spi; |
| 76 | #[cfg(ucpd)] | ||
| 77 | pub mod ucpd; | ||
| 76 | #[cfg(uid)] | 78 | #[cfg(uid)] |
| 77 | pub mod uid; | 79 | pub mod uid; |
| 78 | #[cfg(usart)] | 80 | #[cfg(usart)] |
diff --git a/embassy-stm32/src/ucpd.rs b/embassy-stm32/src/ucpd.rs new file mode 100644 index 000000000..a2bac7611 --- /dev/null +++ b/embassy-stm32/src/ucpd.rs | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | //! USB Type-C/USB Power Delivery Interface (UCPD) | ||
| 2 | |||
| 3 | use crate::rcc::RccPeripheral; | ||
| 4 | |||
| 5 | /// UCPD instance trait. | ||
| 6 | pub trait Instance: sealed::Instance + RccPeripheral {} | ||
| 7 | |||
| 8 | pub(crate) mod sealed { | ||
| 9 | pub trait Instance { | ||
| 10 | const REGS: crate::pac::ucpd::Ucpd; | ||
| 11 | } | ||
| 12 | } | ||
| 13 | |||
| 14 | foreach_peripheral!( | ||
| 15 | (ucpd, $inst:ident) => { | ||
| 16 | impl sealed::Instance for crate::peripherals::$inst { | ||
| 17 | const REGS: crate::pac::ucpd::Ucpd = crate::pac::$inst; | ||
| 18 | } | ||
| 19 | |||
| 20 | impl Instance for crate::peripherals::$inst {} | ||
| 21 | }; | ||
| 22 | ); | ||
| 23 | |||
| 24 | pin_trait!(Cc1Pin, Instance); | ||
| 25 | pin_trait!(Cc2Pin, Instance); | ||
| 26 | |||
| 27 | dma_trait!(TxDma, Instance); | ||
| 28 | dma_trait!(RxDma, Instance); | ||
