startup_ARMv8MML.c 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /******************************************************************************
  2. * @file startup_ARMv8MML.c
  3. * @brief CMSIS-Core Device Startup File for ARMv8MML 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. #if defined (ARMv8MML)
  25. #include "ARMv8MML.h"
  26. #elif defined (ARMv8MML_DSP)
  27. #include "ARMv8MML_DSP.h"
  28. #elif defined (ARMv8MML_SP)
  29. #include "ARMv8MML_SP.h"
  30. #elif defined (ARMv8MML_DSP_SP)
  31. #include "ARMv8MML_DSP_SP.h"
  32. #elif defined (ARMv8MML_DP)
  33. #include "ARMv8MML_DP.h"
  34. #elif defined (ARMv8MML_DSP_DP)
  35. #include "ARMv8MML_DSP_DP.h"
  36. #else
  37. #error device not specified!
  38. #endif
  39. /*----------------------------------------------------------------------------
  40. External References
  41. *----------------------------------------------------------------------------*/
  42. extern uint32_t __INITIAL_SP;
  43. extern uint32_t __STACK_LIMIT;
  44. #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
  45. extern uint32_t __STACK_SEAL;
  46. #endif
  47. extern __NO_RETURN void __PROGRAM_START(void);
  48. /*----------------------------------------------------------------------------
  49. Internal References
  50. *----------------------------------------------------------------------------*/
  51. __NO_RETURN void Reset_Handler (void);
  52. void Default_Handler(void);
  53. /*----------------------------------------------------------------------------
  54. Exception / Interrupt Handler
  55. *----------------------------------------------------------------------------*/
  56. /* Exceptions */
  57. void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  58. void HardFault_Handler (void) __attribute__ ((weak));
  59. void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  60. void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  61. void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  62. void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  63. void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  64. void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  65. void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  66. void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  67. void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  68. void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  69. void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  70. void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  71. void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  72. void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  73. void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  74. void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  75. void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  76. void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
  77. /*----------------------------------------------------------------------------
  78. Exception / Interrupt Vector table
  79. *----------------------------------------------------------------------------*/
  80. #if defined ( __GNUC__ )
  81. #pragma GCC diagnostic push
  82. #pragma GCC diagnostic ignored "-Wpedantic"
  83. #endif
  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. /* Interrupts */
  103. Interrupt0_Handler, /* 0 Interrupt 0 */
  104. Interrupt1_Handler, /* 1 Interrupt 1 */
  105. Interrupt2_Handler, /* 2 Interrupt 2 */
  106. Interrupt3_Handler, /* 3 Interrupt 3 */
  107. Interrupt4_Handler, /* 4 Interrupt 4 */
  108. Interrupt5_Handler, /* 5 Interrupt 5 */
  109. Interrupt6_Handler, /* 6 Interrupt 6 */
  110. Interrupt7_Handler, /* 7 Interrupt 7 */
  111. Interrupt8_Handler, /* 8 Interrupt 8 */
  112. Interrupt9_Handler /* 9 Interrupt 9 */
  113. /* Interrupts 10 .. 480 are left out */
  114. };
  115. #if defined ( __GNUC__ )
  116. #pragma GCC diagnostic pop
  117. #endif
  118. /*----------------------------------------------------------------------------
  119. Reset Handler called on controller reset
  120. *----------------------------------------------------------------------------*/
  121. __NO_RETURN void Reset_Handler(void)
  122. {
  123. __set_PSP((uint32_t)(&__INITIAL_SP));
  124. __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
  125. __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
  126. #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
  127. __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL));
  128. #endif
  129. SystemInit(); /* CMSIS System Initialization */
  130. __PROGRAM_START(); /* Enter PreMain (C library entry point) */
  131. }
  132. #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
  133. #pragma clang diagnostic push
  134. #pragma clang diagnostic ignored "-Wmissing-noreturn"
  135. #endif
  136. /*----------------------------------------------------------------------------
  137. Hard Fault Handler
  138. *----------------------------------------------------------------------------*/
  139. void HardFault_Handler(void)
  140. {
  141. while(1);
  142. }
  143. /*----------------------------------------------------------------------------
  144. Default Handler for Exceptions / Interrupts
  145. *----------------------------------------------------------------------------*/
  146. void Default_Handler(void)
  147. {
  148. while(1);
  149. }
  150. #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
  151. #pragma clang diagnostic pop
  152. #endif