1/****************************************************************************** 2 * @file startup_ARMCM33.S 3 * @brief CMSIS-Core Device Startup File for Cortex-M33 Device 4 * @version V2.0.0 5 * @date 26. May 2021 6 ******************************************************************************/ 7/* 8 * Copyright (c) 2009-2021 Arm Limited. All rights reserved. 9 * 10 * SPDX-License-Identifier: Apache-2.0 11 * 12 * Licensed under the Apache License, Version 2.0 (the License); you may 13 * not use this file except in compliance with the License. 14 * You may obtain a copy of the License at 15 * 16 * www.apache.org/licenses/LICENSE-2.0 17 * 18 * Unless required by applicable law or agreed to in writing, software 19 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 20 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 21 * See the License for the specific language governing permissions and 22 * limitations under the License. 23 */ 24 25 .syntax unified 26 .arch armv8-m.main 27 28 #define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit 29 #define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base 30 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) 31 #define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base 32 #endif 33 34 .section RESET 35 .align 2 36 .globl __Vectors 37 .globl __Vectors_End 38 .globl __Vectors_Size 39__Vectors: 40 .long __INITIAL_SP /* Initial Stack Pointer */ 41 .long Reset_Handler /* Reset Handler */ 42 .long NMI_Handler /* -14 NMI Handler */ 43 .long HardFault_Handler /* -13 Hard Fault Handler */ 44 .long MemManage_Handler /* -12 MPU Fault Handler */ 45 .long BusFault_Handler /* -11 Bus Fault Handler */ 46 .long UsageFault_Handler /* -10 Usage Fault Handler */ 47 .long SecureFault_Handler /* -9 Secure Fault Handler */ 48 .long 0 /* Reserved */ 49 .long 0 /* Reserved */ 50 .long 0 /* Reserved */ 51 .long SVC_Handler /* -5 SVCall Handler */ 52 .long DebugMon_Handler /* -4 Debug Monitor Handler */ 53 .long 0 /* Reserved */ 54 .long PendSV_Handler /* -2 PendSV Handler */ 55 .long SysTick_Handler /* -1 SysTick Handler */ 56 57 /* Interrupts */ 58 .long Interrupt0_Handler /* 0 Interrupt 0 */ 59 .long Interrupt1_Handler /* 1 Interrupt 1 */ 60 .long Interrupt2_Handler /* 2 Interrupt 2 */ 61 .long Interrupt3_Handler /* 3 Interrupt 3 */ 62 .long Interrupt4_Handler /* 4 Interrupt 4 */ 63 .long Interrupt5_Handler /* 5 Interrupt 5 */ 64 .long Interrupt6_Handler /* 6 Interrupt 6 */ 65 .long Interrupt7_Handler /* 7 Interrupt 7 */ 66 .long Interrupt8_Handler /* 8 Interrupt 8 */ 67 .long Interrupt9_Handler /* 9 Interrupt 9 */ 68 69 .space (470 * 4) /* Interrupts 10 .. 480 are left out */ 70__Vectors_End: 71 .equ __Vectors_Size, __Vectors_End - __Vectors 72 .size __Vectors, . - __Vectors 73 74 75 .thumb 76 .section .text 77 .align 2 78 79 .thumb_func 80 .type Reset_Handler, %function 81 .globl Reset_Handler 82 .fnstart 83Reset_Handler: 84 ldr r0, =__INITIAL_SP 85 msr psp, r0 86 87 ldr r0, =__STACK_LIMIT 88 msr msplim, r0 89 msr psplim, r0 90 91 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) 92 ldr r0, =__STACK_SEAL 93 ldr r1, =0xFEF5EDA5U 94 strd r1,r1,[r0,#0] 95 #endif 96 97 bl SystemInit 98 99 bl __main 100 101 .fnend 102 .size Reset_Handler, . - Reset_Handler 103 104 105/* The default macro is not used for HardFault_Handler 106 * because this results in a poor debug illusion. 107 */ 108 .thumb_func 109 .type HardFault_Handler, %function 110 .weak HardFault_Handler 111 .fnstart 112HardFault_Handler: 113 b . 114 .fnend 115 .size HardFault_Handler, . - HardFault_Handler 116 117 .thumb_func 118 .type Default_Handler, %function 119 .weak Default_Handler 120 .fnstart 121Default_Handler: 122 b . 123 .fnend 124 .size Default_Handler, . - Default_Handler 125 126/* Macro to define default exception/interrupt handlers. 127 * Default handler are weak symbols with an endless loop. 128 * They can be overwritten by real handlers. 129 */ 130 .macro Set_Default_Handler Handler_Name 131 .weak \Handler_Name 132 .set \Handler_Name, Default_Handler 133 .endm 134 135 136/* Default exception/interrupt handler */ 137 138 Set_Default_Handler NMI_Handler 139 Set_Default_Handler MemManage_Handler 140 Set_Default_Handler BusFault_Handler 141 Set_Default_Handler UsageFault_Handler 142 Set_Default_Handler SecureFault_Handler 143 Set_Default_Handler SVC_Handler 144 Set_Default_Handler DebugMon_Handler 145 Set_Default_Handler PendSV_Handler 146 Set_Default_Handler SysTick_Handler 147 148 Set_Default_Handler Interrupt0_Handler 149 Set_Default_Handler Interrupt1_Handler 150 Set_Default_Handler Interrupt2_Handler 151 Set_Default_Handler Interrupt3_Handler 152 Set_Default_Handler Interrupt4_Handler 153 Set_Default_Handler Interrupt5_Handler 154 Set_Default_Handler Interrupt6_Handler 155 Set_Default_Handler Interrupt7_Handler 156 Set_Default_Handler Interrupt8_Handler 157 Set_Default_Handler Interrupt9_Handler 158 159 .end 160