1/****************************************************************************** 2 * @file startup_ARMCM23.S 3 * @brief CMSIS-Core Device Startup File for Cortex-M23 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.base 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 0 /* Reserved */ 45 .long 0 /* Reserved */ 46 .long 0 /* Reserved */ 47 .long 0 /* Reserved */ 48 .long 0 /* Reserved */ 49 .long 0 /* Reserved */ 50 .long 0 /* Reserved */ 51 .long SVC_Handler /* -5 SVCall Handler */ 52 .long 0 /* Reserved */ 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 (214 * 4) /* Interrupts 10 .. 224 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 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) 88 ldr r0, =__STACK_LIMIT 89 msr msplim, r0 90 msr psplim, r0 91 92 ldr r0, =__STACK_SEAL 93 ldr r1, =0xFEF5EDA5U 94 str r1,[r0,#0] 95 str r1,[r0,#4] 96 #endif 97 98 bl SystemInit 99 100 bl __main 101 102 .fnend 103 .size Reset_Handler, . - Reset_Handler 104 105 106/* The default macro is not used for HardFault_Handler 107 * because this results in a poor debug illusion. 108 */ 109 .thumb_func 110 .type HardFault_Handler, %function 111 .weak HardFault_Handler 112 .fnstart 113HardFault_Handler: 114 b . 115 .fnend 116 .size HardFault_Handler, . - HardFault_Handler 117 118 .thumb_func 119 .type Default_Handler, %function 120 .weak Default_Handler 121 .fnstart 122Default_Handler: 123 b . 124 .fnend 125 .size Default_Handler, . - Default_Handler 126 127/* Macro to define default exception/interrupt handlers. 128 * Default handler are weak symbols with an endless loop. 129 * They can be overwritten by real handlers. 130 */ 131 .macro Set_Default_Handler Handler_Name 132 .weak \Handler_Name 133 .set \Handler_Name, Default_Handler 134 .endm 135 136 137/* Default exception/interrupt handler */ 138 139 Set_Default_Handler NMI_Handler 140 Set_Default_Handler SVC_Handler 141 Set_Default_Handler PendSV_Handler 142 Set_Default_Handler SysTick_Handler 143 144 Set_Default_Handler Interrupt0_Handler 145 Set_Default_Handler Interrupt1_Handler 146 Set_Default_Handler Interrupt2_Handler 147 Set_Default_Handler Interrupt3_Handler 148 Set_Default_Handler Interrupt4_Handler 149 Set_Default_Handler Interrupt5_Handler 150 Set_Default_Handler Interrupt6_Handler 151 Set_Default_Handler Interrupt7_Handler 152 Set_Default_Handler Interrupt8_Handler 153 Set_Default_Handler Interrupt9_Handler 154 155 .end 156