stm32_hrtim/
adc_trigger.rs

1#[cfg(feature = "hrtim_v2")]
2use crate::pac;
3use core::marker::PhantomData;
4
5/// Handle to timers reset/roll-over event
6pub struct TimerReset<T>(pub(crate) PhantomData<T>);
7
8/// Handle to timers period event
9pub struct TimerPeriod<T>(pub(crate) PhantomData<T>);
10
11#[cfg(feature = "hrtim_v2")]
12macro_rules! impl_adc1234_trigger {
13    ($($t:ident: [$trait_:ident, $adcXr:ident]),*) => {$(
14        #[non_exhaustive]
15        pub struct $t;
16
17        impl $t {
18            pub fn enable_source<T: $trait_>(&mut self, _trigger: &T) {
19                let common = unsafe { &*pac::HRTIM_COMMON::ptr() };
20                unsafe {
21                    common.$adcXr().modify(|r, w| w.bits(r.bits() | T::BITS));
22                }
23            }
24        }
25    )*}
26}
27
28#[cfg(feature = "hrtim_v2")]
29macro_rules! impl_adc5678910_trigger {
30    ($($t:ident: [$trait_:ident, $adcXtrg:ident]),*) => {$(
31        #[non_exhaustive]
32        pub struct $t;
33
34        impl $t {
35            pub fn enable_source<T: $trait_>(&mut self, _trigger: &T) {
36                let common = unsafe { &*pac::HRTIM_COMMON::ptr() };
37                common
38                    .adcer()
39                    .modify(|_r, w| unsafe { w.$adcXtrg().bits(T::BITS as u8) });
40            }
41        }
42    )*}
43}
44
45#[cfg(feature = "hrtim_v2")]
46pub trait AdcTrigger13 {
47    const BITS: u32;
48}
49
50#[cfg(feature = "hrtim_v2")]
51pub trait AdcTrigger24 {
52    const BITS: u32;
53}
54
55#[cfg(feature = "hrtim_v2")]
56pub trait AdcTrigger579 {
57    const BITS: u32;
58}
59
60#[cfg(feature = "hrtim_v2")]
61pub trait AdcTrigger6810 {
62    const BITS: u32;
63}
64
65#[cfg(feature = "hrtim_v2")]
66impl_adc1234_trigger! {
67    AdcTrigger1: [AdcTrigger13, adc1r],
68    AdcTrigger2: [AdcTrigger24, adc2r],
69    AdcTrigger3: [AdcTrigger13, adc3r],
70    AdcTrigger4: [AdcTrigger24, adc4r]
71}
72
73#[cfg(feature = "hrtim_v2")]
74impl_adc5678910_trigger! {
75    AdcTrigger5: [AdcTrigger579,   adc5trg],
76    AdcTrigger6: [AdcTrigger6810,  adc6trg],
77    AdcTrigger7: [AdcTrigger579,   adc7trg],
78    AdcTrigger8: [AdcTrigger6810,  adc8trg],
79    AdcTrigger9: [AdcTrigger579,   adc9trg],
80    AdcTrigger10: [AdcTrigger6810, adc10trg]
81}