startup_ARMCM0.s.base@1.0.1 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. ;/**************************************************************************//**
  2. ; * @file startup_ARMCM0.s
  3. ; * @brief CMSIS Core Device Startup File for
  4. ; * ARMCM0 Device
  5. ; * @version V1.0.1
  6. ; * @date 23. July 2019
  7. ; ******************************************************************************/
  8. ;/*
  9. ; * Copyright (c) 2009-2019 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. ;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
  26. ;<h> Stack Configuration
  27. ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
  28. ;</h>
  29. Stack_Size EQU 0x00000400
  30. AREA STACK, NOINIT, READWRITE, ALIGN=3
  31. __stack_limit
  32. Stack_Mem SPACE Stack_Size
  33. __initial_sp
  34. ;<h> Heap Configuration
  35. ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
  36. ;</h>
  37. Heap_Size EQU 0x00000C00
  38. IF Heap_Size != 0 ; Heap is provided
  39. AREA HEAP, NOINIT, READWRITE, ALIGN=3
  40. __heap_base
  41. Heap_Mem SPACE Heap_Size
  42. __heap_limit
  43. ENDIF
  44. PRESERVE8
  45. THUMB
  46. ; Vector Table Mapped to Address 0 at Reset
  47. AREA RESET, DATA, READONLY
  48. EXPORT __Vectors
  49. EXPORT __Vectors_End
  50. EXPORT __Vectors_Size
  51. __Vectors DCD __initial_sp ; Top of Stack
  52. DCD Reset_Handler ; Reset Handler
  53. DCD NMI_Handler ; -14 NMI Handler
  54. DCD HardFault_Handler ; -13 Hard Fault Handler
  55. DCD 0 ; Reserved
  56. DCD 0 ; Reserved
  57. DCD 0 ; Reserved
  58. DCD 0 ; Reserved
  59. DCD 0 ; Reserved
  60. DCD 0 ; Reserved
  61. DCD 0 ; Reserved
  62. DCD SVC_Handler ; -5 SVCall Handler
  63. DCD 0 ; Reserved
  64. DCD 0 ; Reserved
  65. DCD PendSV_Handler ; -2 PendSV Handler
  66. DCD SysTick_Handler ; -1 SysTick Handler
  67. ; Interrupts
  68. DCD Interrupt0_Handler ; 0 Interrupt 0
  69. DCD Interrupt1_Handler ; 1 Interrupt 1
  70. DCD Interrupt2_Handler ; 2 Interrupt 2
  71. DCD Interrupt3_Handler ; 3 Interrupt 3
  72. DCD Interrupt4_Handler ; 4 Interrupt 4
  73. DCD Interrupt5_Handler ; 5 Interrupt 5
  74. DCD Interrupt6_Handler ; 6 Interrupt 6
  75. DCD Interrupt7_Handler ; 7 Interrupt 7
  76. DCD Interrupt8_Handler ; 8 Interrupt 8
  77. DCD Interrupt9_Handler ; 9 Interrupt 9
  78. SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out
  79. __Vectors_End
  80. __Vectors_Size EQU __Vectors_End - __Vectors
  81. AREA |.text|, CODE, READONLY
  82. ; Reset Handler
  83. Reset_Handler PROC
  84. EXPORT Reset_Handler [WEAK]
  85. IMPORT SystemInit
  86. IMPORT __main
  87. LDR R0, =SystemInit
  88. BLX R0
  89. LDR R0, =__main
  90. BX R0
  91. ENDP
  92. ; The default macro is not used for HardFault_Handler
  93. ; because this results in a poor debug illusion.
  94. HardFault_Handler PROC
  95. EXPORT HardFault_Handler [WEAK]
  96. B .
  97. ENDP
  98. ; Macro to define default exception/interrupt handlers.
  99. ; Default handler are weak symbols with an endless loop.
  100. ; They can be overwritten by real handlers.
  101. MACRO
  102. Set_Default_Handler $Handler_Name
  103. $Handler_Name PROC
  104. EXPORT $Handler_Name [WEAK]
  105. B .
  106. ENDP
  107. MEND
  108. ; Default exception/interrupt handler
  109. Set_Default_Handler NMI_Handler
  110. Set_Default_Handler SVC_Handler
  111. Set_Default_Handler PendSV_Handler
  112. Set_Default_Handler SysTick_Handler
  113. Set_Default_Handler Interrupt0_Handler
  114. Set_Default_Handler Interrupt1_Handler
  115. Set_Default_Handler Interrupt2_Handler
  116. Set_Default_Handler Interrupt3_Handler
  117. Set_Default_Handler Interrupt4_Handler
  118. Set_Default_Handler Interrupt5_Handler
  119. Set_Default_Handler Interrupt6_Handler
  120. Set_Default_Handler Interrupt7_Handler
  121. Set_Default_Handler Interrupt8_Handler
  122. Set_Default_Handler Interrupt9_Handler
  123. ALIGN
  124. ; User setup Stack & Heap
  125. IF :LNOT::DEF:__MICROLIB
  126. IMPORT __use_two_region_memory
  127. ENDIF
  128. EXPORT __stack_limit
  129. EXPORT __initial_sp
  130. IF Heap_Size != 0 ; Heap is provided
  131. EXPORT __heap_base
  132. EXPORT __heap_limit
  133. ENDIF
  134. END