1 /*
2 * Copyright (c) 2009-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.6.0 startup_ARMv81MML.c
21 * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b
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
32 extern __NO_RETURN void __PROGRAM_START(void);
33
34 /*----------------------------------------------------------------------------
35 Internal References
36 *----------------------------------------------------------------------------*/
37 __NO_RETURN void Reset_Handler (void);
38
39 /*----------------------------------------------------------------------------
40 Exception / Interrupt Handler
41 *----------------------------------------------------------------------------*/
42 #define DEFAULT_IRQ_HANDLER(handler_name) \
43 __NO_RETURN void __WEAK handler_name(void); \
44 void handler_name(void) { \
45 while(1); \
46 }
47
48 /* Exceptions */
49 DEFAULT_IRQ_HANDLER(NMI_Handler)
50 DEFAULT_IRQ_HANDLER(HardFault_Handler)
51 DEFAULT_IRQ_HANDLER(MemManage_Handler)
52 DEFAULT_IRQ_HANDLER(BusFault_Handler)
53 DEFAULT_IRQ_HANDLER(UsageFault_Handler)
54 DEFAULT_IRQ_HANDLER(SecureFault_Handler)
55 DEFAULT_IRQ_HANDLER(SVC_Handler)
56 DEFAULT_IRQ_HANDLER(DebugMon_Handler)
57 DEFAULT_IRQ_HANDLER(PendSV_Handler)
58 DEFAULT_IRQ_HANDLER(SysTick_Handler)
59
60 DEFAULT_IRQ_HANDLER(WWDG_IRQHandler)
61 DEFAULT_IRQ_HANDLER(PVD_PVM_IRQHandler)
62 DEFAULT_IRQ_HANDLER(RTC_IRQHandler)
63 DEFAULT_IRQ_HANDLER(RTC_IRQHandler_S)
64 DEFAULT_IRQ_HANDLER(TAMP_IRQHandler)
65 DEFAULT_IRQ_HANDLER(TAMP_IRQHandler_S)
66 DEFAULT_IRQ_HANDLER(FLASH_IRQHandler)
67 DEFAULT_IRQ_HANDLER(FLASH_IRQHandler_S)
68 DEFAULT_IRQ_HANDLER(SERR_IRQHandler)
69 DEFAULT_IRQ_HANDLER(RCC_IRQHandler)
70 DEFAULT_IRQ_HANDLER(RCC_IRQHandler_S)
71 DEFAULT_IRQ_HANDLER(EXTI0_IRQHandler)
72 DEFAULT_IRQ_HANDLER(EXTI1_IRQHandler)
73 DEFAULT_IRQ_HANDLER(EXTI2_IRQHandler)
74 DEFAULT_IRQ_HANDLER(EXTI3_IRQHandler)
75 DEFAULT_IRQ_HANDLER(EXTI4_IRQHandler)
76 DEFAULT_IRQ_HANDLER(EXTI5_IRQHandler)
77 DEFAULT_IRQ_HANDLER(EXTI6_IRQHandler)
78 DEFAULT_IRQ_HANDLER(EXTI7_IRQHandler)
79 DEFAULT_IRQ_HANDLER(EXTI8_IRQHandler)
80 DEFAULT_IRQ_HANDLER(EXTI9_IRQHandler)
81 DEFAULT_IRQ_HANDLER(EXTI10_IRQHandler)
82 DEFAULT_IRQ_HANDLER(EXTI11_IRQHandler)
83 DEFAULT_IRQ_HANDLER(EXTI12_IRQHandler)
84 DEFAULT_IRQ_HANDLER(EXTI13_IRQHandler)
85 DEFAULT_IRQ_HANDLER(EXTI14_IRQHandler)
86 DEFAULT_IRQ_HANDLER(EXTI15_IRQHandler)
87 DEFAULT_IRQ_HANDLER(DMAMUX1_IRQHandler)
88 DEFAULT_IRQ_HANDLER(DMAMUX1_IRQHandler_S)
89 DEFAULT_IRQ_HANDLER(DMA1_Channel1_IRQHandler)
90 DEFAULT_IRQ_HANDLER(DMA1_Channel2_IRQHandler)
91 DEFAULT_IRQ_HANDLER(DMA1_Channel3_IRQHandler)
92 DEFAULT_IRQ_HANDLER(DMA1_Channel4_IRQHandler)
93 DEFAULT_IRQ_HANDLER(DMA1_Channel5_IRQHandler)
94 DEFAULT_IRQ_HANDLER(DMA1_Channel6_IRQHandler)
95 DEFAULT_IRQ_HANDLER(DMA1_Channel7_IRQHandler)
96 DEFAULT_IRQ_HANDLER(DMA1_Channel8_IRQHandler)
97 DEFAULT_IRQ_HANDLER(ADC1_2_IRQHandler)
98 DEFAULT_IRQ_HANDLER(DAC_IRQHandler)
99 DEFAULT_IRQ_HANDLER(FDCAN1_IT0_IRQHandler)
100 DEFAULT_IRQ_HANDLER(FDCAN1_IT1_IRQHandler)
101 DEFAULT_IRQ_HANDLER(TIM1_BRK_IRQHandler)
102 DEFAULT_IRQ_HANDLER(TIM1_UP_IRQHandler)
103 DEFAULT_IRQ_HANDLER(TIM1_TRG_COM_IRQHandler)
104 DEFAULT_IRQ_HANDLER(TIM1_CC_IRQHandler)
105 DEFAULT_IRQ_HANDLER(TIM2_IRQHandler)
106 DEFAULT_IRQ_HANDLER(TIM3_IRQHandler)
107 DEFAULT_IRQ_HANDLER(TIM4_IRQHandler)
108 DEFAULT_IRQ_HANDLER(TIM5_IRQHandler)
109 DEFAULT_IRQ_HANDLER(TIM6_IRQHandler)
110 DEFAULT_IRQ_HANDLER(TIM7_IRQHandler)
111 DEFAULT_IRQ_HANDLER(TIM8_BRK_IRQHandler)
112 DEFAULT_IRQ_HANDLER(TIM8_UP_IRQHandler)
113 DEFAULT_IRQ_HANDLER(TIM8_TRG_COM_IRQHandler)
114 DEFAULT_IRQ_HANDLER(TIM8_CC_IRQHandler)
115 DEFAULT_IRQ_HANDLER(I2C1_EV_IRQHandler)
116 DEFAULT_IRQ_HANDLER(I2C1_ER_IRQHandler)
117 DEFAULT_IRQ_HANDLER(I2C2_EV_IRQHandler)
118 DEFAULT_IRQ_HANDLER(I2C2_ER_IRQHandler)
119 DEFAULT_IRQ_HANDLER(SPI1_IRQHandler)
120 DEFAULT_IRQ_HANDLER(SPI2_IRQHandler)
121 DEFAULT_IRQ_HANDLER(USART1_IRQHandler)
122 DEFAULT_IRQ_HANDLER(USART2_IRQHandler)
123 DEFAULT_IRQ_HANDLER(USART3_IRQHandler)
124 DEFAULT_IRQ_HANDLER(UART4_IRQHandler)
125 DEFAULT_IRQ_HANDLER(UART5_IRQHandler)
126 DEFAULT_IRQ_HANDLER(LPUART1_IRQHandler)
127 DEFAULT_IRQ_HANDLER(LPTIM1_IRQHandler)
128 DEFAULT_IRQ_HANDLER(LPTIM2_IRQHandler)
129 DEFAULT_IRQ_HANDLER(TIM15_IRQHandler)
130 DEFAULT_IRQ_HANDLER(TIM16_IRQHandler)
131 DEFAULT_IRQ_HANDLER(TIM17_IRQHandler)
132 DEFAULT_IRQ_HANDLER(COMP_IRQHandler)
133 DEFAULT_IRQ_HANDLER(USB_FS_IRQHandler)
134 DEFAULT_IRQ_HANDLER(CRS_IRQHandler)
135 DEFAULT_IRQ_HANDLER(FMC_IRQHandler)
136 DEFAULT_IRQ_HANDLER(OCTOSPI1_IRQHandler)
137 DEFAULT_IRQ_HANDLER(SDMMC1_IRQHandler)
138 DEFAULT_IRQ_HANDLER(DMA2_Channel1_IRQHandler)
139 DEFAULT_IRQ_HANDLER(DMA2_Channel2_IRQHandler)
140 DEFAULT_IRQ_HANDLER(DMA2_Channel3_IRQHandler)
141 DEFAULT_IRQ_HANDLER(DMA2_Channel4_IRQHandler)
142 DEFAULT_IRQ_HANDLER(DMA2_Channel5_IRQHandler)
143 DEFAULT_IRQ_HANDLER(DMA2_Channel6_IRQHandler)
144 DEFAULT_IRQ_HANDLER(DMA2_Channel7_IRQHandler)
145 DEFAULT_IRQ_HANDLER(DMA2_Channel8_IRQHandler)
146 DEFAULT_IRQ_HANDLER(I2C3_EV_IRQHandler)
147 DEFAULT_IRQ_HANDLER(I2C3_ER_IRQHandler)
148 DEFAULT_IRQ_HANDLER(SAI1_IRQHandler)
149 DEFAULT_IRQ_HANDLER(SAI2_IRQHandler)
150 DEFAULT_IRQ_HANDLER(TSC_IRQHandler)
151 #ifdef STM32L562xx
152 DEFAULT_IRQ_HANDLER(AES_IRQHandler)
153 #endif
154 DEFAULT_IRQ_HANDLER(RNG_IRQHandler)
155 DEFAULT_IRQ_HANDLER(FPU_IRQHandler)
156 DEFAULT_IRQ_HANDLER(HASH_IRQHandler)
157 #ifdef STM32L562xx
158 DEFAULT_IRQ_HANDLER(PKA_IRQHandler)
159 #endif
160 DEFAULT_IRQ_HANDLER(LPTIM3_IRQHandler)
161 DEFAULT_IRQ_HANDLER(SPI3_IRQHandler)
162 DEFAULT_IRQ_HANDLER(I2C4_ER_IRQHandler)
163 DEFAULT_IRQ_HANDLER(I2C4_EV_IRQHandler)
164 DEFAULT_IRQ_HANDLER(DFSDM1_FLT0_IRQHandler)
165 DEFAULT_IRQ_HANDLER(DFSDM1_FLT1_IRQHandler)
166 DEFAULT_IRQ_HANDLER(DFSDM1_FLT2_IRQHandler)
167 DEFAULT_IRQ_HANDLER(DFSDM1_FLT3_IRQHandler)
168 DEFAULT_IRQ_HANDLER(UCPD1_IRQHandler)
169 DEFAULT_IRQ_HANDLER(ICACHE_IRQHandler)
170 DEFAULT_IRQ_HANDLER(OTFDEC1_IRQHandler)
171
172 /*----------------------------------------------------------------------------
173 Exception / Interrupt Vector table
174 *----------------------------------------------------------------------------*/
175
176 #if defined ( __GNUC__ )
177 #pragma GCC diagnostic push
178 #pragma GCC diagnostic ignored "-Wpedantic"
179 #endif
180
181 extern const VECTOR_TABLE_Type __VECTOR_TABLE[];
182 const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
183 (VECTOR_TABLE_Type)(&__INITIAL_SP),/* Initial Stack Pointer */
184 Reset_Handler, /* Reset Handler */
185 NMI_Handler, /* -14: NMI Handler */
186 HardFault_Handler, /* -13: Hard Fault Handler */
187 MemManage_Handler, /* -12: MPU Fault Handler */
188 BusFault_Handler, /* -11: Bus Fault Handler */
189 UsageFault_Handler, /* -10: Usage Fault Handler */
190 SecureFault_Handler, /* -9: Secure Fault Handler */
191 0, /* Reserved */
192 0, /* Reserved */
193 0, /* Reserved */
194 SVC_Handler, /* -5: SVCall Handler */
195 DebugMon_Handler, /* -4: Debug Monitor Handler */
196 0, /* Reserved */
197 PendSV_Handler, /* -2: PendSV Handler */
198 SysTick_Handler, /* -1: SysTick Handler */
199 WWDG_IRQHandler, /* 0: Window WatchDog */
200 PVD_PVM_IRQHandler, /* 1: PVD/PVM1/PVM2/PVM3/PVM4 through EXTI Line detection */
201 RTC_IRQHandler, /* 2: RTC non-secure interrupts through the EXTI line */
202 RTC_IRQHandler_S, /* 3: RRTC secure interrupts through the EXTI line */
203 TAMP_IRQHandler, /* 4: RTamper non-secure interrupts through the EXTI line */
204 TAMP_IRQHandler_S, /* 5: RTamper secure interrupts through the EXTI line */
205 FLASH_IRQHandler, /* 6: RFLASH non-secure interrupts */
206 FLASH_IRQHandler_S, /* 7: RFLASH secure global interrupts */
207 SERR_IRQHandler, /* 8: RSecure Error interrupts */
208 RCC_IRQHandler, /* 9: RRCC non-secure global interrupts */
209 RCC_IRQHandler_S, /* 10: RRCC secure global interrupts */
210 EXTI0_IRQHandler, /* 11: REXTI Line0 */
211 EXTI1_IRQHandler, /* 12: REXTI Line1 */
212 EXTI2_IRQHandler, /* 13: REXTI Line2 */
213 EXTI3_IRQHandler, /* 14: REXTI Line3 */
214 EXTI4_IRQHandler, /* 15: REXTI Line4 */
215 EXTI5_IRQHandler, /* 16: REXTI Line5 */
216 EXTI6_IRQHandler, /* 17: REXTI Line6 */
217 EXTI7_IRQHandler, /* 18: REXTI Line7 */
218 EXTI8_IRQHandler, /* 19: REXTI Line8 */
219 EXTI9_IRQHandler, /* 20: REXTI Line9 */
220 EXTI10_IRQHandler, /* 21: EXTI Line10 */
221 EXTI11_IRQHandler, /* 22: EXTI Line11 */
222 EXTI12_IRQHandler, /* 23: EXTI Line12 */
223 EXTI13_IRQHandler, /* 24: EXTI Line13 */
224 EXTI14_IRQHandler, /* 25: EXTI Line14 */
225 EXTI15_IRQHandler, /* 26: EXTI Line15 */
226 DMAMUX1_IRQHandler, /* 27: DMAMUX1 non-secure */
227 DMAMUX1_IRQHandler_S, /* 28: DMAMUX1 secure */
228 DMA1_Channel1_IRQHandler, /* 29: DMA1 Channel 1 */
229 DMA1_Channel2_IRQHandler, /* 30: DMA1 Channel 2 */
230 DMA1_Channel3_IRQHandler, /* 31: DMA1 Channel 3 */
231 DMA1_Channel4_IRQHandler, /* 32: DMA1 Channel 4 */
232 DMA1_Channel5_IRQHandler, /* 33: DMA1 Channel 5 */
233 DMA1_Channel6_IRQHandler, /* 34: DMA1 Channel 6 */
234 DMA1_Channel7_IRQHandler, /* 35: DMA1 Channel 7 */
235 DMA1_Channel8_IRQHandler, /* 36: DMA1 Channel 8 */
236 ADC1_2_IRQHandler, /* 37: ADC1 & ADC2 */
237 DAC_IRQHandler, /* 38: DAC1&2 underrun errors */
238 FDCAN1_IT0_IRQHandler, /* 39: FDCAN1 Interrupt 0 */
239 FDCAN1_IT1_IRQHandler, /* 40: FDCAN1 Interrupt 1 */
240 TIM1_BRK_IRQHandler, /* 41: TIM1 Break */
241 TIM1_UP_IRQHandler, /* 42: TIM1 Update */
242 TIM1_TRG_COM_IRQHandler, /* 43: TIM1 Trigger and Commutation */
243 TIM1_CC_IRQHandler, /* 44: TIM1 Capture Compare */
244 TIM2_IRQHandler, /* 45: TIM2 */
245 TIM3_IRQHandler, /* 46: TIM3 */
246 TIM4_IRQHandler, /* 47: TIM4 */
247 TIM5_IRQHandler, /* 48: TIM5 */
248 TIM6_IRQHandler, /* 49: TIM6 */
249 TIM7_IRQHandler, /* 50: TIM7 */
250 TIM8_BRK_IRQHandler, /* 51: TIM8 Break */
251 TIM8_UP_IRQHandler, /* 52: TIM8 Update */
252 TIM8_TRG_COM_IRQHandler, /* 53: TIM8 Trigger and Commutation */
253 TIM8_CC_IRQHandler, /* 54: TIM8 Capture Compare */
254 I2C1_EV_IRQHandler, /* 55: I2C1 Event */
255 I2C1_ER_IRQHandler, /* 56: I2C1 Error */
256 I2C2_EV_IRQHandler, /* 57: I2C2 Event */
257 I2C2_ER_IRQHandler, /* 58: I2C2 Error */
258 SPI1_IRQHandler, /* 59: SPI1 */
259 SPI2_IRQHandler, /* 60: SPI2 */
260 USART1_IRQHandler, /* 61: USART1 */
261 USART2_IRQHandler, /* 62: USART2 */
262 USART3_IRQHandler, /* 63: USART3 */
263 UART4_IRQHandler, /* 64: UART4 */
264 UART5_IRQHandler, /* 65: UART5 */
265 LPUART1_IRQHandler, /* 66: LP UART1 */
266 LPTIM1_IRQHandler, /* 67: LP TIM1 */
267 LPTIM2_IRQHandler, /* 68: LP TIM2 */
268 TIM15_IRQHandler, /* 69: TIM15 */
269 TIM16_IRQHandler, /* 70: TIM16 */
270 TIM17_IRQHandler, /* 71: TIM17 */
271 COMP_IRQHandler, /* 72: COMP1&2 */
272 USB_FS_IRQHandler, /* 73: USB FS */
273 CRS_IRQHandler, /* 74: CRS */
274 FMC_IRQHandler, /* 75: FMC */
275 OCTOSPI1_IRQHandler, /* 76: OctoSPI1 global interrupt */
276 0, /* 77: Reserved */
277 SDMMC1_IRQHandler, /* 78: SDMMC1 */
278 0, /* 79: Reserved */
279 DMA2_Channel1_IRQHandler, /* 80: DMA2 Channel 1 */
280 DMA2_Channel2_IRQHandler, /* 81: DMA2 Channel 2 */
281 DMA2_Channel3_IRQHandler, /* 82: DMA2 Channel 3 */
282 DMA2_Channel4_IRQHandler, /* 83: DMA2 Channel 4 */
283 DMA2_Channel5_IRQHandler, /* 84: DMA2 Channel 5 */
284 DMA2_Channel6_IRQHandler, /* 85: DMA2 Channel 6 */
285 DMA2_Channel7_IRQHandler, /* 86: DMA2 Channel 7 */
286 DMA2_Channel8_IRQHandler, /* 87: DMA2 Channel 8 */
287 I2C3_EV_IRQHandler, /* 88: I2C3 event */
288 I2C3_ER_IRQHandler, /* 89: I2C3 error */
289 SAI1_IRQHandler, /* 90: Serial Audio Interface 1 global interrupt */
290 SAI2_IRQHandler, /* 91: Serial Audio Interface 2 global interrupt */
291 TSC_IRQHandler, /* 92: Touch Sense Controller global interrupt */
292 #ifdef STM32L562xx
293 AES_IRQHandler, /* 93: AES global interrupt */
294 #else
295 0, /* 93: Reserved */
296 #endif
297 RNG_IRQHandler, /* 94: RNG global interrupt */
298 FPU_IRQHandler, /* 95: FPU */
299 HASH_IRQHandler, /* 96: HASH global interrupt */
300 #ifdef STM32L562xx
301 PKA_IRQHandler, /* 97: PKA global interrupt */
302 #else
303 0, /* 97: Reserved */
304 #endif
305 LPTIM3_IRQHandler, /* 98: LP TIM3 */
306 SPI3_IRQHandler, /* 99: SPI3 */
307 I2C4_ER_IRQHandler, /* 100: I2C4 error */
308 I2C4_EV_IRQHandler, /* 101: I2C4 event */
309 DFSDM1_FLT0_IRQHandler, /* 102: DFSDM1 Filter 0 global Interrupt */
310 DFSDM1_FLT1_IRQHandler, /* 103: DFSDM1 Filter 1 global Interrupt */
311 DFSDM1_FLT2_IRQHandler, /* 104: DFSDM1 Filter 2 global Interrupt */
312 DFSDM1_FLT3_IRQHandler, /* 105: DFSDM1 Filter 3 global Interrupt */
313 UCPD1_IRQHandler, /* 106: UCPD1 */
314 ICACHE_IRQHandler, /* 107: ICACHE */
315 OTFDEC1_IRQHandler /* 108: OTFDEC1 */
316 };
317
318 #if defined ( __GNUC__ )
319 #pragma GCC diagnostic pop
320 #endif
321
322 /*----------------------------------------------------------------------------
323 Reset Handler called on controller reset
324 *----------------------------------------------------------------------------*/
Reset_Handler(void)325 void Reset_Handler(void)
326 {
327 __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
328
329 __set_PSP((uint32_t)(&__INITIAL_SP));
330 __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
331
332 SystemInit(); /* CMSIS System Initialization */
333 __PROGRAM_START(); /* Enter PreMain (C library entry point) */
334 }
335