stm32f3xx_hal/timer/
interrupts.rs1use crate::pac::Interrupt;
2
3#[derive(Copy, Clone, Debug)]
5#[non_exhaustive]
7pub struct InterruptTypes {
8 pub r#break: Interrupt,
10 pub update: Interrupt,
12 pub trigger: Interrupt,
14 pub capture_compare: Interrupt,
16}
17
18pub(crate) const TIM2: Interrupt = Interrupt::TIM2;
21cfg_if::cfg_if! {
22 if #[cfg(any(feature = "svd-f303", feature = "svd-f302", feature = "svd-f373"))] {
23 pub(crate) const TIM3: Interrupt = Interrupt::TIM3;
24 pub(crate) const TIM4: Interrupt = Interrupt::TIM4;
25 } else if #[cfg(any(feature = "svd-f3x4"))] {
26 pub(crate) const TIM3: Interrupt = Interrupt::TIM3_IRQ;
27 }
28}
29cfg_if::cfg_if! {
30 if #[cfg(feature = "svd-f373")] {
31 pub(crate) const TIM5: Interrupt = Interrupt::TIM5;
32 pub(crate) const TIM12: Interrupt = Interrupt::TIM12;
33 pub(crate) const TIM13: Interrupt = Interrupt::TIM13;
34 pub(crate) const TIM14: Interrupt = Interrupt::TIM14;
35 pub(crate) const TIM18: Interrupt = Interrupt::TIM18_DAC;
36 pub(crate) const TIM19: Interrupt = Interrupt::TIM19;
37 }
38}
39cfg_if::cfg_if! {
40 if #[cfg(any(feature = "svd-f302", feature = "svd-f303"))] {
41 pub(crate) const TIM6: Interrupt = Interrupt::TIM6_DACUNDER;
42 } else if #[cfg(any(feature = "svd-f301", feature = "svd-f373", feature = "svd-f3x4"))] {
43 pub(crate) const TIM6: Interrupt = Interrupt::TIM6_DAC1;
44 }
45}
46
47cfg_if::cfg_if! {
48 if #[cfg(any(feature = "svd-f302", feature = "svd-f303", feature = "svd-f373"))] {
49 pub(crate) const TIM7: Interrupt = Interrupt::TIM7;
50 } else if #[cfg(feature = "svd-f3x4")] {
51 pub(crate) const TIM7: Interrupt = Interrupt::TIM7_DAC2;
52 }
53}
54
55cfg_if::cfg_if! {
56 if #[cfg(any(feature = "svd-f302", feature = "svd-f303", feature = "svd-f3x4"))] {
57 pub(crate) const TIM15: Interrupt = Interrupt::TIM1_BRK_TIM15;
58 pub(crate) const TIM16: Interrupt = Interrupt::TIM1_UP_TIM16;
59 pub(crate) const TIM17: Interrupt = Interrupt::TIM1_TRG_COM_TIM17;
60
61 pub(crate) const TIM1_TYPES: InterruptTypes = InterruptTypes {
62 r#break: Interrupt::TIM1_BRK_TIM15,
63 update: Interrupt::TIM1_UP_TIM16,
64 trigger: Interrupt::TIM1_TRG_COM_TIM17,
65 capture_compare: Interrupt::TIM1_CC,
66 };
67 } else if #[cfg(feature = "svd-f301")] {
68 pub(crate) const TIM1: Interrupt = Interrupt::TIM1_CC;
69 pub(crate) const TIM15: Interrupt = Interrupt::TIM15_IRQ;
70 pub(crate) const TIM16: Interrupt = Interrupt::TIM16_IRQ;
71 pub(crate) const TIM17: Interrupt = Interrupt::TIM17_IRQ;
72 } else if #[cfg(feature = "svd-f373")] {
73 pub(crate) const TIM15: Interrupt = Interrupt::TIM15;
74 pub(crate) const TIM16: Interrupt = Interrupt::TIM16;
75 pub(crate) const TIM17: Interrupt = Interrupt::TIM17;
76 }
77}
78
79#[cfg(feature = "svd-f303")]
80pub(crate) const TIM8_TYPES: InterruptTypes = InterruptTypes {
81 r#break: Interrupt::TIM8_BRK,
82 update: Interrupt::TIM8_UP,
83 trigger: Interrupt::TIM8_TRG_COM,
84 capture_compare: Interrupt::TIM8_CC,
85};
86
87#[cfg(feature = "svd-f303")]
88pub(crate) const TIM20_TYPES: InterruptTypes = InterruptTypes {
89 r#break: Interrupt::TIM20_BRK,
90 update: Interrupt::TIM20_UP,
91 trigger: Interrupt::TIM20_TRG_COM,
92 capture_compare: Interrupt::TIM20_CC,
93};
94
95macro_rules! single {
96 ([ $($X:literal),+ ]) => {
97 paste::paste! {
98 $(
99 impl crate::interrupts::InterruptNumber for crate::pac::[<TIM $X>] {
100 type Interrupt = crate::timer::interrupts::Interrupt;
101 const INTERRUPT: Self::Interrupt = crate::timer::interrupts::[<TIM $X>];
102 }
103 )+
104 }
105 };
106}
107
108#[allow(unused)]
109macro_rules! multi {
110 ([ $($X:literal),+ ]) => {
111 paste::paste! {
112 $(
113 impl crate::interrupts::InterruptNumber for crate::pac::[<TIM $X>] {
114 type Interrupt = crate::timer::interrupts::InterruptTypes;
115 const INTERRUPT: Self::Interrupt = crate::timer::interrupts::[<TIM $X _TYPES>];
116 }
117 )+
118 }
119 };
120}
121
122#[cfg(feature = "svd-f301")]
123single!([1, 2, 6, 15, 16, 17]);
124
125#[cfg(feature = "svd-f302")]
126single!([2, 3, 4, 6, 7, 15, 16, 17]);
127#[cfg(feature = "svd-f302")]
128multi!([1]);
129
130#[cfg(feature = "svd-f303")]
131single!([2, 3, 4, 6, 7, 15, 16, 17]);
132#[cfg(feature = "svd-f303")]
133multi!([1, 8, 20]);
134
135#[cfg(feature = "svd-f373")]
136single!([2, 3, 4, 5, 6, 7, 12, 13, 14, 15, 16, 17, 18, 19]);
137
138#[cfg(feature = "svd-f3x4")]
139single!([2, 3, 6, 7, 15, 16, 17]);
140#[cfg(feature = "svd-f3x4")]
141multi!([1]);