summaryrefslogtreecommitdiff
path: root/Project/src/platform/stm32f0-gcc/startup/handlers_cm.c
blob: 95b59a94b40682c1376e8c91a9c8b6cf7562f5ba (plain)
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
/**
 * Handlers setup code for Cortex-M.
 */

typedef void (*ptr_func_t)();

// Undefined handler is pointing to this function, this stop MCU.
// This function name must by not mangled, so must be C,
// because alias("..") is working only with C code
void __stop() { while (1); }

// Handlers for Cortex-M core.
// These handler are with attribute 'weak' and can be overwritten
// by non-weak function, default is __stop() function
__attribute__((weak, alias("__stop"))) void RESET_handler();
__attribute__((weak, alias("__stop"))) void NMI_handler();
__attribute__((weak, alias("__stop"))) void HARDFAULT_handler();
__attribute__((weak, alias("__stop"))) void MEMMANAGE_handler();
__attribute__((weak, alias("__stop"))) void BUSFAULT_handler();
__attribute__((weak, alias("__stop"))) void USAGEFAULT_handler();
__attribute__((weak, alias("__stop"))) void SVCALL_handler();
__attribute__((weak, alias("__stop"))) void DEBUGMONITOR_handler();
__attribute__((weak, alias("__stop"))) void PENDSV_handler();
__attribute__((weak, alias("__stop"))) void SYSTICK_handler();

// Handlers for peripherals' interrupts
__attribute__((weak, alias("__stop"))) void WWDG_handler();
__attribute__((weak, alias("__stop"))) void PVD_VDDIO2_handler();
__attribute__((weak, alias("__stop"))) void RTC_handler();
__attribute__((weak, alias("__stop"))) void FLASH_handler();
__attribute__((weak, alias("__stop"))) void RCC_CRS_handler();
__attribute__((weak, alias("__stop"))) void EXTI0_1_handler();
__attribute__((weak, alias("__stop"))) void EXTI2_3_handler();
__attribute__((weak, alias("__stop"))) void EXTI4_15_handler();
__attribute__((weak, alias("__stop"))) void TSC_handler();
__attribute__((weak, alias("__stop"))) void DMA_0064_handler();
__attribute__((weak, alias("__stop"))) void DMA_DMA2_0068_handler();
__attribute__((weak, alias("__stop"))) void DMA_DMA2_006C_handler();
__attribute__((weak, alias("__stop"))) void ADC_COMP_handler();
__attribute__((weak, alias("__stop"))) void TIM1_0074_handler();
__attribute__((weak, alias("__stop"))) void TIM1_0078_handler();
__attribute__((weak, alias("__stop"))) void TIM2_handler();
__attribute__((weak, alias("__stop"))) void TIM3_handler();
__attribute__((weak, alias("__stop"))) void TIM6_DAC_handler();
__attribute__((weak, alias("__stop"))) void TIM7_handler();
__attribute__((weak, alias("__stop"))) void TIM14_handler();
__attribute__((weak, alias("__stop"))) void TIM15_handler();
__attribute__((weak, alias("__stop"))) void TIM16_handler();
__attribute__((weak, alias("__stop"))) void TIM17_handler();
__attribute__((weak, alias("__stop"))) void I2C1_handler();
__attribute__((weak, alias("__stop"))) void I2C2_handler();
__attribute__((weak, alias("__stop"))) void SPI1_handler();
__attribute__((weak, alias("__stop"))) void SPI2_handler();
__attribute__((weak, alias("__stop"))) void USART1_handler();
__attribute__((weak, alias("__stop"))) void USART2_handler();
__attribute__((weak, alias("__stop"))) void USART_00B3_handler();
__attribute__((weak, alias("__stop"))) void CEC_CAN_handler();
__attribute__((weak, alias("__stop"))) void USB_handler();

// Dummy handler (for unused vectors)
__attribute__((weak, alias("__stop"))) void DUMMY_handler();

// Vector table for handlers
// This array will be placed in ".vectors" section defined in linker script.
__attribute__((section(".vectors"), used)) ptr_func_t __isr_vectors[] = {
    RESET_handler,
    NMI_handler,
    HARDFAULT_handler,
    MEMMANAGE_handler,
    BUSFAULT_handler,
    USAGEFAULT_handler,
    DUMMY_handler,
    DUMMY_handler,
    DUMMY_handler,
    DUMMY_handler,
    SVCALL_handler,
    DEBUGMONITOR_handler,
    DUMMY_handler,
    PENDSV_handler,
    SYSTICK_handler,
    WWDG_handler,
    PVD_VDDIO2_handler,
    RTC_handler,
    FLASH_handler,
    RCC_CRS_handler,
    EXTI0_1_handler,
    EXTI2_3_handler,
    EXTI4_15_handler,
    TSC_handler,
    DMA_0064_handler,
    DMA_DMA2_0068_handler,
    DMA_DMA2_006C_handler,
    ADC_COMP_handler,
    TIM1_0074_handler,
    TIM1_0078_handler,
    TIM2_handler,
    TIM3_handler,
    TIM6_DAC_handler,
    TIM7_handler,
    TIM14_handler,
    TIM15_handler,
    TIM16_handler,
    TIM17_handler,
    I2C1_handler,
    I2C2_handler,
    SPI1_handler,
    SPI2_handler,
    USART1_handler,
    USART2_handler,
    USART_00B3_handler,
    CEC_CAN_handler,
    USB_handler,
};