1#[doc = r"Enumeration of all the interrupts."]
2#[cfg_attr(feature = "defmt", derive(defmt::Format))]
3#[derive(Copy, Clone, Debug, PartialEq, Eq)]
4#[repr(u16)]
5pub enum Interrupt {
6 #[doc = "0 - WIFI_MAC"]
7 WIFI_MAC = 0,
8 #[doc = "1 - WIFI_MAC_NMI"]
9 WIFI_MAC_NMI = 1,
10 #[doc = "2 - WIFI_PWR"]
11 WIFI_PWR = 2,
12 #[doc = "3 - WIFI_BB"]
13 WIFI_BB = 3,
14 #[doc = "4 - BT_MAC"]
15 BT_MAC = 4,
16 #[doc = "5 - BT_BB"]
17 BT_BB = 5,
18 #[doc = "6 - BT_BB_NMI"]
19 BT_BB_NMI = 6,
20 #[doc = "7 - LP_TIMER"]
21 LP_TIMER = 7,
22 #[doc = "8 - COEX"]
23 COEX = 8,
24 #[doc = "9 - BLE_TIMER"]
25 BLE_TIMER = 9,
26 #[doc = "10 - BLE_SEC"]
27 BLE_SEC = 10,
28 #[doc = "11 - I2C_MASTER"]
29 I2C_MASTER = 11,
30 #[doc = "12 - ZB_MAC"]
31 ZB_MAC = 12,
32 #[doc = "13 - PMU"]
33 PMU = 13,
34 #[doc = "14 - EFUSE"]
35 EFUSE = 14,
36 #[doc = "15 - LP_RTC_TIMER"]
37 LP_RTC_TIMER = 15,
38 #[doc = "16 - LP_UART"]
39 LP_UART = 16,
40 #[doc = "17 - LP_I2C"]
41 LP_I2C = 17,
42 #[doc = "18 - LP_WDT"]
43 LP_WDT = 18,
44 #[doc = "19 - LP_PERI_TIMEOUT"]
45 LP_PERI_TIMEOUT = 19,
46 #[doc = "20 - LP_APM_M0"]
47 LP_APM_M0 = 20,
48 #[doc = "21 - LP_APM_M1"]
49 LP_APM_M1 = 21,
50 #[doc = "22 - FROM_CPU_INTR0"]
51 FROM_CPU_INTR0 = 22,
52 #[doc = "23 - FROM_CPU_INTR1"]
53 FROM_CPU_INTR1 = 23,
54 #[doc = "24 - FROM_CPU_INTR2"]
55 FROM_CPU_INTR2 = 24,
56 #[doc = "25 - FROM_CPU_INTR3"]
57 FROM_CPU_INTR3 = 25,
58 #[doc = "26 - ASSIST_DEBUG"]
59 ASSIST_DEBUG = 26,
60 #[doc = "27 - TRACE"]
61 TRACE = 27,
62 #[doc = "28 - CACHE"]
63 CACHE = 28,
64 #[doc = "29 - CPU_PERI_TIMEOUT"]
65 CPU_PERI_TIMEOUT = 29,
66 #[doc = "30 - GPIO"]
67 GPIO = 30,
68 #[doc = "31 - GPIO_NMI"]
69 GPIO_NMI = 31,
70 #[doc = "32 - PAU"]
71 PAU = 32,
72 #[doc = "33 - HP_PERI_TIMEOUT"]
73 HP_PERI_TIMEOUT = 33,
74 #[doc = "34 - MODEM_PERI_TIMEOUT"]
75 MODEM_PERI_TIMEOUT = 34,
76 #[doc = "35 - HP_APM_M0"]
77 HP_APM_M0 = 35,
78 #[doc = "36 - HP_APM_M1"]
79 HP_APM_M1 = 36,
80 #[doc = "37 - HP_APM_M2"]
81 HP_APM_M2 = 37,
82 #[doc = "38 - HP_APM_M3"]
83 HP_APM_M3 = 38,
84 #[doc = "39 - LP_APM0"]
85 LP_APM0 = 39,
86 #[doc = "40 - MSPI"]
87 MSPI = 40,
88 #[doc = "41 - I2S0"]
89 I2S0 = 41,
90 #[doc = "42 - UHCI0"]
91 UHCI0 = 42,
92 #[doc = "43 - UART0"]
93 UART0 = 43,
94 #[doc = "44 - UART1"]
95 UART1 = 44,
96 #[doc = "45 - LEDC"]
97 LEDC = 45,
98 #[doc = "46 - TWAI0"]
99 TWAI0 = 46,
100 #[doc = "47 - TWAI1"]
101 TWAI1 = 47,
102 #[doc = "48 - USB_DEVICE"]
103 USB_DEVICE = 48,
104 #[doc = "49 - RMT"]
105 RMT = 49,
106 #[doc = "50 - I2C_EXT0"]
107 I2C_EXT0 = 50,
108 #[doc = "51 - TG0_T0_LEVEL"]
109 TG0_T0_LEVEL = 51,
110 #[doc = "52 - TG0_T1_LEVEL"]
111 TG0_T1_LEVEL = 52,
112 #[doc = "53 - TG0_WDT_LEVEL"]
113 TG0_WDT_LEVEL = 53,
114 #[doc = "54 - TG1_T0_LEVEL"]
115 TG1_T0_LEVEL = 54,
116 #[doc = "55 - TG1_T1_LEVEL"]
117 TG1_T1_LEVEL = 55,
118 #[doc = "56 - TG1_WDT_LEVEL"]
119 TG1_WDT_LEVEL = 56,
120 #[doc = "57 - SYSTIMER_TARGET0"]
121 SYSTIMER_TARGET0 = 57,
122 #[doc = "58 - SYSTIMER_TARGET1"]
123 SYSTIMER_TARGET1 = 58,
124 #[doc = "59 - SYSTIMER_TARGET2"]
125 SYSTIMER_TARGET2 = 59,
126 #[doc = "60 - APB_SARADC"]
127 APB_SARADC = 60,
128 #[doc = "61 - MCPWM0"]
129 MCPWM0 = 61,
130 #[doc = "62 - PCNT"]
131 PCNT = 62,
132 #[doc = "63 - PARL_IO"]
133 PARL_IO = 63,
134 #[doc = "64 - SLC0"]
135 SLC0 = 64,
136 #[doc = "65 - SLC1"]
137 SLC1 = 65,
138 #[doc = "66 - DMA_IN_CH0"]
139 DMA_IN_CH0 = 66,
140 #[doc = "67 - DMA_IN_CH1"]
141 DMA_IN_CH1 = 67,
142 #[doc = "68 - DMA_IN_CH2"]
143 DMA_IN_CH2 = 68,
144 #[doc = "69 - DMA_OUT_CH0"]
145 DMA_OUT_CH0 = 69,
146 #[doc = "70 - DMA_OUT_CH1"]
147 DMA_OUT_CH1 = 70,
148 #[doc = "71 - DMA_OUT_CH2"]
149 DMA_OUT_CH2 = 71,
150 #[doc = "72 - SPI2"]
151 SPI2 = 72,
152 #[doc = "73 - AES"]
153 AES = 73,
154 #[doc = "74 - SHA"]
155 SHA = 74,
156 #[doc = "75 - RSA"]
157 RSA = 75,
158 #[doc = "76 - ECC"]
159 ECC = 76,
160}
161#[doc = r" TryFromInterruptError"]
162#[cfg_attr(feature = "defmt", derive(defmt::Format))]
163#[derive(Debug, Copy, Clone)]
164pub struct TryFromInterruptError(());
165impl Interrupt {
166 #[doc = r" Attempt to convert a given value into an `Interrupt`"]
167 #[inline]
168 pub fn try_from(value: u8) -> Result<Self, TryFromInterruptError> {
169 match value {
170 0 => Ok(Interrupt::WIFI_MAC),
171 1 => Ok(Interrupt::WIFI_MAC_NMI),
172 2 => Ok(Interrupt::WIFI_PWR),
173 3 => Ok(Interrupt::WIFI_BB),
174 4 => Ok(Interrupt::BT_MAC),
175 5 => Ok(Interrupt::BT_BB),
176 6 => Ok(Interrupt::BT_BB_NMI),
177 7 => Ok(Interrupt::LP_TIMER),
178 8 => Ok(Interrupt::COEX),
179 9 => Ok(Interrupt::BLE_TIMER),
180 10 => Ok(Interrupt::BLE_SEC),
181 11 => Ok(Interrupt::I2C_MASTER),
182 12 => Ok(Interrupt::ZB_MAC),
183 13 => Ok(Interrupt::PMU),
184 14 => Ok(Interrupt::EFUSE),
185 15 => Ok(Interrupt::LP_RTC_TIMER),
186 16 => Ok(Interrupt::LP_UART),
187 17 => Ok(Interrupt::LP_I2C),
188 18 => Ok(Interrupt::LP_WDT),
189 19 => Ok(Interrupt::LP_PERI_TIMEOUT),
190 20 => Ok(Interrupt::LP_APM_M0),
191 21 => Ok(Interrupt::LP_APM_M1),
192 22 => Ok(Interrupt::FROM_CPU_INTR0),
193 23 => Ok(Interrupt::FROM_CPU_INTR1),
194 24 => Ok(Interrupt::FROM_CPU_INTR2),
195 25 => Ok(Interrupt::FROM_CPU_INTR3),
196 26 => Ok(Interrupt::ASSIST_DEBUG),
197 27 => Ok(Interrupt::TRACE),
198 28 => Ok(Interrupt::CACHE),
199 29 => Ok(Interrupt::CPU_PERI_TIMEOUT),
200 30 => Ok(Interrupt::GPIO),
201 31 => Ok(Interrupt::GPIO_NMI),
202 32 => Ok(Interrupt::PAU),
203 33 => Ok(Interrupt::HP_PERI_TIMEOUT),
204 34 => Ok(Interrupt::MODEM_PERI_TIMEOUT),
205 35 => Ok(Interrupt::HP_APM_M0),
206 36 => Ok(Interrupt::HP_APM_M1),
207 37 => Ok(Interrupt::HP_APM_M2),
208 38 => Ok(Interrupt::HP_APM_M3),
209 39 => Ok(Interrupt::LP_APM0),
210 40 => Ok(Interrupt::MSPI),
211 41 => Ok(Interrupt::I2S0),
212 42 => Ok(Interrupt::UHCI0),
213 43 => Ok(Interrupt::UART0),
214 44 => Ok(Interrupt::UART1),
215 45 => Ok(Interrupt::LEDC),
216 46 => Ok(Interrupt::TWAI0),
217 47 => Ok(Interrupt::TWAI1),
218 48 => Ok(Interrupt::USB_DEVICE),
219 49 => Ok(Interrupt::RMT),
220 50 => Ok(Interrupt::I2C_EXT0),
221 51 => Ok(Interrupt::TG0_T0_LEVEL),
222 52 => Ok(Interrupt::TG0_T1_LEVEL),
223 53 => Ok(Interrupt::TG0_WDT_LEVEL),
224 54 => Ok(Interrupt::TG1_T0_LEVEL),
225 55 => Ok(Interrupt::TG1_T1_LEVEL),
226 56 => Ok(Interrupt::TG1_WDT_LEVEL),
227 57 => Ok(Interrupt::SYSTIMER_TARGET0),
228 58 => Ok(Interrupt::SYSTIMER_TARGET1),
229 59 => Ok(Interrupt::SYSTIMER_TARGET2),
230 60 => Ok(Interrupt::APB_SARADC),
231 61 => Ok(Interrupt::MCPWM0),
232 62 => Ok(Interrupt::PCNT),
233 63 => Ok(Interrupt::PARL_IO),
234 64 => Ok(Interrupt::SLC0),
235 65 => Ok(Interrupt::SLC1),
236 66 => Ok(Interrupt::DMA_IN_CH0),
237 67 => Ok(Interrupt::DMA_IN_CH1),
238 68 => Ok(Interrupt::DMA_IN_CH2),
239 69 => Ok(Interrupt::DMA_OUT_CH0),
240 70 => Ok(Interrupt::DMA_OUT_CH1),
241 71 => Ok(Interrupt::DMA_OUT_CH2),
242 72 => Ok(Interrupt::SPI2),
243 73 => Ok(Interrupt::AES),
244 74 => Ok(Interrupt::SHA),
245 75 => Ok(Interrupt::RSA),
246 76 => Ok(Interrupt::ECC),
247 _ => Err(TryFromInterruptError(())),
248 }
249 }
250}
251#[cfg(feature = "rt")]
252#[macro_export]
253#[doc = r" Assigns a handler to an interrupt"]
254#[doc = r""]
255#[doc = r" This macro takes two arguments: the name of an interrupt and the path to the"]
256#[doc = r" function that will be used as the handler of that interrupt. That function"]
257#[doc = r" must have signature `fn()`."]
258#[doc = r""]
259#[doc = r" Optionally, a third argument may be used to declare interrupt local data."]
260#[doc = r" The handler will have exclusive access to these *local* variables on each"]
261#[doc = r" invocation. If the third argument is used then the signature of the handler"]
262#[doc = r" function must be `fn(&mut $NAME::Locals)` where `$NAME` is the first argument"]
263#[doc = r" passed to the macro."]
264#[doc = r""]
265#[doc = r" # Example"]
266#[doc = r""]
267#[doc = r" ``` ignore"]
268#[doc = r" interrupt!(TIM2, periodic);"]
269#[doc = r""]
270#[doc = r" fn periodic() {"]
271#[doc = r#" print!(".");"#]
272#[doc = r" }"]
273#[doc = r""]
274#[doc = r" interrupt!(TIM3, tick, locals: {"]
275#[doc = r" tick: bool = false;"]
276#[doc = r" });"]
277#[doc = r""]
278#[doc = r" fn tick(locals: &mut TIM3::Locals) {"]
279#[doc = r" locals.tick = !locals.tick;"]
280#[doc = r""]
281#[doc = r" if locals.tick {"]
282#[doc = r#" println!("Tick");"#]
283#[doc = r" } else {"]
284#[doc = r#" println!("Tock");"#]
285#[doc = r" }"]
286#[doc = r" }"]
287#[doc = r" ```"]
288macro_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 () ; } } }