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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
#[cfg(feature = "rt")]
extern "C" {
fn WWDG_IRQ();
fn PVD_IRQ();
fn TAMP_STAMP();
fn RTC_WKUP();
fn FLASH_IRQ();
fn RCC_IRQ();
fn EXTI0();
fn EXTI1();
fn EXTI2_TSC();
fn EXTI3();
fn EXTI4();
fn DMA1_CH1_IRQ();
fn DMA1_CH2_IRQ();
fn DMA1_CH3_IRQ();
fn DMA1_CH4_IRQ();
fn DMA1_CH5_IRQ();
fn DMA1_CH6_IRQ();
fn DMA1_CH7_IRQ();
fn ADC1_2();
fn CAN_TX_IRQ();
fn CAN_RXD_IRQ();
fn CAN_RXI_IRQ();
fn CAN_SCE_IRQ();
fn EXTI9_5();
fn TIM15_IRQ();
fn TIM16_IRQ();
fn TIM17_IRQ();
fn TIM18_DAC3_IRQ();
fn TIM2_IRQ();
fn TIM3_IRQ();
fn TIM4_IRQ();
fn I2C1_EV_IRQ();
fn I2C1_ER_IRQ();
fn I2C2_EV_IRQ();
fn I2C2_ER_IRQ();
fn SPI1_IRQ();
fn SPI2_IRQ();
fn USART1_IRQ();
fn USART2_IRQ();
fn USART3_IRQ();
fn EXTI15_10_IRQ();
fn RTC_ALARM_IT_IRQ();
fn TIM12_IRQ();
fn TIM13_IRQ();
fn TIM14_IRQ();
fn TIM8_CC();
fn ADC3();
fn FMC();
fn TIM5_IRQ();
fn SPI3_IRQ();
fn UART4_EXTI34();
fn UART5_EXTI35();
fn TIM6_DAC1();
fn TIM7_IRQ();
fn DMA2_Channel1();
fn DMA2_Channel2();
fn DMA2_Channel3();
fn DMA2_Channel4();
fn DMA2_Channel5();
fn ADC_SD1_IRQ();
fn ADC_SD2_IRQ();
fn ADC_SD3_IRQ();
fn COMP1_2_3();
fn COMP4_5_6();
fn COMP7();
fn I2C3_EV();
fn I2C3_ER();
fn USB_HP_IRQ();
fn USB_LP_IRQ();
fn USB_WAKEUP_IRQ();
fn TIM20_BRK();
fn TIM19_IRQ();
fn TIM20_TRG_COM();
fn TIM20_CC();
fn FPU();
}
#[doc(hidden)]
pub union Vector {
_handler: unsafe extern "C" fn(),
_reserved: u32,
}
#[cfg(feature = "rt")]
#[doc(hidden)]
#[link_section = ".vector_table.interrupts"]
#[no_mangle]
pub static __INTERRUPTS: [Vector; 82] = [
Vector { _handler: WWDG_IRQ },
Vector { _handler: PVD_IRQ },
Vector {
_handler: TAMP_STAMP,
},
Vector { _handler: RTC_WKUP },
Vector {
_handler: FLASH_IRQ,
},
Vector { _handler: RCC_IRQ },
Vector { _handler: EXTI0 },
Vector { _handler: EXTI1 },
Vector {
_handler: EXTI2_TSC,
},
Vector { _handler: EXTI3 },
Vector { _handler: EXTI4 },
Vector {
_handler: DMA1_CH1_IRQ,
},
Vector {
_handler: DMA1_CH2_IRQ,
},
Vector {
_handler: DMA1_CH3_IRQ,
},
Vector {
_handler: DMA1_CH4_IRQ,
},
Vector {
_handler: DMA1_CH5_IRQ,
},
Vector {
_handler: DMA1_CH6_IRQ,
},
Vector {
_handler: DMA1_CH7_IRQ,
},
Vector { _handler: ADC1_2 },
Vector {
_handler: CAN_TX_IRQ,
},
Vector {
_handler: CAN_RXD_IRQ,
},
Vector {
_handler: CAN_RXI_IRQ,
},
Vector {
_handler: CAN_SCE_IRQ,
},
Vector { _handler: EXTI9_5 },
Vector {
_handler: TIM15_IRQ,
},
Vector {
_handler: TIM16_IRQ,
},
Vector {
_handler: TIM17_IRQ,
},
Vector {
_handler: TIM18_DAC3_IRQ,
},
Vector { _handler: TIM2_IRQ },
Vector { _handler: TIM3_IRQ },
Vector { _handler: TIM4_IRQ },
Vector {
_handler: I2C1_EV_IRQ,
},
Vector {
_handler: I2C1_ER_IRQ,
},
Vector {
_handler: I2C2_EV_IRQ,
},
Vector {
_handler: I2C2_ER_IRQ,
},
Vector { _handler: SPI1_IRQ },
Vector { _handler: SPI2_IRQ },
Vector {
_handler: USART1_IRQ,
},
Vector {
_handler: USART2_IRQ,
},
Vector {
_handler: USART3_IRQ,
},
Vector {
_handler: EXTI15_10_IRQ,
},
Vector {
_handler: RTC_ALARM_IT_IRQ,
},
Vector { _reserved: 0 },
Vector {
_handler: TIM12_IRQ,
},
Vector {
_handler: TIM13_IRQ,
},
Vector {
_handler: TIM14_IRQ,
},
Vector { _handler: TIM8_CC },
Vector { _handler: ADC3 },
Vector { _handler: FMC },
Vector { _reserved: 0 },
Vector { _handler: TIM5_IRQ },
Vector { _handler: SPI3_IRQ },
Vector {
_handler: UART4_EXTI34,
},
Vector {
_handler: UART5_EXTI35,
},
Vector {
_handler: TIM6_DAC1,
},
Vector { _handler: TIM7_IRQ },
Vector {
_handler: DMA2_Channel1,
},
Vector {
_handler: DMA2_Channel2,
},
Vector {
_handler: DMA2_Channel3,
},
Vector {
_handler: DMA2_Channel4,
},
Vector {
_handler: DMA2_Channel5,
},
Vector {
_handler: ADC_SD1_IRQ,
},
Vector {
_handler: ADC_SD2_IRQ,
},
Vector {
_handler: ADC_SD3_IRQ,
},
Vector {
_handler: COMP1_2_3,
},
Vector {
_handler: COMP4_5_6,
},
Vector { _handler: COMP7 },
Vector { _reserved: 0 },
Vector { _reserved: 0 },
Vector { _reserved: 0 },
Vector { _reserved: 0 },
Vector { _reserved: 0 },
Vector { _handler: I2C3_EV },
Vector { _handler: I2C3_ER },
Vector {
_handler: USB_HP_IRQ,
},
Vector {
_handler: USB_LP_IRQ,
},
Vector {
_handler: USB_WAKEUP_IRQ,
},
Vector {
_handler: TIM20_BRK,
},
Vector {
_handler: TIM19_IRQ,
},
Vector {
_handler: TIM20_TRG_COM,
},
Vector { _handler: TIM20_CC },
Vector { _handler: FPU },
];
/// Available interrupts for this device
#[repr(u16)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
#[allow(non_camel_case_types)]
pub enum Interrupt {
/// 0: Window Watchdog interrupt
WWDG_IRQ = 0,
/// 1: Power voltage detector through EXTI line detection interrupt
PVD_IRQ = 1,
/// 2: Tamper and TimeStamp interrupts
TAMP_STAMP = 2,
/// 3: RTC Wakeup interrupt through the EXTI line
RTC_WKUP = 3,
/// 4: Flash global interrupt
FLASH_IRQ = 4,
/// 5: RCC global interrupt
RCC_IRQ = 5,
/// 6: EXTI Line0 interrupt
EXTI0 = 6,
/// 7: EXTI Line3 interrupt
EXTI1 = 7,
/// 8: EXTI Line2 and Touch sensing interrupts
EXTI2_TSC = 8,
/// 9: EXTI Line3 interrupt
EXTI3 = 9,
/// 10: EXTI Line4 interrupt
EXTI4 = 10,
/// 11: DMA1 channel 1 interrupt
DMA1_CH1_IRQ = 11,
/// 12: DMA1 channel 2 interrupt
DMA1_CH2_IRQ = 12,
/// 13: DMA1 channel 3 interrupt
DMA1_CH3_IRQ = 13,
/// 14: DMA1 channel 4 interrupt
DMA1_CH4_IRQ = 14,
/// 15: DMA1 channel 5 interrupt
DMA1_CH5_IRQ = 15,
/// 16: DMA1 channel 6 interrupt
DMA1_CH6_IRQ = 16,
/// 17: DMA1 channel 7 interrupt
DMA1_CH7_IRQ = 17,
/// 18: ADC1 and ADC2 global interrupt
ADC1_2 = 18,
/// 19: USB high priority/CAN_TX interrupt
CAN_TX_IRQ = 19,
/// 20: USB low priority/CAN_RXD interrupt
CAN_RXD_IRQ = 20,
/// 21: CAN_RXI interrupt
CAN_RXI_IRQ = 21,
/// 22: CAN_SCE interrupt
CAN_SCE_IRQ = 22,
/// 23: EXTI Line5 to Line9 interrupts
EXTI9_5 = 23,
/// 24: Timer 15 global interrupt
TIM15_IRQ = 24,
/// 25: Timer 16 global interrupt
TIM16_IRQ = 25,
/// 26: Timer 17 global interrupt
TIM17_IRQ = 26,
/// 27: Timer 18 global interrupt/DAC3 underrun interrupt
TIM18_DAC3_IRQ = 27,
/// 28: Timer 2 global interrupt
TIM2_IRQ = 28,
/// 29: Timer 3 global interrupt
TIM3_IRQ = 29,
/// 30: Timer 4 global interrupt
TIM4_IRQ = 30,
/// 31: I2C1_EV global interrupt/EXTI Line\[3:2\] interrupts
I2C1_EV_IRQ = 31,
/// 32: I2C1_ER
I2C1_ER_IRQ = 32,
/// 33: I2C2_EV global interrupt/EXTI Line\[4:2\] interrupts
I2C2_EV_IRQ = 33,
/// 34: I2C2_ER
I2C2_ER_IRQ = 34,
/// 35: SPI1 global interrupt
SPI1_IRQ = 35,
/// 36: SPI2 global interrupt
SPI2_IRQ = 36,
/// 37: USART1 global interrupt/EXTI25 (USART1 wakeup event)
USART1_IRQ = 37,
/// 38: USART2 global interrupt/EXTI26 (USART1 wakeup event)
USART2_IRQ = 38,
/// 39: USART3 global interrupt/EXTI28 (USART1 wakeup event)
USART3_IRQ = 39,
/// 40: EXTI Line\[15:10\] interrupts
EXTI15_10_IRQ = 40,
/// 41: RTC alarm interrupt
RTC_ALARM_IT_IRQ = 41,
/// 43: Timer 12 global interrupt
TIM12_IRQ = 43,
/// 44: Timer 13 global interrupt
TIM13_IRQ = 44,
/// 45: Timer 14 global interrupt
TIM14_IRQ = 45,
/// 46: TIM8 capture compare interrupt
TIM8_CC = 46,
/// 47: ADC3 global interrupt
ADC3 = 47,
/// 48: FSMC global interrupt
FMC = 48,
/// 50: Timer 5 global interrupt
TIM5_IRQ = 50,
/// 51: SPI3 global interrupt
SPI3_IRQ = 51,
/// 52: UART4 global and EXTI Line 34 interrupts
UART4_EXTI34 = 52,
/// 53: UART5 global and EXTI Line 35 interrupts
UART5_EXTI35 = 53,
/// 54: TIM6 global, DAC1 Cahnnel1 and Cahnnel2 underrun error Interrupts
TIM6_DAC1 = 54,
/// 55: Timer 7 global interrupt
TIM7_IRQ = 55,
/// 56: DMA2 channel1 global interrupt
DMA2_Channel1 = 56,
/// 57: DMA2 channel2 global interrupt
DMA2_Channel2 = 57,
/// 58: DMA2 channel3 global interrupt
DMA2_Channel3 = 58,
/// 59: DMA2 channel4 global interrupt
DMA2_Channel4 = 59,
/// 60: DMA2 channel5 global interrupt
DMA2_Channel5 = 60,
/// 61: ADC sigma delta 1 (SDADC1) global interrupt
ADC_SD1_IRQ = 61,
/// 62: ADC sigma delta 2 (SDADC2) global interrupt
ADC_SD2_IRQ = 62,
/// 63: ADC sigma delta 3 (SDADC3) global interrupt
ADC_SD3_IRQ = 63,
/// 64: COMP1_2_3 interrupt combined with EXTI lines 21, 22, 29
COMP1_2_3 = 64,
/// 65: COMP4_5_6 interrupt combined with EXTI lines 30, 31, 32
COMP4_5_6 = 65,
/// 66: COMP7 interrupt combined with EXTI line 33
COMP7 = 66,
/// 72: I2C3 Event interrupt
I2C3_EV = 72,
/// 73: I2C3 Error interrupt
I2C3_ER = 73,
/// 74: USB high priority interrupt
USB_HP_IRQ = 74,
/// 75: USB low priority interrupt
USB_LP_IRQ = 75,
/// 76: USB wakeup interrupt
USB_WAKEUP_IRQ = 76,
/// 77: TIM20 Break interrupt
TIM20_BRK = 77,
/// 78: Timer 19 global interrupt
TIM19_IRQ = 78,
/// 79: TIM20 Trigger and Commutation interrupt
TIM20_TRG_COM = 79,
/// 80: TIM20 Capture Compare interrupt
TIM20_CC = 80,
/// 81: Floating point unit interrupt
FPU = 81,
}
unsafe impl external_cortex_m::interrupt::InterruptNumber for Interrupt {
#[inline(always)]
fn number(self) -> u16 {
self as u16
}
}