CuVoodoo STM32F1 firmware template
interrupt.c
Go to the documentation of this file.
1 /* This program is free software: you can redistribute it and/or modify
2  * it under the terms of the GNU General Public License as published by
3  * the Free Software Foundation, either version 3 of the License, or
4  * (at your option) any later version.
5  *
6  * This program is distributed in the hope that it will be useful,
7  * but WITHOUT ANY WARRANTY; without even the implied warranty of
8  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9  * GNU General Public License for more details.
10  *
11  * You should have received a copy of the GNU General Public License
12  * along with this program. If not, see <http://www.gnu.org/licenses/>.
13  */
19 #include "interrupt.h" // own definitions
20 
21 vector_table_entry_t interrupt_table[NVIC_IRQ_COUNT] = {0};
22 
24 static void isr_handler(void)
25 {
26  // get current IRQ number
27  uint8_t irq = 0;
28  if (NVIC_IABR(0)) {
29  irq = __builtin_ffs(NVIC_IABR(0))-1;
30  } else if (NVIC_IABR(1)) {
31  irq = __builtin_ffs(NVIC_IABR(1))+31;
32  } else if (NVIC_IABR(2)) {
33  irq = __builtin_ffs(NVIC_IABR(2))+64;
34  } else {
35  while (true);
36  }
37  // check if the it's a valid IRQ number
38  if (irq >= NVIC_IRQ_COUNT) {
39  while (true);
40  }
41  // run user provided ISR
42  if (interrupt_table[irq]) {
43  (*(void(*)(void))(interrupt_table[irq]))();
44  } else {
45  while (true);
46  }
47 }
48 
53 #pragma weak wwdg_isr = isr_handler
54 #pragma weak pvd_isr = isr_handler
55 #pragma weak tamper_isr = isr_handler
56 #pragma weak rtc_isr = isr_handler
57 #pragma weak flash_isr = isr_handler
58 #pragma weak rcc_isr = isr_handler
59 #pragma weak exti0_isr = isr_handler
60 #pragma weak exti1_isr = isr_handler
61 #pragma weak exti2_isr = isr_handler
62 #pragma weak exti3_isr = isr_handler
63 #pragma weak exti4_isr = isr_handler
64 #pragma weak dma1_channel1_isr = isr_handler
65 #pragma weak dma1_channel2_isr = isr_handler
66 #pragma weak dma1_channel3_isr = isr_handler
67 #pragma weak dma1_channel4_isr = isr_handler
68 #pragma weak dma1_channel5_isr = isr_handler
69 #pragma weak dma1_channel6_isr = isr_handler
70 #pragma weak dma1_channel7_isr = isr_handler
71 #pragma weak adc1_2_isr = isr_handler
72 #pragma weak usb_hp_can_tx_isr = isr_handler
73 #pragma weak usb_lp_can_rx0_isr = isr_handler
74 #pragma weak can_rx1_isr = isr_handler
75 #pragma weak can_sce_isr = isr_handler
76 #pragma weak exti9_5_isr = isr_handler
77 #pragma weak tim1_brk_isr = isr_handler
78 #pragma weak tim1_up_isr = isr_handler
79 #pragma weak tim1_trg_com_isr = isr_handler
80 #pragma weak tim1_cc_isr = isr_handler
81 #pragma weak tim2_isr = isr_handler
82 #pragma weak tim3_isr = isr_handler
83 #pragma weak tim4_isr = isr_handler
84 #pragma weak i2c1_ev_isr = isr_handler
85 #pragma weak i2c1_er_isr = isr_handler
86 #pragma weak i2c2_ev_isr = isr_handler
87 #pragma weak i2c2_er_isr = isr_handler
88 #pragma weak spi1_isr = isr_handler
89 #pragma weak spi2_isr = isr_handler
90 #pragma weak usart1_isr = isr_handler
91 #pragma weak usart2_isr = isr_handler
92 #pragma weak usart3_isr = isr_handler
93 #pragma weak exti15_10_isr = isr_handler
94 #pragma weak rtc_alarm_isr = isr_handler
95 #pragma weak usb_wakeup_isr = isr_handler
96 #pragma weak tim8_brk_isr = isr_handler
97 #pragma weak tim8_up_isr = isr_handler
98 #pragma weak tim8_trg_com_isr = isr_handler
99 #pragma weak tim8_cc_isr = isr_handler
100 #pragma weak adc3_isr = isr_handler
101 #pragma weak fsmc_isr = isr_handler
102 #pragma weak sdio_isr = isr_handler
103 #pragma weak tim5_isr = isr_handler
104 #pragma weak spi3_isr = isr_handler
105 #pragma weak uart4_isr = isr_handler
106 #pragma weak uart5_isr = isr_handler
107 #pragma weak tim6_isr = isr_handler
108 #pragma weak tim7_isr = isr_handler
109 #pragma weak dma2_channel1_isr = isr_handler
110 #pragma weak dma2_channel2_isr = isr_handler
111 #pragma weak dma2_channel3_isr = isr_handler
112 #pragma weak dma2_channel4_5_isr = isr_handler
113 #pragma weak dma2_channel5_isr = isr_handler
114 #pragma weak eth_isr = isr_handler
115 #pragma weak eth_wkup_isr = isr_handler
116 #pragma weak can2_tx_isr = isr_handler
117 #pragma weak can2_rx0_isr = isr_handler
118 #pragma weak can2_rx1_isr = isr_handler
119 #pragma weak can2_sce_isr = isr_handler
120 #pragma weak otg_fs_isr = isr_handler
vector_table_entry_t interrupt_table[NVIC_IRQ_COUNT]
table of interrupts which can set to user functions
Definition: interrupt.c:21
static void isr_handler(void)
handler intercepting interrupts and running the function provided in the table
Definition: interrupt.c:24
BusVoodoo runtime interrupt table.