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