startup_ARMCM23.s 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. ;/**************************************************************************//**
  2. ; * @file startup_ARMCM23.s
  3. ; * @brief CMSIS Core Device Startup File for
  4. ; * ARMCM23 Device
  5. ; * @version V1.1.0
  6. ; * @date 08. April 2021
  7. ; ******************************************************************************/
  8. ;/*
  9. ; * Copyright (c) 2009-2021 Arm Limited. All rights reserved.
  10. ; *
  11. ; * SPDX-License-Identifier: Apache-2.0
  12. ; *
  13. ; * Licensed under the Apache License, Version 2.0 (the License); you may
  14. ; * not use this file except in compliance with the License.
  15. ; * You may obtain a copy of the License at
  16. ; *
  17. ; * www.apache.org/licenses/LICENSE-2.0
  18. ; *
  19. ; * Unless required by applicable law or agreed to in writing, software
  20. ; * distributed under the License is distributed on an AS IS BASIS, WITHOUT
  21. ; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  22. ; * See the License for the specific language governing permissions and
  23. ; * limitations under the License.
  24. ; */
  25. ;
  26. ; The modules in this file are included in the libraries, and may be replaced
  27. ; by any user-defined modules that define the PUBLIC symbol _program_start or
  28. ; a user defined start symbol.
  29. ; To override the cstartup defined in the library, simply add your modified
  30. ; version to the workbench project.
  31. ;
  32. ; The vector table is normally located at address 0.
  33. ; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
  34. ; The name "__vector_table" has special meaning for C-SPY:
  35. ; it is where the SP start value is found, and the NVIC vector
  36. ; table register (VTOR) is initialized to this address if != 0.
  37. ;
  38. ; Cortex-M version
  39. ;
  40. MODULE ?cstartup
  41. ;; Forward declaration of sections.
  42. SECTION CSTACK:DATA:NOROOT(3)
  43. SECTION .intvec:CODE:NOROOT(2)
  44. EXTERN __iar_program_start
  45. EXTERN SystemInit
  46. PUBLIC __vector_table
  47. PUBLIC __vector_table_0x1c
  48. PUBLIC __Vectors
  49. PUBLIC __Vectors_End
  50. PUBLIC __Vectors_Size
  51. #define __INITIAL_SP sfe(CSTACK)
  52. #define __STACK_LIMIT sfb(CSTACK)
  53. #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
  54. SECTION STACKSEAL:DATA:NOROOT(3)
  55. #define __STACK_SEAL sfb(STACKSEAL)
  56. #endif
  57. DATA
  58. __vector_table
  59. DCD __INITIAL_SP ; Top of Stack
  60. DCD Reset_Handler ; Reset Handler
  61. DCD NMI_Handler ; -14 NMI Handler
  62. DCD HardFault_Handler ; -13 Hard Fault Handler
  63. DCD 0 ; Reserved
  64. DCD 0 ; Reserved
  65. DCD 0 ; Reserved
  66. __vector_table_0x1c
  67. DCD 0 ; Reserved
  68. DCD 0 ; Reserved
  69. DCD 0 ; Reserved
  70. DCD 0 ; Reserved
  71. DCD SVC_Handler ; -5 SVCall Handler
  72. DCD 0 ; Reserved
  73. DCD 0 ; Reserved
  74. DCD PendSV_Handler ; -2 PendSV Handler
  75. DCD SysTick_Handler ; -1 SysTick Handler
  76. ; Interrupts
  77. DCD Interrupt0_Handler ; 0 Interrupt 0
  78. DCD Interrupt1_Handler ; 1 Interrupt 1
  79. DCD Interrupt2_Handler ; 2 Interrupt 2
  80. DCD Interrupt3_Handler ; 3 Interrupt 3
  81. DCD Interrupt4_Handler ; 4 Interrupt 4
  82. DCD Interrupt5_Handler ; 5 Interrupt 5
  83. DCD Interrupt6_Handler ; 6 Interrupt 6
  84. DCD Interrupt7_Handler ; 7 Interrupt 7
  85. DCD Interrupt8_Handler ; 8 Interrupt 8
  86. DCD Interrupt9_Handler ; 9 Interrupt 9
  87. DS32 (214) ; Interrupts 10 .. 224 are left out
  88. __Vectors_End
  89. __Vectors EQU __vector_table
  90. __Vectors_Size EQU __Vectors_End - __Vectors
  91. THUMB
  92. ; Reset Handler
  93. PUBWEAK Reset_Handler
  94. SECTION .text:CODE:REORDER:NOROOT(2)
  95. Reset_Handler
  96. ldr r0, =__INITIAL_SP
  97. msr psp, r0
  98. #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
  99. ldr r0, =__STACK_LIMIT
  100. msr msplim, r0
  101. msr psplim, r0
  102. ldr r0, =__STACK_SEAL
  103. ldr r1, =0xFEF5EDA5U
  104. str r1,[r0,#0]
  105. str r1,[r0,#4]
  106. #endif
  107. LDR R0, =SystemInit
  108. BLX R0
  109. LDR R0, =__iar_program_start
  110. BX R0
  111. PUBWEAK NMI_Handler
  112. PUBWEAK HardFault_Handler
  113. PUBWEAK SVC_Handler
  114. PUBWEAK PendSV_Handler
  115. PUBWEAK SysTick_Handler
  116. PUBWEAK Interrupt0_Handler
  117. PUBWEAK Interrupt1_Handler
  118. PUBWEAK Interrupt2_Handler
  119. PUBWEAK Interrupt3_Handler
  120. PUBWEAK Interrupt4_Handler
  121. PUBWEAK Interrupt5_Handler
  122. PUBWEAK Interrupt6_Handler
  123. PUBWEAK Interrupt7_Handler
  124. PUBWEAK Interrupt8_Handler
  125. PUBWEAK Interrupt9_Handler
  126. SECTION .text:CODE:REORDER:NOROOT(1)
  127. NMI_Handler
  128. HardFault_Handler
  129. SVC_Handler
  130. PendSV_Handler
  131. SysTick_Handler
  132. Interrupt0_Handler
  133. Interrupt1_Handler
  134. Interrupt2_Handler
  135. Interrupt3_Handler
  136. Interrupt4_Handler
  137. Interrupt5_Handler
  138. Interrupt6_Handler
  139. Interrupt7_Handler
  140. Interrupt8_Handler
  141. Interrupt9_Handler
  142. Default_Handler
  143. B .
  144. END