embassy_stm32/lptim/
mod.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//! Low-power timer (LPTIM)

pub mod pwm;
pub mod timer;

use crate::rcc::RccPeripheral;

/// Timer channel.
#[cfg(any(lptim_v2a, lptim_v2b))]
mod channel;
#[cfg(any(lptim_v2a, lptim_v2b))]
pub use channel::Channel;

pin_trait!(OutputPin, BasicInstance);
pin_trait!(Channel1Pin, BasicInstance);
pin_trait!(Channel2Pin, BasicInstance);

pub(crate) trait SealedInstance: RccPeripheral {
    fn regs() -> crate::pac::lptim::Lptim;
}
pub(crate) trait SealedBasicInstance: RccPeripheral {}

/// LPTIM basic instance trait.
#[allow(private_bounds)]
pub trait BasicInstance: SealedBasicInstance + 'static {}

/// LPTIM instance trait.
#[allow(private_bounds)]
pub trait Instance: BasicInstance + SealedInstance + 'static {}

foreach_interrupt! {
    ($inst:ident, lptim, LPTIM, GLOBAL, $irq:ident) => {
        impl SealedInstance for crate::peripherals::$inst {
            fn regs() -> crate::pac::lptim::Lptim {
                crate::pac::$inst
            }
        }
        impl SealedBasicInstance for crate::peripherals::$inst {
        }
        impl BasicInstance for crate::peripherals::$inst {}
        impl Instance for crate::peripherals::$inst {}
    };
    ($inst:ident, lptim, LPTIM_BASIC, GLOBAL, $irq:ident) => {
        impl SealedBasicInstance for crate::peripherals::$inst {
        }
        impl BasicInstance for crate::peripherals::$inst {}
    };
}