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
};
|