aboutsummaryrefslogtreecommitdiff
path: root/targets/apollo4/vector_table.c
blob: a05e153663e96b40d2764ac641a3eb55660f627d (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
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
// Copyright 2023 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.

#include <stdbool.h>

#include "pw_boot/boot.h"
#include "pw_boot_cortex_m/boot.h"
#include "pw_preprocessor/compiler.h"

// Default handler to insert into the ARMv7-M vector table (below).
// This function exists for convenience. If a device isn't doing what you
// expect, it might have hit a fault and ended up here.
static void DefaultFaultHandler(void) {
  while (true) {
    // Wait for debugger to attach.
  }
}

// This typedef is for convenience when building the vector table. With the
// exception of SP_main (0th entry in the vector table), all the entries of the
// vector table are function pointers.
typedef void (*InterruptHandler)(void);

void SVC_Handler(void) PW_ALIAS(DefaultFaultHandler);
void PendSV_Handler(void) PW_ALIAS(DefaultFaultHandler);
void SysTick_Handler(void) PW_ALIAS(DefaultFaultHandler);

void MemManage_Handler(void) PW_ALIAS(DefaultFaultHandler);
void BusFault_Handler(void) PW_ALIAS(DefaultFaultHandler);
void UsageFault_Handler(void) PW_ALIAS(DefaultFaultHandler);
void DebugMon_Handler(void) PW_ALIAS(DefaultFaultHandler);

void am_brownout_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_watchdog_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_rtc_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_vcomp_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_ioslave_ios_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_ioslave_acc_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_iomaster0_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_iomaster1_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_iomaster2_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_iomaster3_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_iomaster4_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_iomaster5_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_iomaster6_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_iomaster7_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_ctimer_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_uart_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_uart1_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_uart2_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_uart3_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_adc_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_mspi0_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_mspi1_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_mspi2_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_clkgen_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_cryptosec_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_sdio_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_usb_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_gpu_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_disp_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_dsi_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_stimer_cmpr0_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_stimer_cmpr1_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_stimer_cmpr2_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_stimer_cmpr3_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_stimer_cmpr4_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_stimer_cmpr5_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_stimer_cmpr6_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_stimer_cmpr7_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_stimerof_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_audadc0_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_dspi2s0_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_dspi2s1_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_dspi2s2_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_dspi2s3_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_pdm0_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_pdm1_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_pdm2_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_pdm3_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_gpio0_001f_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_gpio0_203f_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_gpio0_405f_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_gpio0_607f_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_gpio1_001f_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_gpio1_203f_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_gpio1_405f_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_gpio1_607f_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer00_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer01_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer02_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer03_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer04_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer05_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer06_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer07_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer08_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer09_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer10_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer11_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer12_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer13_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer14_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_timer15_isr(void) PW_ALIAS(DefaultFaultHandler);
void am_cachecpu_isr(void) PW_ALIAS(DefaultFaultHandler);

PW_KEEP_IN_SECTION(".vector_table")
const InterruptHandler vector_table[] = {
    // Cortex-M CPU specific interrupt handlers.
    (InterruptHandler)(&pw_boot_stack_high_addr),
    pw_boot_Entry,        // The reset handler
    DefaultFaultHandler,  // The NMI handler
    DefaultFaultHandler,  // The hard fault handler
    DefaultFaultHandler,  // The MemManage_Handler
    DefaultFaultHandler,  // The BusFault_Handler
    DefaultFaultHandler,  // The UsageFault_Handler
    0,                    // Reserved
    0,                    // Reserved
    0,                    // Reserved
    0,                    // Reserved
    SVC_Handler,          // SVCall handler
    DefaultFaultHandler,  // Debug monitor handler
    0,                    // Reserved
    PendSV_Handler,       // The PendSV handler
    SysTick_Handler,      // The SysTick handler
    // Vendor specific peripheral interrupt handlers.
    am_brownout_isr,      //  0: Brownout (rstgen)
    am_watchdog_isr,      //  1: Watchdog (WDT)
    am_rtc_isr,           //  2: RTC
    am_vcomp_isr,         //  3: Voltage Comparator
    am_ioslave_ios_isr,   //  4: I/O Responder general
    am_ioslave_acc_isr,   //  5: I/O Responder access
    am_iomaster0_isr,     //  6: I/O Controller 0
    am_iomaster1_isr,     //  7: I/O Controller 1
    am_iomaster2_isr,     //  8: I/O Controller 2
    am_iomaster3_isr,     //  9: I/O Controller 3
    am_iomaster4_isr,     // 10: I/O Controller 4
    am_iomaster5_isr,     // 11: I/O Controller 5
    am_iomaster6_isr,     // 12: I/O Controller 6 (I3C/I2C/SPI)
    am_iomaster7_isr,     // 13: I/O Controller 7 (I3C/I2C/SPI)
    am_ctimer_isr,        // 14: OR of all timerX interrupts
    am_uart_isr,          // 15: UART0
    am_uart1_isr,         // 16: UART1
    am_uart2_isr,         // 17: UART2
    am_uart3_isr,         // 18: UART3
    am_adc_isr,           // 19: ADC
    am_mspi0_isr,         // 20: MSPI0
    am_mspi1_isr,         // 21: MSPI1
    am_mspi2_isr,         // 22: MSPI2
    am_clkgen_isr,        // 23: ClkGen
    am_cryptosec_isr,     // 24: Crypto Secure
    DefaultFaultHandler,  // 25: Reserved
    am_sdio_isr,          // 26: SDIO
    am_usb_isr,           // 27: USB
    am_gpu_isr,           // 28: GPU
    am_disp_isr,          // 29: DISP
    am_dsi_isr,           // 30: DSI
    DefaultFaultHandler,  // 31: Reserved
    am_stimer_cmpr0_isr,  // 32: System Timer Compare0
    am_stimer_cmpr1_isr,  // 33: System Timer Compare1
    am_stimer_cmpr2_isr,  // 34: System Timer Compare2
    am_stimer_cmpr3_isr,  // 35: System Timer Compare3
    am_stimer_cmpr4_isr,  // 36: System Timer Compare4
    am_stimer_cmpr5_isr,  // 37: System Timer Compare5
    am_stimer_cmpr6_isr,  // 38: System Timer Compare6
    am_stimer_cmpr7_isr,  // 39: System Timer Compare7
    am_stimerof_isr,      // 40: System Timer Cap Overflow
    DefaultFaultHandler,  // 41: Reserved
    am_audadc0_isr,       // 42: Audio ADC
    DefaultFaultHandler,  // 43: Reserved
    am_dspi2s0_isr,       // 44: I2S0
    am_dspi2s1_isr,       // 45: I2S1
    am_dspi2s2_isr,       // 46: I2S2
    am_dspi2s3_isr,       // 47: I2S3
    am_pdm0_isr,          // 48: PDM0
    am_pdm1_isr,          // 49: PDM1
    am_pdm2_isr,          // 50: PDM2
    am_pdm3_isr,          // 51: PDM3
    DefaultFaultHandler,  // 52: Reserved
    DefaultFaultHandler,  // 53: Reserved
    DefaultFaultHandler,  // 54: Reserved
    DefaultFaultHandler,  // 55: Reserved
    am_gpio0_001f_isr,    // 56: GPIO N0 pins  0-31
    am_gpio0_203f_isr,    // 57: GPIO N0 pins 32-63
    am_gpio0_405f_isr,    // 58: GPIO N0 pins 64-95
    am_gpio0_607f_isr,    // 59: GPIO N0 pins 96-104, virtual 105-127
    am_gpio1_001f_isr,    // 60: GPIO N1 pins  0-31
    am_gpio1_203f_isr,    // 61: GPIO N1 pins 32-63
    am_gpio1_405f_isr,    // 62: GPIO N1 pins 64-95
    am_gpio1_607f_isr,    // 63: GPIO N1 pins 96-104, virtual 105-127
    DefaultFaultHandler,  // 64: Reserved
    DefaultFaultHandler,  // 65: Reserved
    DefaultFaultHandler,  // 66: Reserved
    am_timer00_isr,       // 67: timer0
    am_timer01_isr,       // 68: timer1
    am_timer02_isr,       // 69: timer2
    am_timer03_isr,       // 70: timer3
    am_timer04_isr,       // 71: timer4
    am_timer05_isr,       // 72: timer5
    am_timer06_isr,       // 73: timer6
    am_timer07_isr,       // 74: timer7
    am_timer08_isr,       // 75: timer8
    am_timer09_isr,       // 76: timer9
    am_timer10_isr,       // 77: timer10
    am_timer11_isr,       // 78: timer11
    am_timer12_isr,       // 79: timer12
    am_timer13_isr,       // 80: timer13
    am_timer14_isr,       // 81: timer14
    am_timer15_isr,       // 82: timer15
    am_cachecpu_isr       // 83: CPU cache
};