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