diff options
| author | Bob McWhirter <[email protected]> | 2021-06-03 11:27:17 -0400 |
|---|---|---|
| committer | Bob McWhirter <[email protected]> | 2021-06-03 13:12:38 -0400 |
| commit | 00892c7362c7c1d21542828320512f69d5f18ddc (patch) | |
| tree | 9aaa5ae97662bcdf185524d300056975c95e5cb7 | |
| parent | 6958091b500a1104a3d9d3a2737b9fe756f25702 (diff) | |
Migrate USART to macro tables.
| -rw-r--r-- | embassy-stm32/gen.py | 28 | ||||
| -rw-r--r-- | embassy-stm32/src/usart/mod.rs | 43 |
2 files changed, 48 insertions, 23 deletions
diff --git a/embassy-stm32/gen.py b/embassy-stm32/gen.py index e8645ccf9..55612cb3f 100644 --- a/embassy-stm32/gen.py +++ b/embassy-stm32/gen.py | |||
| @@ -48,20 +48,20 @@ with open(output_file, 'w') as f: | |||
| 48 | 48 | ||
| 49 | custom_singletons = False | 49 | custom_singletons = False |
| 50 | 50 | ||
| 51 | if block_mod == 'usart': | 51 | # if block_mod == 'usart': |
| 52 | f.write(f'impl_usart!({name});') | 52 | # f.write(f'impl_usart!({name});') |
| 53 | for pin, funcs in af.items(): | 53 | # for pin, funcs in af.items(): |
| 54 | if pin in pins: | 54 | # if pin in pins: |
| 55 | if (func := funcs.get(f'{name}_RX')) != None: | 55 | # if (func := funcs.get(f'{name}_RX')) != None: |
| 56 | f.write(f'impl_usart_pin!({name}, RxPin, {pin}, {func});') | 56 | # f.write(f'impl_usart_pin!({name}, RxPin, {pin}, {func});') |
| 57 | if (func := funcs.get(f'{name}_TX')) != None: | 57 | # if (func := funcs.get(f'{name}_TX')) != None: |
| 58 | f.write(f'impl_usart_pin!({name}, TxPin, {pin}, {func});') | 58 | # f.write(f'impl_usart_pin!({name}, TxPin, {pin}, {func});') |
| 59 | if (func := funcs.get(f'{name}_CTS')) != None: | 59 | # if (func := funcs.get(f'{name}_CTS')) != None: |
| 60 | f.write(f'impl_usart_pin!({name}, CtsPin, {pin}, {func});') | 60 | # f.write(f'impl_usart_pin!({name}, CtsPin, {pin}, {func});') |
| 61 | if (func := funcs.get(f'{name}_RTS')) != None: | 61 | # if (func := funcs.get(f'{name}_RTS')) != None: |
| 62 | f.write(f'impl_usart_pin!({name}, RtsPin, {pin}, {func});') | 62 | # f.write(f'impl_usart_pin!({name}, RtsPin, {pin}, {func});') |
| 63 | if (func := funcs.get(f'{name}_CK')) != None: | 63 | # if (func := funcs.get(f'{name}_CK')) != None: |
| 64 | f.write(f'impl_usart_pin!({name}, CkPin, {pin}, {func});') | 64 | # f.write(f'impl_usart_pin!({name}, CkPin, {pin}, {func});') |
| 65 | 65 | ||
| 66 | # if block_mod == 'rng': | 66 | # if block_mod == 'rng': |
| 67 | # for irq in chip['interrupts']: | 67 | # for irq in chip['interrupts']: |
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs index 77b217c3a..adf48c326 100644 --- a/embassy-stm32/src/usart/mod.rs +++ b/embassy-stm32/src/usart/mod.rs | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | #[cfg_attr(usart_v1, path = "v1.rs")] | 3 | #[cfg_attr(usart_v1, path = "v1.rs")] |
| 4 | #[cfg_attr(usart_v2, path = "v2.rs")] | 4 | #[cfg_attr(usart_v2, path = "v2.rs")] |
| 5 | mod _version; | 5 | mod _version; |
| 6 | use crate::peripherals; | ||
| 6 | pub use _version::*; | 7 | pub use _version::*; |
| 7 | 8 | ||
| 8 | use crate::gpio::Pin; | 9 | use crate::gpio::Pin; |
| @@ -51,24 +52,48 @@ pub trait CtsPin<T: Instance>: sealed::CtsPin<T> {} | |||
| 51 | pub trait RtsPin<T: Instance>: sealed::RtsPin<T> {} | 52 | pub trait RtsPin<T: Instance>: sealed::RtsPin<T> {} |
| 52 | pub trait CkPin<T: Instance>: sealed::CkPin<T> {} | 53 | pub trait CkPin<T: Instance>: sealed::CkPin<T> {} |
| 53 | 54 | ||
| 54 | macro_rules! impl_usart { | 55 | crate::pac::peripherals!( |
| 55 | ($inst:ident) => { | 56 | (usart, $inst:ident) => { |
| 56 | impl crate::usart::sealed::Instance for peripherals::$inst { | 57 | impl sealed::Instance for peripherals::$inst { |
| 57 | fn regs(&self) -> crate::pac::usart::Usart { | 58 | fn regs(&self) -> crate::pac::usart::Usart { |
| 58 | crate::pac::$inst | 59 | crate::pac::$inst |
| 59 | } | 60 | } |
| 60 | } | 61 | } |
| 61 | impl crate::usart::Instance for peripherals::$inst {} | 62 | |
| 63 | impl Instance for peripherals::$inst {} | ||
| 62 | }; | 64 | }; |
| 63 | } | 65 | ); |
| 64 | 66 | ||
| 65 | macro_rules! impl_usart_pin { | 67 | macro_rules! impl_pin { |
| 66 | ($inst:ident, $func:ident, $pin:ident, $af:expr) => { | 68 | ($inst:ident, $pin:ident, $signal:ident, $af:expr) => { |
| 67 | impl crate::usart::sealed::$func<peripherals::$inst> for peripherals::$pin { | 69 | impl sealed::$signal<peripherals::$inst> for peripherals::$pin { |
| 68 | fn af_num(&self) -> u8 { | 70 | fn af_num(&self) -> u8 { |
| 69 | $af | 71 | $af |
| 70 | } | 72 | } |
| 71 | } | 73 | } |
| 72 | impl crate::usart::$func<peripherals::$inst> for peripherals::$pin {} | 74 | |
| 75 | impl $signal<peripherals::$inst> for peripherals::$pin {} | ||
| 73 | }; | 76 | }; |
| 74 | } | 77 | } |
| 78 | |||
| 79 | crate::pac::peripheral_pins!( | ||
| 80 | ($inst:ident, usart, USART, $pin:ident, TX, $af:expr) => { | ||
| 81 | impl_pin!($inst, $pin, TxPin, $af); | ||
| 82 | }; | ||
| 83 | |||
| 84 | ($inst:ident, usart, USART, $pin:ident, RX, $af:expr) => { | ||
| 85 | impl_pin!($inst, $pin, RxPin, $af); | ||
| 86 | }; | ||
| 87 | |||
| 88 | ($inst:ident, usart, USART, $pin:ident, CTS, $af:expr) => { | ||
| 89 | impl_pin!($inst, $pin, CtsPin, $af); | ||
| 90 | }; | ||
| 91 | |||
| 92 | ($inst:ident, usart, USART, $pin:ident, RTS, $af:expr) => { | ||
| 93 | impl_pin!($inst, $pin, RtsPin, $af); | ||
| 94 | }; | ||
| 95 | |||
| 96 | ($inst:ident, usart, USART, $pin:ident, CK, $af:expr) => { | ||
| 97 | impl_pin!($inst, $pin, CkPin, $af); | ||
| 98 | }; | ||
| 99 | ); | ||
