moondancer_pac/generated/
interrupt.rs1#[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 () ; } } }