d1_pac/
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 = "18 - UART0"]
6    UART0 = 18,
7    #[doc = "19 - UART1"]
8    UART1 = 19,
9    #[doc = "20 - UART2"]
10    UART2 = 20,
11    #[doc = "21 - UART3"]
12    UART3 = 21,
13    #[doc = "22 - UART4"]
14    UART4 = 22,
15    #[doc = "23 - UART5"]
16    UART5 = 23,
17    #[doc = "25 - TWI0"]
18    TWI0 = 25,
19    #[doc = "26 - TWI1"]
20    TWI1 = 26,
21    #[doc = "27 - TWI2"]
22    TWI2 = 27,
23    #[doc = "28 - TWI3"]
24    TWI3 = 28,
25    #[doc = "31 - SPI0"]
26    SPI0 = 31,
27    #[doc = "32 - SPI1"]
28    SPI1 = 32,
29    #[doc = "34 - PWM"]
30    PWM = 34,
31    #[doc = "35 - IR_TX"]
32    IR_TX = 35,
33    #[doc = "36 - LEDC"]
34    LEDC = 36,
35    #[doc = "39 - OWA"]
36    OWA = 39,
37    #[doc = "40 - DMIC"]
38    DMIC = 40,
39    #[doc = "41 - AUDIO_CODEC"]
40    AUDIO_CODEC = 41,
41    #[doc = "42 - I2S_PCM0"]
42    I2S_PCM0 = 42,
43    #[doc = "43 - I2S_PCM1"]
44    I2S_PCM1 = 43,
45    #[doc = "44 - I2S_PCM2"]
46    I2S_PCM2 = 44,
47    #[doc = "45 - USB0_DEVICE"]
48    USB0_DEVICE = 45,
49    #[doc = "46 - USB0_EHCI"]
50    USB0_EHCI = 46,
51    #[doc = "47 - USB0_OHCI"]
52    USB0_OHCI = 47,
53    #[doc = "49 - USB1_EHCI"]
54    USB1_EHCI = 49,
55    #[doc = "50 - USB1_OHCI"]
56    USB1_OHCI = 50,
57    #[doc = "56 - SMHC0"]
58    SMHC0 = 56,
59    #[doc = "57 - SMHC1"]
60    SMHC1 = 57,
61    #[doc = "58 - SMHC2"]
62    SMHC2 = 58,
63    #[doc = "62 - EMAC"]
64    EMAC = 62,
65    #[doc = "66 - DMAC_NS"]
66    DMAC_NS = 66,
67    #[doc = "68 - CE_NS"]
68    CE_NS = 68,
69    #[doc = "70 - SPINLOCK"]
70    SPINLOCK = 70,
71    #[doc = "71 - HSTIMER0"]
72    HSTIMER0 = 71,
73    #[doc = "72 - HSTIMER1"]
74    HSTIMER1 = 72,
75    #[doc = "73 - GPADC"]
76    GPADC = 73,
77    #[doc = "74 - THS"]
78    THS = 74,
79    #[doc = "75 - TIMER0"]
80    TIMER0 = 75,
81    #[doc = "76 - TIMER1"]
82    TIMER1 = 76,
83    #[doc = "77 - LRADC"]
84    LRADC = 77,
85    #[doc = "78 - TPADC"]
86    TPADC = 78,
87    #[doc = "79 - WATCHDOG"]
88    WATCHDOG = 79,
89    #[doc = "80 - IOMMU"]
90    IOMMU = 80,
91    #[doc = "85 - GPIOB_NS"]
92    GPIOB_NS = 85,
93    #[doc = "87 - GPIOC_NS"]
94    GPIOC_NS = 87,
95    #[doc = "89 - GPIOD_NS"]
96    GPIOD_NS = 89,
97    #[doc = "91 - GPIOE_NS"]
98    GPIOE_NS = 91,
99    #[doc = "93 - GPIOF_NS"]
100    GPIOF_NS = 93,
101    #[doc = "111 - CSI_DMA0"]
102    CSI_DMA0 = 111,
103    #[doc = "112 - CSI_DMA1"]
104    CSI_DMA1 = 112,
105    #[doc = "122 - CSI_TOP_PKT"]
106    CSI_TOP_PKT = 122,
107    #[doc = "123 - TVD"]
108    TVD = 123,
109    #[doc = "140 - DSP_MBOX_RV_W"]
110    DSP_MBOX_RV_W = 140,
111    #[doc = "144 - RV_MBOX_RV"]
112    RV_MBOX_RV = 144,
113    #[doc = "145 - RV_MBOX_DSP"]
114    RV_MBOX_DSP = 145,
115    #[doc = "167 - IR_RX"]
116    IR_RX = 167,
117}
118#[doc = r" TryFromInterruptError"]
119#[derive(Debug, Copy, Clone)]
120pub struct TryFromInterruptError(());
121impl Interrupt {
122    #[doc = r" Attempt to convert a given value into an `Interrupt`"]
123    #[inline]
124    pub fn try_from(value: u8) -> Result<Self, TryFromInterruptError> {
125        match value {
126            18 => Ok(Interrupt::UART0),
127            19 => Ok(Interrupt::UART1),
128            20 => Ok(Interrupt::UART2),
129            21 => Ok(Interrupt::UART3),
130            22 => Ok(Interrupt::UART4),
131            23 => Ok(Interrupt::UART5),
132            25 => Ok(Interrupt::TWI0),
133            26 => Ok(Interrupt::TWI1),
134            27 => Ok(Interrupt::TWI2),
135            28 => Ok(Interrupt::TWI3),
136            31 => Ok(Interrupt::SPI0),
137            32 => Ok(Interrupt::SPI1),
138            34 => Ok(Interrupt::PWM),
139            35 => Ok(Interrupt::IR_TX),
140            36 => Ok(Interrupt::LEDC),
141            39 => Ok(Interrupt::OWA),
142            40 => Ok(Interrupt::DMIC),
143            41 => Ok(Interrupt::AUDIO_CODEC),
144            42 => Ok(Interrupt::I2S_PCM0),
145            43 => Ok(Interrupt::I2S_PCM1),
146            44 => Ok(Interrupt::I2S_PCM2),
147            45 => Ok(Interrupt::USB0_DEVICE),
148            46 => Ok(Interrupt::USB0_EHCI),
149            47 => Ok(Interrupt::USB0_OHCI),
150            49 => Ok(Interrupt::USB1_EHCI),
151            50 => Ok(Interrupt::USB1_OHCI),
152            56 => Ok(Interrupt::SMHC0),
153            57 => Ok(Interrupt::SMHC1),
154            58 => Ok(Interrupt::SMHC2),
155            62 => Ok(Interrupt::EMAC),
156            66 => Ok(Interrupt::DMAC_NS),
157            68 => Ok(Interrupt::CE_NS),
158            70 => Ok(Interrupt::SPINLOCK),
159            71 => Ok(Interrupt::HSTIMER0),
160            72 => Ok(Interrupt::HSTIMER1),
161            73 => Ok(Interrupt::GPADC),
162            74 => Ok(Interrupt::THS),
163            75 => Ok(Interrupt::TIMER0),
164            76 => Ok(Interrupt::TIMER1),
165            77 => Ok(Interrupt::LRADC),
166            78 => Ok(Interrupt::TPADC),
167            79 => Ok(Interrupt::WATCHDOG),
168            80 => Ok(Interrupt::IOMMU),
169            85 => Ok(Interrupt::GPIOB_NS),
170            87 => Ok(Interrupt::GPIOC_NS),
171            89 => Ok(Interrupt::GPIOD_NS),
172            91 => Ok(Interrupt::GPIOE_NS),
173            93 => Ok(Interrupt::GPIOF_NS),
174            111 => Ok(Interrupt::CSI_DMA0),
175            112 => Ok(Interrupt::CSI_DMA1),
176            122 => Ok(Interrupt::CSI_TOP_PKT),
177            123 => Ok(Interrupt::TVD),
178            140 => Ok(Interrupt::DSP_MBOX_RV_W),
179            144 => Ok(Interrupt::RV_MBOX_RV),
180            145 => Ok(Interrupt::RV_MBOX_DSP),
181            167 => Ok(Interrupt::IR_RX),
182            _ => Err(TryFromInterruptError(())),
183        }
184    }
185}
186#[cfg(feature = "rt")]
187#[macro_export]
188#[doc = r" Assigns a handler to an interrupt"]
189#[doc = r""]
190#[doc = r" This macro takes two arguments: the name of an interrupt and the path to the"]
191#[doc = r" function that will be used as the handler of that interrupt. That function"]
192#[doc = r" must have signature `fn()`."]
193#[doc = r""]
194#[doc = r" Optionally, a third argument may be used to declare interrupt local data."]
195#[doc = r" The handler will have exclusive access to these *local* variables on each"]
196#[doc = r" invocation. If the third argument is used then the signature of the handler"]
197#[doc = r" function must be `fn(&mut $NAME::Locals)` where `$NAME` is the first argument"]
198#[doc = r" passed to the macro."]
199#[doc = r""]
200#[doc = r" # Example"]
201#[doc = r""]
202#[doc = r" ``` ignore"]
203#[doc = r" interrupt!(TIM2, periodic);"]
204#[doc = r""]
205#[doc = r" fn periodic() {"]
206#[doc = r#"     print!(".");"#]
207#[doc = r" }"]
208#[doc = r""]
209#[doc = r" interrupt!(TIM3, tick, locals: {"]
210#[doc = r"     tick: bool = false;"]
211#[doc = r" });"]
212#[doc = r""]
213#[doc = r" fn tick(locals: &mut TIM3::Locals) {"]
214#[doc = r"     locals.tick = !locals.tick;"]
215#[doc = r""]
216#[doc = r"     if locals.tick {"]
217#[doc = r#"         println!("Tick");"#]
218#[doc = r"     } else {"]
219#[doc = r#"         println!("Tock");"#]
220#[doc = r"     }"]
221#[doc = r" }"]
222#[doc = r" ```"]
223macro_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 () ; } } }