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