1use crate::gpio::{self, Alternate};
2
3pub trait CPin<TIM, const C: u8> {}
5pub struct Ch<const C: u8>;
6pub const C1: u8 = 0;
7pub const C2: u8 = 1;
8pub const C3: u8 = 2;
9pub const C4: u8 = 3;
10
11macro_rules! channel_impl {
12 ( $( $TIM:ident, $C:ident, $PINX:ident, $AF:literal; )+ ) => {
13 $(
14 impl<Otype> CPin<crate::pac::$TIM, $C> for gpio::$PINX<Alternate<$AF, Otype>> { }
15 )+
16 };
17}
18
19channel_impl!(
26 TIM1, C1, PA8, 1;
27 TIM1, C2, PA9, 1;
28 TIM1, C3, PA10, 1;
29 TIM1, C4, PA11, 1;
30
31 TIM5, C1, PA0, 2;
32 TIM5, C2, PA1, 2;
33 TIM5, C3, PA2, 2;
34 TIM5, C4, PA3, 2;
35
36 TIM9, C1, PA2, 3;
37 TIM9, C2, PA3, 3;
38
39 TIM11, C1, PB9, 3;
40);
41
42channel_impl!(
44 TIM1, C1, PE9, 1;
45 TIM1, C2, PE11, 1;
46 TIM1, C3, PE13, 1;
47 TIM1, C4, PE14, 1;
48
49 TIM2, C1, PA0, 1;
50 TIM2, C2, PA1, 1;
51 TIM2, C3, PA2, 1;
52 TIM2, C4, PA3, 1;
53
54 TIM2, C2, PB3, 1;
55 TIM2, C3, PB10, 1;
56 TIM2, C4, PB11, 1;
57
58 TIM2, C1, PA5, 1;
59 TIM2, C1, PA15, 1;
60
61 TIM3, C1, PA6, 2;
62 TIM3, C2, PA7, 2;
63 TIM3, C3, PB0, 2;
64 TIM3, C4, PB1, 2;
65
66 TIM3, C1, PB4, 2;
67 TIM3, C2, PB5, 2;
68
69 TIM3, C1, PC6, 2;
70 TIM3, C2, PC7, 2;
71 TIM3, C3, PC8, 2;
72 TIM3, C4, PC9, 2;
73
74 TIM4, C1, PB6, 2;
75 TIM4, C2, PB7, 2;
76 TIM4, C3, PB8, 2;
77 TIM4, C4, PB9, 2;
78
79 TIM4, C1, PD12, 2;
80 TIM4, C2, PD13, 2;
81 TIM4, C3, PD14, 2;
82 TIM4, C4, PD15, 2;
83
84 TIM10, C1, PB8, 3;
85);
86
87channel_impl!(
88 TIM9, C1, PE5, 3;
89 TIM9, C2, PE6, 3;
90);
91
92channel_impl!(
93 TIM8, C1, PC6, 3;
94 TIM8, C2, PC7, 3;
95 TIM8, C3, PC8, 3;
96 TIM8, C4, PC9, 3;
97
98 TIM10, C1, PF6, 3;
99
100 TIM11, C1, PF7, 3;
101
102 TIM12, C1, PB14, 9;
103 TIM12, C2, PB15, 9;
104
105 TIM13, C1, PA6, 9;
106 TIM13, C1, PF8, 9; TIM14, C1, PA7, 9;
109 TIM14, C1, PF9, 9; );
111
112channel_impl!(
113 TIM5, C1, PH10, 2;
114 TIM5, C2, PH11, 2;
115 TIM5, C3, PH12, 2;
116 TIM5, C4, PI0, 2;
117
118 TIM8, C1, PI5, 3;
119 TIM8, C2, PI6, 3;
120 TIM8, C3, PI7, 3;
121 TIM8, C4, PI2, 3;
122
123 TIM12, C1, PH6, 9;
124 TIM12, C2, PH9, 9;
125);