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