aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob McWhirter <[email protected]>2021-06-03 11:27:17 -0400
committerBob McWhirter <[email protected]>2021-06-03 13:12:38 -0400
commit00892c7362c7c1d21542828320512f69d5f18ddc (patch)
tree9aaa5ae97662bcdf185524d300056975c95e5cb7
parent6958091b500a1104a3d9d3a2737b9fe756f25702 (diff)
Migrate USART to macro tables.
-rw-r--r--embassy-stm32/gen.py28
-rw-r--r--embassy-stm32/src/usart/mod.rs43
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")]
5mod _version; 5mod _version;
6use crate::peripherals;
6pub use _version::*; 7pub use _version::*;
7 8
8use crate::gpio::Pin; 9use crate::gpio::Pin;
@@ -51,24 +52,48 @@ pub trait CtsPin<T: Instance>: sealed::CtsPin<T> {}
51pub trait RtsPin<T: Instance>: sealed::RtsPin<T> {} 52pub trait RtsPin<T: Instance>: sealed::RtsPin<T> {}
52pub trait CkPin<T: Instance>: sealed::CkPin<T> {} 53pub trait CkPin<T: Instance>: sealed::CkPin<T> {}
53 54
54macro_rules! impl_usart { 55crate::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
65macro_rules! impl_usart_pin { 67macro_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
79crate::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);