1 /*
2 * Copyright (c) 2022-2024, 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.9.0 startup_ARMCM23.c
21 * Git SHA: 2b7495b8535bdcb306dac29b9ded4cfb679d7e5c
22 */
23
24 #include "tfm_hal_device_header.h"
25
26 /*----------------------------------------------------------------------------
27 External References
28 *----------------------------------------------------------------------------*/
29 extern uint32_t __INITIAL_SP;
30 extern uint32_t __STACK_LIMIT;
31 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
32 extern uint64_t __STACK_SEAL;
33 #endif
34
35 extern __NO_RETURN void __PROGRAM_START(void);
36
37 /*----------------------------------------------------------------------------
38 Internal References
39 *----------------------------------------------------------------------------*/
40 __NO_RETURN void Reset_Handler (void);
41
42 /*----------------------------------------------------------------------------
43 Exception / Interrupt Handler
44 *----------------------------------------------------------------------------*/
45 #define DEFAULT_IRQ_HANDLER(handler_name) \
46 __NO_RETURN void __WEAK handler_name(void); \
47 void handler_name(void) { \
48 while(1); \
49 }
50
51 DEFAULT_IRQ_HANDLER(NMI_Handler)
52 DEFAULT_IRQ_HANDLER(HardFault_Handler)
53 DEFAULT_IRQ_HANDLER(SVC_Handler)
54 DEFAULT_IRQ_HANDLER(PendSV_Handler)
55 DEFAULT_IRQ_HANDLER(SysTick_Handler)
56
57 DEFAULT_IRQ_HANDLER(BOD_IRQHandler)
58 DEFAULT_IRQ_HANDLER(IRC_IRQHandler)
59 DEFAULT_IRQ_HANDLER(PWRWU_IRQHandler)
60 DEFAULT_IRQ_HANDLER(SRAM_IRQHandler)
61 DEFAULT_IRQ_HANDLER(CLKFAIL_IRQHandler)
62
63 DEFAULT_IRQ_HANDLER(RTC_IRQHandler)
64 DEFAULT_IRQ_HANDLER(TAMPER_IRQHandler)
65 DEFAULT_IRQ_HANDLER(WDT_IRQHandler)
66 DEFAULT_IRQ_HANDLER(WWDT_IRQHandler)
67 DEFAULT_IRQ_HANDLER(EINT0_IRQHandler)
68 DEFAULT_IRQ_HANDLER(EINT1_IRQHandler)
69 DEFAULT_IRQ_HANDLER(EINT2_IRQHandler)
70 DEFAULT_IRQ_HANDLER(EINT3_IRQHandler)
71 DEFAULT_IRQ_HANDLER(EINT4_IRQHandler)
72 DEFAULT_IRQ_HANDLER(EINT5_IRQHandler)
73 DEFAULT_IRQ_HANDLER(GPA_IRQHandler)
74 DEFAULT_IRQ_HANDLER(GPB_IRQHandler)
75 DEFAULT_IRQ_HANDLER(GPC_IRQHandler)
76 DEFAULT_IRQ_HANDLER(GPD_IRQHandler)
77 DEFAULT_IRQ_HANDLER(GPE_IRQHandler)
78 DEFAULT_IRQ_HANDLER(GPF_IRQHandler)
79 DEFAULT_IRQ_HANDLER(QSPI0_IRQHandler)
80 DEFAULT_IRQ_HANDLER(SPI0_IRQHandler)
81 DEFAULT_IRQ_HANDLER(BRAKE0_IRQHandler)
82 DEFAULT_IRQ_HANDLER(EPWM0_P0_IRQHandler)
83 DEFAULT_IRQ_HANDLER(EPWM0_P1_IRQHandler)
84 DEFAULT_IRQ_HANDLER(EPWM0_P2_IRQHandler)
85 DEFAULT_IRQ_HANDLER(BRAKE1_IRQHandler)
86 DEFAULT_IRQ_HANDLER(EPWM1_P0_IRQHandler)
87 DEFAULT_IRQ_HANDLER(EPWM1_P1_IRQHandler)
88 DEFAULT_IRQ_HANDLER(EPWM1_P2_IRQHandler)
89 DEFAULT_IRQ_HANDLER(TFM_TIMER0_IRQ_Handler)
90 DEFAULT_IRQ_HANDLER(TMR1_IRQHandler)
91 DEFAULT_IRQ_HANDLER(TIMER1_Handler) /*Just a handler to use TMR2 hardware */
92 DEFAULT_IRQ_HANDLER(TMR3_IRQHandler)
93 DEFAULT_IRQ_HANDLER(UART0_IRQHandler)
94 DEFAULT_IRQ_HANDLER(UART1_IRQHandler)
95 DEFAULT_IRQ_HANDLER(I2C0_IRQHandler)
96 DEFAULT_IRQ_HANDLER(I2C1_IRQHandler)
97 DEFAULT_IRQ_HANDLER(PDMA0_IRQHandler)
98 DEFAULT_IRQ_HANDLER(DAC_IRQHandler)
99 DEFAULT_IRQ_HANDLER(EADC0_IRQHandler)
100 DEFAULT_IRQ_HANDLER(EADC1_IRQHandler)
101 DEFAULT_IRQ_HANDLER(ACMP01_IRQHandler)
102 DEFAULT_IRQ_HANDLER(EADC2_IRQHandler)
103 DEFAULT_IRQ_HANDLER(EADC3_IRQHandler)
104 DEFAULT_IRQ_HANDLER(UART2_IRQHandler)
105 DEFAULT_IRQ_HANDLER(UART3_IRQHandler)
106 DEFAULT_IRQ_HANDLER(SPI1_IRQHandler)
107 DEFAULT_IRQ_HANDLER(SPI2_IRQHandler)
108 DEFAULT_IRQ_HANDLER(USBD_IRQHandler)
109 DEFAULT_IRQ_HANDLER(USBH_IRQHandler)
110 DEFAULT_IRQ_HANDLER(USBOTG_IRQHandler)
111 DEFAULT_IRQ_HANDLER(CAN0_IRQHandler)
112 DEFAULT_IRQ_HANDLER(SC0_IRQHandler)
113 DEFAULT_IRQ_HANDLER(SC1_IRQHandler)
114 DEFAULT_IRQ_HANDLER(SC2_IRQHandler)
115 DEFAULT_IRQ_HANDLER(SPI3_IRQHandler)
116 DEFAULT_IRQ_HANDLER(SDH0_IRQHandler)
117 DEFAULT_IRQ_HANDLER(I2S0_IRQHandler)
118 DEFAULT_IRQ_HANDLER(OPA0_IRQHandler)
119 DEFAULT_IRQ_HANDLER(CRPT_IRQHandler)
120 DEFAULT_IRQ_HANDLER(GPG_IRQHandler)
121 DEFAULT_IRQ_HANDLER(EINT6_IRQHandler)
122 DEFAULT_IRQ_HANDLER(UART4_IRQHandler)
123 DEFAULT_IRQ_HANDLER(UART5_IRQHandler)
124 DEFAULT_IRQ_HANDLER(USCI0_IRQHandler)
125 DEFAULT_IRQ_HANDLER(USCI1_IRQHandler)
126 DEFAULT_IRQ_HANDLER(BPWM0_IRQHandler)
127 DEFAULT_IRQ_HANDLER(BPWM1_IRQHandler)
128 DEFAULT_IRQ_HANDLER(I2C2_IRQHandler)
129 DEFAULT_IRQ_HANDLER(QEI0_IRQHandler)
130 DEFAULT_IRQ_HANDLER(QEI1_IRQHandler)
131 DEFAULT_IRQ_HANDLER(ECAP0_IRQHandler)
132 DEFAULT_IRQ_HANDLER(ECAP1_IRQHandler)
133 DEFAULT_IRQ_HANDLER(GPH_IRQHandler)
134 DEFAULT_IRQ_HANDLER(EINT7_IRQHandler)
135 DEFAULT_IRQ_HANDLER(PDMA1_IRQHandler)
136 DEFAULT_IRQ_HANDLER(SCU_IRQHandler)
137 DEFAULT_IRQ_HANDLER(TRNG_IRQHandler)
138
139 DEFAULT_IRQ_HANDLER(Default_Handler)
140
141
142 /*----------------------------------------------------------------------------
143 Exception / Interrupt Vector table
144 *----------------------------------------------------------------------------*/
145
146 #if defined ( __GNUC__ )
147 #pragma GCC diagnostic push
148 #pragma GCC diagnostic ignored "-Wpedantic"
149 #endif
150
151 extern const VECTOR_TABLE_Type __VECTOR_TABLE[];
152 const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
153 (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */
154 Reset_Handler, /* Reset Handler */
155 NMI_Handler, /* NMI Handler */
156 HardFault_Handler, /* Hard Fault Handler */
157 0, /* Reserved */
158 0, /* Reserved */
159 0, /* Reserved */
160 0, /* Reserved */
161 0, /* Reserved */
162 0, /* Reserved */
163 0, /* Reserved */
164 SVC_Handler, /* SVCall Handler */
165 0, /* Reserved */
166 0, /* Reserved */
167 PendSV_Handler, /* PendSV Handler */
168 SysTick_Handler, /* SysTick Handler */
169
170 /* External interrupts */
171 BOD_IRQHandler, /* 0 */
172 IRC_IRQHandler, /* 1 */
173 PWRWU_IRQHandler, /* 2 */
174 SRAM_IRQHandler, /* 3 */
175 CLKFAIL_IRQHandler, /* 4 */
176 Default_Handler, /* 5 */
177 RTC_IRQHandler, /* 6 */
178 TAMPER_IRQHandler, /* 7 */
179 WDT_IRQHandler, /* 8 */
180 WWDT_IRQHandler, /* 9 */
181 EINT0_IRQHandler, /* 10 */
182 EINT1_IRQHandler, /* 11 */
183 EINT2_IRQHandler, /* 12 */
184 EINT3_IRQHandler, /* 13 */
185 EINT4_IRQHandler, /* 14 */
186 EINT5_IRQHandler, /* 15 */
187 GPA_IRQHandler, /* 16 */
188 GPB_IRQHandler, /* 17 */
189 GPC_IRQHandler, /* 18 */
190 GPD_IRQHandler, /* 19 */
191 GPE_IRQHandler, /* 20 */
192 GPF_IRQHandler, /* 21 */
193 QSPI0_IRQHandler, /* 22 */
194 SPI0_IRQHandler, /* 23 */
195 BRAKE0_IRQHandler, /* 24 */
196 EPWM0_P0_IRQHandler, /* 25 */
197 EPWM0_P1_IRQHandler, /* 26 */
198 EPWM0_P2_IRQHandler, /* 27 */
199 BRAKE1_IRQHandler, /* 28 */
200 EPWM1_P0_IRQHandler, /* 29 */
201 EPWM1_P1_IRQHandler, /* 30 */
202 EPWM1_P2_IRQHandler, /* 31 */
203 TFM_TIMER0_IRQ_Handler,/* 32 */
204 TMR1_IRQHandler, /* 33 */
205 TIMER1_Handler, /* TMR2_IRQHandler 34 */
206 TMR3_IRQHandler, /* 35 */
207 UART0_IRQHandler, /* 36 */
208 UART1_IRQHandler, /* 37 */
209 I2C0_IRQHandler, /* 38 */
210 I2C1_IRQHandler, /* 39 */
211 PDMA0_IRQHandler, /* 40 */
212 DAC_IRQHandler, /* 41 */
213 EADC0_IRQHandler, /* 42 */
214 EADC1_IRQHandler, /* 43 */
215 ACMP01_IRQHandler, /* 44 */
216 Default_Handler, /* 45 */
217 EADC2_IRQHandler, /* 46 */
218 EADC3_IRQHandler, /* 47 */
219 UART2_IRQHandler, /* 48 */
220 UART3_IRQHandler, /* 49 */
221 Default_Handler, /* 50 */
222 SPI1_IRQHandler, /* 51 */
223 SPI2_IRQHandler, /* 52 */
224 USBD_IRQHandler, /* 53 */
225 USBH_IRQHandler, /* 54 */
226 USBOTG_IRQHandler, /* 55 */
227 CAN0_IRQHandler, /* 56 */
228 Default_Handler, /* 57 */
229 SC0_IRQHandler, /* 58 */
230 SC1_IRQHandler, /* 59 */
231 SC2_IRQHandler, /* 60 */
232 Default_Handler, /* 61 */
233 SPI3_IRQHandler, /* 62 */
234 Default_Handler, /* 63 */
235 SDH0_IRQHandler, /* 64 */
236 Default_Handler, /* 65 */
237 Default_Handler, /* 66 */
238 Default_Handler, /* 67 */
239 I2S0_IRQHandler, /* 68 */
240 Default_Handler, /* 69 */
241 OPA0_IRQHandler, /* 70 */
242 CRPT_IRQHandler, /* 71 */
243 GPG_IRQHandler, /* 72 */
244 EINT6_IRQHandler, /* 73 */
245 UART4_IRQHandler, /* 74 */
246 UART5_IRQHandler, /* 75 */
247 USCI0_IRQHandler, /* 76 */
248 USCI1_IRQHandler, /* 77 */
249 BPWM0_IRQHandler, /* 78 */
250 BPWM1_IRQHandler, /* 79 */
251 Default_Handler, /* 80 */
252 Default_Handler, /* 81 */
253 I2C2_IRQHandler, /* 82 */
254 Default_Handler, /* 83 */
255 QEI0_IRQHandler, /* 84 */
256 QEI1_IRQHandler, /* 85 */
257 ECAP0_IRQHandler, /* 86 */
258 ECAP1_IRQHandler, /* 87 */
259 GPH_IRQHandler, /* 88 */
260 EINT7_IRQHandler, /* 89 */
261 Default_Handler, /* 90 */
262 Default_Handler, /* 91 */
263 Default_Handler, /* 92 */
264 Default_Handler, /* 93 */
265 Default_Handler, /* 94 */
266 Default_Handler, /* 95 */
267 Default_Handler, /* 96 */
268 Default_Handler, /* 97 */
269 PDMA1_IRQHandler, /* 98 */
270 SCU_IRQHandler, /* 99 */
271 Default_Handler, /* 100 */
272 TRNG_IRQHandler, /* 101 */
273 };
274
275 #if defined ( __GNUC__ )
276 #pragma GCC diagnostic pop
277 #endif
278
279 /*----------------------------------------------------------------------------
280 Reset Handler called on controller reset
281 *----------------------------------------------------------------------------*/
Reset_Handler(void)282 void Reset_Handler(void)
283 {
284 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
285 __disable_irq();
286 #endif
287 __set_PSP((uint32_t)(&__INITIAL_SP));
288
289 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
290 __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
291 __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
292
293 __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL));
294 #endif
295
296 SystemInit(); /* CMSIS System Initialization */
297 __PROGRAM_START(); /* Enter PreMain (C library entry point) */
298 }
299
300 /* Dummy function for m2354 bsp */
__PC()301 uint32_t __PC()
302 {
303 return 0;
304 }
305