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