/****************************************************************************** * @file startup_ARMCM23.S * @brief CMSIS-Core Device Startup File for Cortex-M23 Device * @version V2.0.0 * @date 26. May 2021 ******************************************************************************/ /* * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ .syntax unified .arch armv8-m.base #define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit #define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) #define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base #endif .section RESET .align 2 .globl __Vectors .globl __Vectors_End .globl __Vectors_Size __Vectors: .long __INITIAL_SP /* Initial Stack Pointer */ .long Reset_Handler /* Reset Handler */ .long NMI_Handler /* -14 NMI Handler */ .long HardFault_Handler /* -13 Hard Fault Handler */ .long 0 /* Reserved */ .long 0 /* Reserved */ .long 0 /* Reserved */ .long 0 /* Reserved */ .long 0 /* Reserved */ .long 0 /* Reserved */ .long 0 /* Reserved */ .long SVC_Handler /* -5 SVCall Handler */ .long 0 /* Reserved */ .long 0 /* Reserved */ .long PendSV_Handler /* -2 PendSV Handler */ .long SysTick_Handler /* -1 SysTick Handler */ /* Interrupts */ .long Interrupt0_Handler /* 0 Interrupt 0 */ .long Interrupt1_Handler /* 1 Interrupt 1 */ .long Interrupt2_Handler /* 2 Interrupt 2 */ .long Interrupt3_Handler /* 3 Interrupt 3 */ .long Interrupt4_Handler /* 4 Interrupt 4 */ .long Interrupt5_Handler /* 5 Interrupt 5 */ .long Interrupt6_Handler /* 6 Interrupt 6 */ .long Interrupt7_Handler /* 7 Interrupt 7 */ .long Interrupt8_Handler /* 8 Interrupt 8 */ .long Interrupt9_Handler /* 9 Interrupt 9 */ .space (214 * 4) /* Interrupts 10 .. 224 are left out */ __Vectors_End: .equ __Vectors_Size, __Vectors_End - __Vectors .size __Vectors, . - __Vectors .thumb .section .text .align 2 .thumb_func .type Reset_Handler, %function .globl Reset_Handler .fnstart Reset_Handler: ldr r0, =__INITIAL_SP msr psp, r0 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) ldr r0, =__STACK_LIMIT msr msplim, r0 msr psplim, r0 ldr r0, =__STACK_SEAL ldr r1, =0xFEF5EDA5U str r1,[r0,#0] str r1,[r0,#4] #endif bl SystemInit bl __main .fnend .size Reset_Handler, . - Reset_Handler /* The default macro is not used for HardFault_Handler * because this results in a poor debug illusion. */ .thumb_func .type HardFault_Handler, %function .weak HardFault_Handler .fnstart HardFault_Handler: b . .fnend .size HardFault_Handler, . - HardFault_Handler .thumb_func .type Default_Handler, %function .weak Default_Handler .fnstart Default_Handler: b . .fnend .size Default_Handler, . - Default_Handler /* Macro to define default exception/interrupt handlers. * Default handler are weak symbols with an endless loop. * They can be overwritten by real handlers. */ .macro Set_Default_Handler Handler_Name .weak \Handler_Name .set \Handler_Name, Default_Handler .endm /* Default exception/interrupt handler */ Set_Default_Handler NMI_Handler Set_Default_Handler SVC_Handler Set_Default_Handler PendSV_Handler Set_Default_Handler SysTick_Handler Set_Default_Handler Interrupt0_Handler Set_Default_Handler Interrupt1_Handler Set_Default_Handler Interrupt2_Handler Set_Default_Handler Interrupt3_Handler Set_Default_Handler Interrupt4_Handler Set_Default_Handler Interrupt5_Handler Set_Default_Handler Interrupt6_Handler Set_Default_Handler Interrupt7_Handler Set_Default_Handler Interrupt8_Handler Set_Default_Handler Interrupt9_Handler .end