startup_ARMv8MML.S 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. /******************************************************************************
  2. * @file startup_ARMv8MML.S
  3. * @brief CMSIS-Core Device Startup File for ARMv8MML evice
  4. * @version V2.3.0
  5. * @date 26. May 2021
  6. ******************************************************************************/
  7. /*
  8. * Copyright (c) 2009-2021 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. .syntax unified
  25. .arch armv8-m.main
  26. #define __INITIAL_SP __StackTop
  27. #define __STACK_LIMIT __StackLimit
  28. #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
  29. #define __STACK_SEAL __StackSeal
  30. #endif
  31. .section .vectors
  32. .align 2
  33. .globl __Vectors
  34. .globl __Vectors_End
  35. .globl __Vectors_Size
  36. __Vectors:
  37. .long __INITIAL_SP /* Initial Stack Pointer */
  38. .long Reset_Handler /* Reset Handler */
  39. .long NMI_Handler /* -14 NMI Handler */
  40. .long HardFault_Handler /* -13 Hard Fault Handler */
  41. .long MemManage_Handler /* -12 MPU Fault Handler */
  42. .long BusFault_Handler /* -11 Bus Fault Handler */
  43. .long UsageFault_Handler /* -10 Usage Fault Handler */
  44. .long SecureFault_Handler /* -9 Secure Fault Handler */
  45. .long 0 /* Reserved */
  46. .long 0 /* Reserved */
  47. .long 0 /* Reserved */
  48. .long SVC_Handler /* -5 SVC Handler */
  49. .long DebugMon_Handler /* -4 Debug Monitor Handler */
  50. .long 0 /* Reserved */
  51. .long PendSV_Handler /* -2 PendSV Handler */
  52. .long SysTick_Handler /* -1 SysTick Handler */
  53. /* Interrupts */
  54. .long Interrupt0_Handler /* 0 Interrupt 0 */
  55. .long Interrupt1_Handler /* 1 Interrupt 1 */
  56. .long Interrupt2_Handler /* 2 Interrupt 2 */
  57. .long Interrupt3_Handler /* 3 Interrupt 3 */
  58. .long Interrupt4_Handler /* 4 Interrupt 4 */
  59. .long Interrupt5_Handler /* 5 Interrupt 5 */
  60. .long Interrupt6_Handler /* 6 Interrupt 6 */
  61. .long Interrupt7_Handler /* 7 Interrupt 7 */
  62. .long Interrupt8_Handler /* 8 Interrupt 8 */
  63. .long Interrupt9_Handler /* 9 Interrupt 9 */
  64. .space (470 * 4) /* Interrupts 10 .. 480 are left out */
  65. __Vectors_End:
  66. .equ __Vectors_Size, __Vectors_End - __Vectors
  67. .size __Vectors, . - __Vectors
  68. .thumb
  69. .section .text
  70. .align 2
  71. .thumb_func
  72. .type Reset_Handler, %function
  73. .globl Reset_Handler
  74. .fnstart
  75. Reset_Handler:
  76. ldr r0, =__INITIAL_SP
  77. msr psp, r0
  78. ldr r0, =__STACK_LIMIT
  79. msr msplim, r0
  80. msr psplim, r0
  81. #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
  82. ldr r0, =__STACK_SEAL
  83. ldr r1, =0xFEF5EDA5U
  84. strd r1,r1,[r0,#0]
  85. #endif
  86. bl SystemInit
  87. ldr r4, =__copy_table_start__
  88. ldr r5, =__copy_table_end__
  89. .L_loop0:
  90. cmp r4, r5
  91. bge .L_loop0_done
  92. ldr r1, [r4] /* source address */
  93. ldr r2, [r4, #4] /* destination address */
  94. ldr r3, [r4, #8] /* word count */
  95. lsls r3, r3, #2 /* byte count */
  96. .L_loop0_0:
  97. subs r3, #4 /* decrement byte count */
  98. ittt ge
  99. ldrge r0, [r1, r3]
  100. strge r0, [r2, r3]
  101. bge .L_loop0_0
  102. adds r4, #12
  103. b .L_loop0
  104. .L_loop0_done:
  105. ldr r3, =__zero_table_start__
  106. ldr r4, =__zero_table_end__
  107. .L_loop2:
  108. cmp r3, r4
  109. bge .L_loop2_done
  110. ldr r1, [r3] /* destination address */
  111. ldr r2, [r3, #4] /* word count */
  112. lsls r2, r2, #2 /* byte count */
  113. movs r0, 0
  114. .L_loop2_0:
  115. subs r2, #4 /* decrement byte count */
  116. itt ge
  117. strge r0, [r1, r2]
  118. bge .L_loop2_0
  119. adds r3, #8
  120. b .L_loop2
  121. .L_loop2_done:
  122. bl _start
  123. .fnend
  124. .size Reset_Handler, . - Reset_Handler
  125. /* The default macro is not used for HardFault_Handler
  126. * because this results in a poor debug illusion.
  127. */
  128. .thumb_func
  129. .type HardFault_Handler, %function
  130. .weak HardFault_Handler
  131. .fnstart
  132. HardFault_Handler:
  133. b .
  134. .fnend
  135. .size HardFault_Handler, . - HardFault_Handler
  136. .thumb_func
  137. .type Default_Handler, %function
  138. .weak Default_Handler
  139. .fnstart
  140. Default_Handler:
  141. b .
  142. .fnend
  143. .size Default_Handler, . - Default_Handler
  144. /* Macro to define default exception/interrupt handlers.
  145. * Default handler are weak symbols with an endless loop.
  146. * They can be overwritten by real handlers.
  147. */
  148. .macro Set_Default_Handler Handler_Name
  149. .weak \Handler_Name
  150. .set \Handler_Name, Default_Handler
  151. .endm
  152. /* Default exception/interrupt handler */
  153. Set_Default_Handler NMI_Handler
  154. Set_Default_Handler MemManage_Handler
  155. Set_Default_Handler BusFault_Handler
  156. Set_Default_Handler UsageFault_Handler
  157. Set_Default_Handler SecureFault_Handler
  158. Set_Default_Handler SVC_Handler
  159. Set_Default_Handler DebugMon_Handler
  160. Set_Default_Handler PendSV_Handler
  161. Set_Default_Handler SysTick_Handler
  162. Set_Default_Handler Interrupt0_Handler
  163. Set_Default_Handler Interrupt1_Handler
  164. Set_Default_Handler Interrupt2_Handler
  165. Set_Default_Handler Interrupt3_Handler
  166. Set_Default_Handler Interrupt4_Handler
  167. Set_Default_Handler Interrupt5_Handler
  168. Set_Default_Handler Interrupt6_Handler
  169. Set_Default_Handler Interrupt7_Handler
  170. Set_Default_Handler Interrupt8_Handler
  171. Set_Default_Handler Interrupt9_Handler
  172. .end