1 /******************************************************************************
2  * @file     startup_ARMCM55.c
3  * @brief    CMSIS-Core Device Startup File for Cortex-M55 Device
4  * @version  V1.1.0
5  * @date     16. December 2020
6  ******************************************************************************/
7 /*
8  * Copyright (c) 2020 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 #if defined (ARMCM55)
26   #include "ARMCM55.h"
27 #else
28   #error device not specified!
29 #endif
30 
31 /*----------------------------------------------------------------------------
32   External References
33  *----------------------------------------------------------------------------*/
34 extern uint32_t __INITIAL_SP;
35 extern uint32_t __STACK_LIMIT;
36 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
37 extern uint32_t __STACK_SEAL;
38 #endif
39 
40 extern __NO_RETURN void __PROGRAM_START(void);
41 
42 /*----------------------------------------------------------------------------
43   Internal References
44  *----------------------------------------------------------------------------*/
45 __NO_RETURN void Reset_Handler  (void);
46             void Default_Handler(void);
47 
48 /*----------------------------------------------------------------------------
49   Exception / Interrupt Handler
50  *----------------------------------------------------------------------------*/
51 /* Exceptions */
52 void NMI_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
53 void HardFault_Handler      (void) __attribute__ ((weak));
54 void MemManage_Handler      (void) __attribute__ ((weak, alias("Default_Handler")));
55 void BusFault_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
56 void UsageFault_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
57 void SecureFault_Handler    (void) __attribute__ ((weak, alias("Default_Handler")));
58 void SVC_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
59 void DebugMon_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
60 void PendSV_Handler         (void) __attribute__ ((weak, alias("Default_Handler")));
61 void SysTick_Handler        (void) __attribute__ ((weak, alias("Default_Handler")));
62 
63 void Interrupt0_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
64 void Interrupt1_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
65 void Interrupt2_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
66 void Interrupt3_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
67 void Interrupt4_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
68 void Interrupt5_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
69 void Interrupt6_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
70 void Interrupt7_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
71 void Interrupt8_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
72 void Interrupt9_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
73 
74 
75 /*----------------------------------------------------------------------------
76   Exception / Interrupt Vector table
77  *----------------------------------------------------------------------------*/
78 
79 #if defined ( __GNUC__ )
80 #pragma GCC diagnostic push
81 #pragma GCC diagnostic ignored "-Wpedantic"
82 #endif
83 
84 extern const VECTOR_TABLE_Type __VECTOR_TABLE[496];
85        const VECTOR_TABLE_Type __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = {
86   (VECTOR_TABLE_Type)(&__INITIAL_SP),       /*     Initial Stack Pointer */
87   Reset_Handler,                            /*     Reset Handler */
88   NMI_Handler,                              /* -14 NMI Handler */
89   HardFault_Handler,                        /* -13 Hard Fault Handler */
90   MemManage_Handler,                        /* -12 MPU Fault Handler */
91   BusFault_Handler,                         /* -11 Bus Fault Handler */
92   UsageFault_Handler,                       /* -10 Usage Fault Handler */
93   SecureFault_Handler,                      /*  -9 Secure Fault Handler */
94   0,                                        /*     Reserved */
95   0,                                        /*     Reserved */
96   0,                                        /*     Reserved */
97   SVC_Handler,                              /*  -5 SVC Handler */
98   DebugMon_Handler,                         /*  -4 Debug Monitor Handler */
99   0,                                        /*     Reserved */
100   PendSV_Handler,                           /*  -2 PendSV Handler */
101   SysTick_Handler,                          /*  -1 SysTick Handler */
102 
103   /* Interrupts */
104   Interrupt0_Handler,                       /*   0 Interrupt 0 */
105   Interrupt1_Handler,                       /*   1 Interrupt 1 */
106   Interrupt2_Handler,                       /*   2 Interrupt 2 */
107   Interrupt3_Handler,                       /*   3 Interrupt 3 */
108   Interrupt4_Handler,                       /*   4 Interrupt 4 */
109   Interrupt5_Handler,                       /*   5 Interrupt 5 */
110   Interrupt6_Handler,                       /*   6 Interrupt 6 */
111   Interrupt7_Handler,                       /*   7 Interrupt 7 */
112   Interrupt8_Handler,                       /*   8 Interrupt 8 */
113   Interrupt9_Handler                        /*   9 Interrupt 9 */
114                                             /* Interrupts 10 .. 480 are left out */
115 };
116 
117 #if defined ( __GNUC__ )
118 #pragma GCC diagnostic pop
119 #endif
120 
121 /*----------------------------------------------------------------------------
122   Reset Handler called on controller reset
123  *----------------------------------------------------------------------------*/
Reset_Handler(void)124 __NO_RETURN void Reset_Handler(void)
125 {
126   __set_PSP((uint32_t)(&__INITIAL_SP));
127 
128   __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
129   __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
130 
131 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
132   __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL));
133 #endif
134 
135   SystemInit();                             /* CMSIS System Initialization */
136   __PROGRAM_START();                        /* Enter PreMain (C library entry point) */
137 }
138 
139 
140 #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
141   #pragma clang diagnostic push
142   #pragma clang diagnostic ignored "-Wmissing-noreturn"
143 #endif
144 
145 /*----------------------------------------------------------------------------
146   Hard Fault Handler
147  *----------------------------------------------------------------------------*/
HardFault_Handler(void)148 void HardFault_Handler(void)
149 {
150   while(1);
151 }
152 
153 /*----------------------------------------------------------------------------
154   Default Handler for Exceptions / Interrupts
155  *----------------------------------------------------------------------------*/
Default_Handler(void)156 void Default_Handler(void)
157 {
158   while(1);
159 }
160 
161 #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
162   #pragma clang diagnostic pop
163 #endif
164 
165