1 /*
2 * Copyright (c) 2009-2020 Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Licensed under the Apache License, Version 2.0 (the License); you may
7 * not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 /*
20 * This file is derivative of CMSIS V5.6.0 startup_ARMv81MML.c
21 * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b
22 */
23
24 #include "SSE300MPS3.h"
25
26 /*----------------------------------------------------------------------------
27 Exception / Interrupt Handler Function Prototype
28 *----------------------------------------------------------------------------*/
29 typedef void( *pFunc )( void );
30
31 /*----------------------------------------------------------------------------
32 External References
33 *----------------------------------------------------------------------------*/
34 extern uint32_t __INITIAL_SP;
35 extern uint32_t __STACK_LIMIT;
36
37 extern void __PROGRAM_START(void) __NO_RETURN;
38
39 /*----------------------------------------------------------------------------
40 Internal References
41 *----------------------------------------------------------------------------*/
42 void Reset_Handler (void) __NO_RETURN;
43
44 /*----------------------------------------------------------------------------
45 Exception / Interrupt Handler
46 *----------------------------------------------------------------------------*/
47 #define DEFAULT_IRQ_HANDLER(handler_name) \
48 void __WEAK __NO_RETURN handler_name(void); \
49 void handler_name(void) { \
50 while(1); \
51 }
52
53 /* Exceptions */
54 DEFAULT_IRQ_HANDLER(NMI_Handler)
55 DEFAULT_IRQ_HANDLER(HardFault_Handler)
56 DEFAULT_IRQ_HANDLER(MemManage_Handler)
57 DEFAULT_IRQ_HANDLER(BusFault_Handler)
58 DEFAULT_IRQ_HANDLER(UsageFault_Handler)
59 DEFAULT_IRQ_HANDLER(SecureFault_Handler)
60 DEFAULT_IRQ_HANDLER(SVC_Handler)
61 DEFAULT_IRQ_HANDLER(DebugMon_Handler)
62 DEFAULT_IRQ_HANDLER(PendSV_Handler)
63 DEFAULT_IRQ_HANDLER(SysTick_Handler)
64
65 DEFAULT_IRQ_HANDLER(NONSEC_WATCHDOG_RESET_Handler)
66 DEFAULT_IRQ_HANDLER(NONSEC_WATCHDOG_Handler)
67 DEFAULT_IRQ_HANDLER(SLOWCLK_Timer_Handler)
68 DEFAULT_IRQ_HANDLER(TIMER0_Handler)
69 DEFAULT_IRQ_HANDLER(TIMER1_Handler)
70 DEFAULT_IRQ_HANDLER(TIMER2_Handler)
71 DEFAULT_IRQ_HANDLER(MPC_Handler)
72 DEFAULT_IRQ_HANDLER(PPC_Handler)
73 DEFAULT_IRQ_HANDLER(MSC_Handler)
74 DEFAULT_IRQ_HANDLER(BRIDGE_ERROR_Handler)
75 DEFAULT_IRQ_HANDLER(MGMT_PPU_Handler)
76 DEFAULT_IRQ_HANDLER(SYS_PPU_Handler)
77 DEFAULT_IRQ_HANDLER(CPU0_PPU_Handler)
78 DEFAULT_IRQ_HANDLER(DEBUG_PPU_Handler)
79 DEFAULT_IRQ_HANDLER(TIMER3_Handler)
80 DEFAULT_IRQ_HANDLER(CTI_REQ0_IRQHandler)
81 DEFAULT_IRQ_HANDLER(CTI_REQ1_IRQHandler)
82
83 DEFAULT_IRQ_HANDLER(System_Timestamp_Counter_Handler)
84 DEFAULT_IRQ_HANDLER(UARTRX0_Handler)
85 DEFAULT_IRQ_HANDLER(UARTTX0_Handler)
86 DEFAULT_IRQ_HANDLER(UARTRX1_Handler)
87 DEFAULT_IRQ_HANDLER(UARTTX1_Handler)
88 DEFAULT_IRQ_HANDLER(UARTRX2_Handler)
89 DEFAULT_IRQ_HANDLER(UARTTX2_Handler)
90 DEFAULT_IRQ_HANDLER(UARTRX3_Handler)
91 DEFAULT_IRQ_HANDLER(UARTTX3_Handler)
92 DEFAULT_IRQ_HANDLER(UARTRX4_Handler)
93 DEFAULT_IRQ_HANDLER(UARTTX4_Handler)
94 DEFAULT_IRQ_HANDLER(UART0_Combined_Handler)
95 DEFAULT_IRQ_HANDLER(UART1_Combined_Handler)
96 DEFAULT_IRQ_HANDLER(UART2_Combined_Handler)
97 DEFAULT_IRQ_HANDLER(UART3_Combined_Handler)
98 DEFAULT_IRQ_HANDLER(UART4_Combined_Handler)
99 DEFAULT_IRQ_HANDLER(UARTOVF_Handler)
100 DEFAULT_IRQ_HANDLER(ETHERNET_Handler)
101 DEFAULT_IRQ_HANDLER(I2S_Handler)
102 DEFAULT_IRQ_HANDLER(TOUCH_SCREEN_Handler)
103 DEFAULT_IRQ_HANDLER(USB_Handler)
104 DEFAULT_IRQ_HANDLER(SPI_ADC_Handler)
105 DEFAULT_IRQ_HANDLER(SPI_SHIELD0_Handler)
106 DEFAULT_IRQ_HANDLER(SPI_SHIELD1_Handler)
107 DEFAULT_IRQ_HANDLER(ETHOS_U55_Handler)
108 DEFAULT_IRQ_HANDLER(GPIO0_Combined_Handler)
109 DEFAULT_IRQ_HANDLER(GPIO1_Combined_Handler)
110 DEFAULT_IRQ_HANDLER(GPIO2_Combined_Handler)
111 DEFAULT_IRQ_HANDLER(GPIO3_Combined_Handler)
112 DEFAULT_IRQ_HANDLER(GPIO0_0_Handler)
113 DEFAULT_IRQ_HANDLER(GPIO0_1_Handler)
114 DEFAULT_IRQ_HANDLER(GPIO0_2_Handler)
115 DEFAULT_IRQ_HANDLER(GPIO0_3_Handler)
116 DEFAULT_IRQ_HANDLER(GPIO0_4_Handler)
117 DEFAULT_IRQ_HANDLER(GPIO0_5_Handler)
118 DEFAULT_IRQ_HANDLER(GPIO0_6_Handler)
119 DEFAULT_IRQ_HANDLER(GPIO0_7_Handler)
120 DEFAULT_IRQ_HANDLER(GPIO0_8_Handler)
121 DEFAULT_IRQ_HANDLER(GPIO0_9_Handler)
122 DEFAULT_IRQ_HANDLER(GPIO0_10_Handler)
123 DEFAULT_IRQ_HANDLER(GPIO0_11_Handler)
124 DEFAULT_IRQ_HANDLER(GPIO0_12_Handler)
125 DEFAULT_IRQ_HANDLER(GPIO0_13_Handler)
126 DEFAULT_IRQ_HANDLER(GPIO0_14_Handler)
127 DEFAULT_IRQ_HANDLER(GPIO0_15_Handler)
128 DEFAULT_IRQ_HANDLER(GPIO1_0_Handler)
129 DEFAULT_IRQ_HANDLER(GPIO1_1_Handler)
130 DEFAULT_IRQ_HANDLER(GPIO1_2_Handler)
131 DEFAULT_IRQ_HANDLER(GPIO1_3_Handler)
132 DEFAULT_IRQ_HANDLER(GPIO1_4_Handler)
133 DEFAULT_IRQ_HANDLER(GPIO1_5_Handler)
134 DEFAULT_IRQ_HANDLER(GPIO1_6_Handler)
135 DEFAULT_IRQ_HANDLER(GPIO1_7_Handler)
136 DEFAULT_IRQ_HANDLER(GPIO1_8_Handler)
137 DEFAULT_IRQ_HANDLER(GPIO1_9_Handler)
138 DEFAULT_IRQ_HANDLER(GPIO1_10_Handler)
139 DEFAULT_IRQ_HANDLER(GPIO1_11_Handler)
140 DEFAULT_IRQ_HANDLER(GPIO1_12_Handler)
141 DEFAULT_IRQ_HANDLER(GPIO1_13_Handler)
142 DEFAULT_IRQ_HANDLER(GPIO1_14_Handler)
143 DEFAULT_IRQ_HANDLER(GPIO1_15_Handler)
144 DEFAULT_IRQ_HANDLER(GPIO2_0_Handler)
145 DEFAULT_IRQ_HANDLER(GPIO2_1_Handler)
146 DEFAULT_IRQ_HANDLER(GPIO2_2_Handler)
147 DEFAULT_IRQ_HANDLER(GPIO2_3_Handler)
148 DEFAULT_IRQ_HANDLER(GPIO2_4_Handler)
149 DEFAULT_IRQ_HANDLER(GPIO2_5_Handler)
150 DEFAULT_IRQ_HANDLER(GPIO2_6_Handler)
151 DEFAULT_IRQ_HANDLER(GPIO2_7_Handler)
152 DEFAULT_IRQ_HANDLER(GPIO2_8_Handler)
153 DEFAULT_IRQ_HANDLER(GPIO2_9_Handler)
154 DEFAULT_IRQ_HANDLER(GPIO2_10_Handler)
155 DEFAULT_IRQ_HANDLER(GPIO2_11_Handler)
156 DEFAULT_IRQ_HANDLER(GPIO2_12_Handler)
157 DEFAULT_IRQ_HANDLER(GPIO2_13_Handler)
158 DEFAULT_IRQ_HANDLER(GPIO2_14_Handler)
159 DEFAULT_IRQ_HANDLER(GPIO2_15_Handler)
160 DEFAULT_IRQ_HANDLER(GPIO3_0_Handler)
161 DEFAULT_IRQ_HANDLER(GPIO3_1_Handler)
162 DEFAULT_IRQ_HANDLER(GPIO3_2_Handler)
163 DEFAULT_IRQ_HANDLER(GPIO3_3_Handler)
164 DEFAULT_IRQ_HANDLER(UARTRX5_Handler)
165 DEFAULT_IRQ_HANDLER(UARTTX5_Handler)
166 DEFAULT_IRQ_HANDLER(UART5_Handler)
167
168 /*----------------------------------------------------------------------------
169 Exception / Interrupt Vector table
170 *----------------------------------------------------------------------------*/
171
172 #if defined ( __GNUC__ )
173 #pragma GCC diagnostic push
174 #pragma GCC diagnostic ignored "-Wpedantic"
175 #endif
176
177 extern const pFunc __VECTOR_TABLE[496];
178 const pFunc __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = {
179 (pFunc)(&__INITIAL_SP), /* Initial Stack Pointer */
180 Reset_Handler, /* Reset Handler */
181 NMI_Handler, /* -14: NMI Handler */
182 HardFault_Handler, /* -13: Hard Fault Handler */
183 MemManage_Handler, /* -12: MPU Fault Handler */
184 BusFault_Handler, /* -11: Bus Fault Handler */
185 UsageFault_Handler, /* -10: Usage Fault Handler */
186 SecureFault_Handler, /* -9: Secure Fault Handler */
187 0, /* Reserved */
188 0, /* Reserved */
189 0, /* Reserved */
190 SVC_Handler, /* -5: SVCall Handler */
191 DebugMon_Handler, /* -4: Debug Monitor Handler */
192 0, /* Reserved */
193 PendSV_Handler, /* -2: PendSV Handler */
194 SysTick_Handler, /* -1: SysTick Handler */
195
196 NONSEC_WATCHDOG_RESET_Handler, /* 0: Non-Secure Watchdog Reset Handler */
197 NONSEC_WATCHDOG_Handler, /* 1: Non-Secure Watchdog Handler */
198 SLOWCLK_Timer_Handler, /* 2: SLOWCLK Timer Handler */
199 TIMER0_Handler, /* 3: TIMER 0 Handler */
200 TIMER1_Handler, /* 4: TIMER 1 Handler */
201 TIMER2_Handler, /* 5: TIMER 2 Handler */
202 0, /* 6: Reserved */
203 0, /* 7: Reserved */
204 0, /* 8: Reserved */
205 MPC_Handler, /* 9: MPC Combined (Secure) Handler */
206 PPC_Handler, /* 10: PPC Combined (Secure) Handler */
207 MSC_Handler, /* 11: MSC Combined (Secure) Handler */
208 BRIDGE_ERROR_Handler, /* 12: Bridge Error (Secure) Handler */
209 0, /* 13: Reserved */
210 MGMT_PPU_Handler, /* 14: MGMT PPU Handler */
211 SYS_PPU_Handler, /* 15: SYS PPU Handler */
212 CPU0_PPU_Handler, /* 16: CPU0 PPU Handler */
213 0, /* 17: Reserved */
214 0, /* 18: Reserved */
215 0, /* 19: Reserved */
216 0, /* 20: Reserved */
217 0, /* 21: Reserved */
218 0, /* 22: Reserved */
219 0, /* 23: Reserved */
220 0, /* 24: Reserved */
221 0, /* 25: Reserved */
222 DEBUG_PPU_Handler, /* 26: DEBUG PPU Handler */
223 TIMER3_Handler, /* 27: TIMER 3 Handler */
224 CTI_REQ0_IRQHandler, /* 28: CTI request 0 IRQ Handler */
225 CTI_REQ1_IRQHandler, /* 29: CTI request 1 IRQ Handler */
226 0, /* 30: Reserved */
227 0, /* 31: Reserved */
228
229 /* External interrupts */
230 System_Timestamp_Counter_Handler, /* 32: System timestamp counter Handler */
231 UARTRX0_Handler, /* 33: UART 0 RX Handler */
232 UARTTX0_Handler, /* 34: UART 0 TX Handler */
233 UARTRX1_Handler, /* 35: UART 1 RX Handler */
234 UARTTX1_Handler, /* 36: UART 1 TX Handler */
235 UARTRX2_Handler, /* 37: UART 2 RX Handler */
236 UARTTX2_Handler, /* 38: UART 2 TX Handler */
237 UARTRX3_Handler, /* 39: UART 3 RX Handler */
238 UARTTX3_Handler, /* 40: UART 3 TX Handler */
239 UARTRX4_Handler, /* 41: UART 4 RX Handler */
240 UARTTX4_Handler, /* 42: UART 4 TX Handler */
241 UART0_Combined_Handler, /* 43: UART 0 Combined Handler */
242 UART1_Combined_Handler, /* 44: UART 1 Combined Handler */
243 UART2_Combined_Handler, /* 45: UART 2 Combined Handler */
244 UART3_Combined_Handler, /* 46: UART 3 Combined Handler */
245 UART4_Combined_Handler, /* 47: UART 4 Combined Handler */
246 UARTOVF_Handler, /* 48: UART 0, 1, 2, 3, 4 & 5 Overflow Handler */
247 ETHERNET_Handler, /* 49: Ethernet Handler */
248 I2S_Handler, /* 50: Audio I2S Handler */
249 TOUCH_SCREEN_Handler, /* 51: Touch Screen Handler */
250 USB_Handler, /* 52: USB Handler */
251 SPI_ADC_Handler, /* 53: SPI ADC Handler */
252 SPI_SHIELD0_Handler, /* 54: SPI (Shield 0) Handler */
253 SPI_SHIELD1_Handler, /* 55: SPI (Shield 0) Handler */
254 ETHOS_U55_Handler, /* 56: Ethos-U55 Handler */
255 0, /* 57: Reserved */
256 0, /* 58: Reserved */
257 0, /* 59: Reserved */
258 0, /* 60: Reserved */
259 0, /* 61: Reserved */
260 0, /* 62: Reserved */
261 0, /* 63: Reserved */
262 0, /* 64: Reserved */
263 0, /* 65: Reserved */
264 0, /* 66: Reserved */
265 0, /* 67: Reserved */
266 0, /* 68: Reserved */
267 GPIO0_Combined_Handler, /* 69: GPIO 0 Combined Handler */
268 GPIO1_Combined_Handler, /* 70: GPIO 1 Combined Handler */
269 GPIO2_Combined_Handler, /* 71: GPIO 2 Combined Handler */
270 GPIO3_Combined_Handler, /* 72: GPIO 3 Combined Handler */
271 GPIO0_0_Handler, /* 73: GPIO0 Pin 0 Handler */
272 GPIO0_1_Handler, /* 74: GPIO0 Pin 1 Handler */
273 GPIO0_2_Handler, /* 75: GPIO0 Pin 2 Handler */
274 GPIO0_3_Handler, /* 76: GPIO0 Pin 3 Handler */
275 GPIO0_4_Handler, /* 77: GPIO0 Pin 4 Handler */
276 GPIO0_5_Handler, /* 78: GPIO0 Pin 5 Handler */
277 GPIO0_6_Handler, /* 79: GPIO0 Pin 6 Handler */
278 GPIO0_7_Handler, /* 80: GPIO0 Pin 7 Handler */
279 GPIO0_8_Handler, /* 81: GPIO0 Pin 8 Handler */
280 GPIO0_9_Handler, /* 82: GPIO0 Pin 9 Handler */
281 GPIO0_10_Handler, /* 83: GPIO0 Pin 10 Handler */
282 GPIO0_11_Handler, /* 84: GPIO0 Pin 11 Handler */
283 GPIO0_12_Handler, /* 85: GPIO0 Pin 12 Handler */
284 GPIO0_13_Handler, /* 86: GPIO0 Pin 13 Handler */
285 GPIO0_14_Handler, /* 87: GPIO0 Pin 14 Handler */
286 GPIO0_15_Handler, /* 88: GPIO0 Pin 15 Handler */
287 GPIO1_0_Handler, /* 89: GPIO1 Pin 0 Handler */
288 GPIO1_1_Handler, /* 90: GPIO1 Pin 1 Handler */
289 GPIO1_2_Handler, /* 91: GPIO1 Pin 2 Handler */
290 GPIO1_3_Handler, /* 92: GPIO1 Pin 3 Handler */
291 GPIO1_4_Handler, /* 93: GPIO1 Pin 4 Handler */
292 GPIO1_5_Handler, /* 94: GPIO1 Pin 5 Handler */
293 GPIO1_6_Handler, /* 95: GPIO1 Pin 6 Handler */
294 GPIO1_7_Handler, /* 96: GPIO1 Pin 7 Handler */
295 GPIO1_8_Handler, /* 97: GPIO1 Pin 8 Handler */
296 GPIO1_9_Handler, /* 98: GPIO1 Pin 9 Handler */
297 GPIO1_10_Handler, /* 99: GPIO1 Pin 10 Handler */
298 GPIO1_11_Handler, /* 100: GPIO1 Pin 11 Handler */
299 GPIO1_12_Handler, /* 101: GPIO1 Pin 12 Handler */
300 GPIO1_13_Handler, /* 102: GPIO1 Pin 13 Handler */
301 GPIO1_14_Handler, /* 103: GPIO1 Pin 14 Handler */
302 GPIO1_15_Handler, /* 104: GPIO1 Pin 15 Handler */
303 GPIO2_0_Handler, /* 105: GPIO2 Pin 0 Handler */
304 GPIO2_1_Handler, /* 106: GPIO2 Pin 1 Handler */
305 GPIO2_2_Handler, /* 107: GPIO2 Pin 2 Handler */
306 GPIO2_3_Handler, /* 108: GPIO2 Pin 3 Handler */
307 GPIO2_4_Handler, /* 109: GPIO2 Pin 4 Handler */
308 GPIO2_5_Handler, /* 110: GPIO2 Pin 5 Handler */
309 GPIO2_6_Handler, /* 111: GPIO2 Pin 6 Handler */
310 GPIO2_7_Handler, /* 112: GPIO2 Pin 7 Handler */
311 GPIO2_8_Handler, /* 113: GPIO2 Pin 8 Handler */
312 GPIO2_9_Handler, /* 114: GPIO2 Pin 9 Handler */
313 GPIO2_10_Handler, /* 115: GPIO2 Pin 10 Handler */
314 GPIO2_11_Handler, /* 116: GPIO2 Pin 11 Handler */
315 GPIO2_12_Handler, /* 117: GPIO2 Pin 12 Handler */
316 GPIO2_13_Handler, /* 118: GPIO2 Pin 13 Handler */
317 GPIO2_14_Handler, /* 119: GPIO2 Pin 14 Handler */
318 GPIO2_15_Handler, /* 120: GPIO2 Pin 15 Handler */
319 GPIO3_0_Handler, /* 121: GPIO3 Pin 0 Handler */
320 GPIO3_1_Handler, /* 122: GPIO3 Pin 1 Handler */
321 GPIO3_2_Handler, /* 123: GPIO3 Pin 2 Handler */
322 GPIO3_3_Handler, /* 124: GPIO3 Pin 3 Handler */
323 UARTRX5_Handler, /* 125: UART 5 RX Interrupt */
324 UARTTX5_Handler, /* 126: UART 5 TX Interrupt */
325 UART5_Handler, /* 127: UART 5 combined Interrupt */
326 0, /* 128: Reserved */
327 0, /* 129: Reserved */
328 0, /* 130: Reserved */
329 };
330
331 #if defined ( __GNUC__ )
332 #pragma GCC diagnostic pop
333 #endif
334
335 /*----------------------------------------------------------------------------
336 Reset Handler called on controller reset
337 *----------------------------------------------------------------------------*/
Reset_Handler(void)338 void Reset_Handler(void)
339 {
340 __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
341
342 SystemInit(); /* CMSIS System Initialization */
343 __PROGRAM_START(); /* Enter PreMain (C library entry point) */
344 }
345