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