diff options
| -rw-r--r-- | embassy-stm32/src/exti.rs | 55 | ||||
| -rw-r--r-- | stm32-metapac/build.rs | 7 |
2 files changed, 48 insertions, 14 deletions
diff --git a/embassy-stm32/src/exti.rs b/embassy-stm32/src/exti.rs index a8875fb5d..0ee93bede 100644 --- a/embassy-stm32/src/exti.rs +++ b/embassy-stm32/src/exti.rs | |||
| @@ -237,22 +237,63 @@ macro_rules! impl_exti_irq { | |||
| 237 | } | 237 | } |
| 238 | */ | 238 | */ |
| 239 | 239 | ||
| 240 | macro_rules! foreach_exti_irq { | ||
| 241 | ($action:ident) => { | ||
| 242 | crate::pac::interrupts!( | ||
| 243 | (EXTI0) => { $action!(EXTI0); }; | ||
| 244 | (EXTI1) => { $action!(EXTI1); }; | ||
| 245 | (EXTI2) => { $action!(EXTI2); }; | ||
| 246 | (EXTI3) => { $action!(EXTI3); }; | ||
| 247 | (EXTI4) => { $action!(EXTI4); }; | ||
| 248 | (EXTI5) => { $action!(EXTI5); }; | ||
| 249 | (EXTI6) => { $action!(EXTI6); }; | ||
| 250 | (EXTI7) => { $action!(EXTI7); }; | ||
| 251 | (EXTI8) => { $action!(EXTI8); }; | ||
| 252 | (EXTI9) => { $action!(EXTI9); }; | ||
| 253 | (EXTI10) => { $action!(EXTI10); }; | ||
| 254 | (EXTI11) => { $action!(EXTI11); }; | ||
| 255 | (EXTI12) => { $action!(EXTI12); }; | ||
| 256 | (EXTI13) => { $action!(EXTI13); }; | ||
| 257 | (EXTI14) => { $action!(EXTI14); }; | ||
| 258 | (EXTI15) => { $action!(EXTI15); }; | ||
| 259 | |||
| 260 | // plus the weird ones | ||
| 261 | (EXTI0_1) => { $action!( EXTI0_1 ); }; | ||
| 262 | (EXTI15_10) => { $action!(EXTI15_10); }; | ||
| 263 | (EXTI15_4) => { $action!(EXTI15_4); }; | ||
| 264 | (EXTI1_0) => { $action!(EXTI1_0); }; | ||
| 265 | (EXTI2_3) => { $action!(EXTI2_3); }; | ||
| 266 | (EXTI2_TSC) => { $action!(EXTI2_TSC); }; | ||
| 267 | (EXTI3_2) => { $action!(EXTI3_2); }; | ||
| 268 | (EXTI4_15) => { $action!(EXTI4_15); }; | ||
| 269 | (EXTI9_5) => { $action!(EXTI9_5); }; | ||
| 270 | ); | ||
| 271 | }; | ||
| 272 | } | ||
| 273 | |||
| 274 | macro_rules! enable_irq { | ||
| 275 | ($e:ident) => { | ||
| 276 | crate::interrupt::$e::steal().enable(); | ||
| 277 | }; | ||
| 278 | } | ||
| 279 | |||
| 240 | /// safety: must be called only once | 280 | /// safety: must be called only once |
| 241 | pub(crate) unsafe fn init_exti() { | 281 | pub(crate) unsafe fn init_exti() { |
| 242 | use embassy::interrupt::Interrupt; | 282 | use embassy::interrupt::Interrupt; |
| 243 | use embassy::interrupt::InterruptExt; | 283 | use embassy::interrupt::InterruptExt; |
| 244 | 284 | ||
| 245 | crate::pac::exti_interrupts!( | 285 | foreach_exti_irq!(enable_irq); |
| 246 | ($e:ident) => { | ||
| 247 | crate::interrupt::$e::steal().enable(); | ||
| 248 | }; | ||
| 249 | ); | ||
| 250 | } | 286 | } |
| 251 | 287 | ||
| 252 | crate::pac::exti_interrupts!( | 288 | use crate::interrupt; |
| 289 | |||
| 290 | macro_rules! impl_irq { | ||
| 253 | ($e:ident) => { | 291 | ($e:ident) => { |
| 292 | #[interrupt] | ||
| 254 | unsafe fn $e() { | 293 | unsafe fn $e() { |
| 255 | on_irq() | 294 | on_irq() |
| 256 | } | 295 | } |
| 257 | }; | 296 | }; |
| 258 | ); | 297 | } |
| 298 | |||
| 299 | foreach_exti_irq!(impl_irq); | ||
diff --git a/stm32-metapac/build.rs b/stm32-metapac/build.rs index b19906ea8..ef95f3313 100644 --- a/stm32-metapac/build.rs +++ b/stm32-metapac/build.rs | |||
| @@ -255,15 +255,8 @@ fn main() { | |||
| 255 | .map(|(kind, version)| vec![kind.clone(), version.clone()]) | 255 | .map(|(kind, version)| vec![kind.clone(), version.clone()]) |
| 256 | .collect(); | 256 | .collect(); |
| 257 | 257 | ||
| 258 | let exti_interrupt_table = &interrupt_table | ||
| 259 | .iter() | ||
| 260 | .filter(|row| row[0].contains("EXTI")) | ||
| 261 | .map(|row| row.clone()) | ||
| 262 | .collect(); | ||
| 263 | |||
| 264 | make_table(&mut extra, "pins", &pin_table); | 258 | make_table(&mut extra, "pins", &pin_table); |
| 265 | make_table(&mut extra, "interrupts", &interrupt_table); | 259 | make_table(&mut extra, "interrupts", &interrupt_table); |
| 266 | make_table(&mut extra, "exti_interrupts", &exti_interrupt_table); | ||
| 267 | make_table(&mut extra, "peripherals", &peripherals_table); | 260 | make_table(&mut extra, "peripherals", &peripherals_table); |
| 268 | make_table(&mut extra, "peripheral_versions", &peripheral_version_table); | 261 | make_table(&mut extra, "peripheral_versions", &peripheral_version_table); |
| 269 | make_table(&mut extra, "peripheral_pins", &peripheral_pins_table); | 262 | make_table(&mut extra, "peripheral_pins", &peripheral_pins_table); |
