stm32_hrtim/
timer_eev_cfg.rs1use core::marker::PhantomData;
2
3pub struct EevCfgs<TIM> {
4 pub eev1: EevCfg<TIM>,
5 pub eev2: EevCfg<TIM>,
6 pub eev3: EevCfg<TIM>,
7 pub eev4: EevCfg<TIM>,
8 pub eev5: EevCfg<TIM>,
9 pub eev6: EevCfg<TIM>,
10 pub eev7: EevCfg<TIM>,
11 pub eev8: EevCfg<TIM>,
12 pub eev9: EevCfg<TIM>,
13 pub eev10: EevCfg<TIM>,
14
15 #[cfg(feature = "hrtim_v2")]
20 pub(crate) event_counter_enable_bit: bool,
21 #[cfg(feature = "hrtim_v2")]
22 pub(crate) event_counter_reset_mode_bit: bool,
23 #[cfg(feature = "hrtim_v2")]
24 pub(crate) event_counter_source_bits: u8,
25 #[cfg(feature = "hrtim_v2")]
26 pub(crate) event_counter_threshold_bits: u8,
27}
28
29macro_rules! impl_setter {
30 ($eevX:ident) => {
31 pub fn $eevX(mut self, cfg: EevCfg<TIM>) -> Self {
32 self.$eevX = cfg;
33 self
34 }
35 };
36}
37
38impl<TIM> EevCfgs<TIM> {
39 impl_setter!(eev1);
40 impl_setter!(eev2);
41 impl_setter!(eev3);
42 impl_setter!(eev4);
43 impl_setter!(eev5);
44 impl_setter!(eev6);
45 impl_setter!(eev7);
46 impl_setter!(eev8);
47 impl_setter!(eev9);
48 impl_setter!(eev10);
49}
50
51impl<TIM> Clone for EevCfgs<TIM> {
52 fn clone(&self) -> Self {
53 Self {
54 eev1: self.eev1.clone(),
55 eev2: self.eev2.clone(),
56 eev3: self.eev3.clone(),
57 eev4: self.eev4.clone(),
58 eev5: self.eev5.clone(),
59 eev6: self.eev6.clone(),
60 eev7: self.eev7.clone(),
61 eev8: self.eev8.clone(),
62 eev9: self.eev9.clone(),
63 eev10: self.eev10.clone(),
64 #[cfg(feature = "hrtim_v2")]
65 event_counter_enable_bit: self.event_counter_enable_bit,
66 #[cfg(feature = "hrtim_v2")]
67 event_counter_reset_mode_bit: self.event_counter_reset_mode_bit,
68 #[cfg(feature = "hrtim_v2")]
69 event_counter_source_bits: self.event_counter_source_bits,
70 #[cfg(feature = "hrtim_v2")]
71 event_counter_threshold_bits: self.event_counter_threshold_bits,
72 }
73 }
74}
75
76pub struct EevCfg<TIM> {
77 _x: PhantomData<TIM>,
78 pub(crate) filter_bits: u8,
79 pub(crate) latch_bit: bool,
80}
81
82impl<TIM> Clone for EevCfg<TIM> {
83 fn clone(&self) -> Self {
84 Self {
85 _x: PhantomData,
86 filter_bits: self.filter_bits,
87 latch_bit: self.latch_bit,
88 }
89 }
90}
91
92impl<TIM> EevCfg<TIM> {
93 pub fn filter(mut self, filter: EventFilter) -> Self {
95 self.filter_bits = filter as u8;
96 self
97 }
98
99 pub fn latching(mut self) -> Self {
101 self.latch_bit = true;
102 self
103 }
104}
105
106pub enum EventFilter {
108 None = 0b0000,
110
111 BlankingResetToCmp1 = 0b0001,
113
114 BlankingResetToCmp2OrCmp1ToCmp2InUdm = 0b0010,
118
119 BlankingResetToCmp3 = 0b0011,
121
122 BlankingResetToCmp4OrCmp3ToCmp4InUdm = 0b0100,
126
127 BlankingSource1 = 0b0101,
129
130 BlankingSource2 = 0b0110,
132
133 BlankingSource3 = 0b0111,
135
136 BlankingSource4 = 0b1000,
138
139 BlankingSource5 = 0b1001,
141
142 BlankingSource6 = 0b1010,
144
145 BlankingSource7 = 0b1011,
147
148 BlankingSource8 = 0b1100,
150
151 WindowingResetToCmp2OrCmp2ToCmp3InUdm = 0b1101,
155
156 WindowingResetToCmp3OrCmp2ToCmp3InUdm = 0b1110,
160
161 WindowingResetToOtherCmp2OrCmp2UpToCmp3DownInUdm = 0b1111,
171}
172
173impl<TIM> Default for EevCfg<TIM> {
174 fn default() -> Self {
175 Self {
176 _x: PhantomData,
177 filter_bits: EventFilter::None as u8,
178 latch_bit: false,
179 }
180 }
181}
182
183impl<TIM> Default for EevCfgs<TIM> {
184 fn default() -> Self {
185 Self {
186 eev1: EevCfg::default(),
187 eev2: Default::default(),
188 eev3: Default::default(),
189 eev4: Default::default(),
190 eev5: Default::default(),
191 eev6: Default::default(),
192 eev7: Default::default(),
193 eev8: Default::default(),
194 eev9: Default::default(),
195 eev10: Default::default(),
196 #[cfg(feature = "hrtim_v2")]
197 event_counter_enable_bit: false,
198 #[cfg(feature = "hrtim_v2")]
199 event_counter_reset_mode_bit: false,
200 #[cfg(feature = "hrtim_v2")]
201 event_counter_source_bits: 0,
202 #[cfg(feature = "hrtim_v2")]
203 event_counter_threshold_bits: 0,
204 }
205 }
206}