moondancer_pac/generated/
interrupt.rs

1#[doc = r"Enumeration of all the interrupts."]
2#[derive(Copy, Clone, Debug, PartialEq, Eq)]
3#[repr(u16)]
4pub enum Interrupt {
5    #[doc = "0 - timer0"]
6    TIMER0 = 0,
7    #[doc = "1 - timer1"]
8    TIMER1 = 1,
9    #[doc = "2 - usb0"]
10    USB0 = 2,
11    #[doc = "3 - usb0_ep_control"]
12    USB0_EP_CONTROL = 3,
13    #[doc = "4 - usb0_ep_in"]
14    USB0_EP_IN = 4,
15    #[doc = "5 - usb0_ep_out"]
16    USB0_EP_OUT = 5,
17    #[doc = "6 - usb1"]
18    USB1 = 6,
19    #[doc = "7 - usb1_ep_control"]
20    USB1_EP_CONTROL = 7,
21    #[doc = "8 - usb1_ep_in"]
22    USB1_EP_IN = 8,
23    #[doc = "9 - usb1_ep_out"]
24    USB1_EP_OUT = 9,
25    #[doc = "10 - usb2"]
26    USB2 = 10,
27    #[doc = "11 - usb2_ep_control"]
28    USB2_EP_CONTROL = 11,
29    #[doc = "12 - usb2_ep_in"]
30    USB2_EP_IN = 12,
31    #[doc = "13 - usb2_ep_out"]
32    USB2_EP_OUT = 13,
33}
34#[doc = r" TryFromInterruptError"]
35#[derive(Debug, Copy, Clone)]
36pub struct TryFromInterruptError(());
37impl Interrupt {
38    #[doc = r" Attempt to convert a given value into an `Interrupt`"]
39    #[inline]
40    pub fn try_from(value: u8) -> Result<Self, TryFromInterruptError> {
41        match value {
42            0 => Ok(Interrupt::TIMER0),
43            1 => Ok(Interrupt::TIMER1),
44            2 => Ok(Interrupt::USB0),
45            3 => Ok(Interrupt::USB0_EP_CONTROL),
46            4 => Ok(Interrupt::USB0_EP_IN),
47            5 => Ok(Interrupt::USB0_EP_OUT),
48            6 => Ok(Interrupt::USB1),
49            7 => Ok(Interrupt::USB1_EP_CONTROL),
50            8 => Ok(Interrupt::USB1_EP_IN),
51            9 => Ok(Interrupt::USB1_EP_OUT),
52            10 => Ok(Interrupt::USB2),
53            11 => Ok(Interrupt::USB2_EP_CONTROL),
54            12 => Ok(Interrupt::USB2_EP_IN),
55            13 => Ok(Interrupt::USB2_EP_OUT),
56            _ => Err(TryFromInterruptError(())),
57        }
58    }
59}
60#[cfg(feature = "rt")]
61#[macro_export]
62#[doc = r" Assigns a handler to an interrupt"]
63#[doc = r""]
64#[doc = r" This macro takes two arguments: the name of an interrupt and the path to the"]
65#[doc = r" function that will be used as the handler of that interrupt. That function"]
66#[doc = r" must have signature `fn()`."]
67#[doc = r""]
68#[doc = r" Optionally, a third argument may be used to declare interrupt local data."]
69#[doc = r" The handler will have exclusive access to these *local* variables on each"]
70#[doc = r" invocation. If the third argument is used then the signature of the handler"]
71#[doc = r" function must be `fn(&mut $NAME::Locals)` where `$NAME` is the first argument"]
72#[doc = r" passed to the macro."]
73#[doc = r""]
74#[doc = r" # Example"]
75#[doc = r""]
76#[doc = r" ``` ignore"]
77#[doc = r" interrupt!(TIM2, periodic);"]
78#[doc = r""]
79#[doc = r" fn periodic() {"]
80#[doc = r#"     print!(".");"#]
81#[doc = r" }"]
82#[doc = r""]
83#[doc = r" interrupt!(TIM3, tick, locals: {"]
84#[doc = r"     tick: bool = false;"]
85#[doc = r" });"]
86#[doc = r""]
87#[doc = r" fn tick(locals: &mut TIM3::Locals) {"]
88#[doc = r"     locals.tick = !locals.tick;"]
89#[doc = r""]
90#[doc = r"     if locals.tick {"]
91#[doc = r#"         println!("Tick");"#]
92#[doc = r"     } else {"]
93#[doc = r#"         println!("Tock");"#]
94#[doc = r"     }"]
95#[doc = r" }"]
96#[doc = r" ```"]
97macro_rules ! interrupt { ($ NAME : ident , $ path : path , locals : { $ ($ lvar : ident : $ lty : ty = $ lval : expr ;) * }) => { # [allow (non_snake_case)] mod $ NAME { pub struct Locals { $ (pub $ lvar : $ lty ,) * } } # [allow (non_snake_case)] # [no_mangle] pub extern "C" fn $ NAME () { let _ = $ crate :: interrupt :: Interrupt :: $ NAME ; static mut LOCALS : self :: $ NAME :: Locals = self :: $ NAME :: Locals { $ ($ lvar : $ lval ,) * } ; let f : fn (& mut self :: $ NAME :: Locals) = $ path ; f (unsafe { & mut LOCALS }) ; } } ; ($ NAME : ident , $ path : path) => { # [allow (non_snake_case)] # [no_mangle] pub extern "C" fn $ NAME () { let _ = $ crate :: interrupt :: Interrupt :: $ NAME ; let f : fn () = $ path ; f () ; } } }