start_rvds.S 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. ; /*
  2. ; * Copyright (c) 2006-2021, RT-Thread Development Team
  3. ; *
  4. ; * SPDX-License-Identifier: Apache-2.0
  5. ; *
  6. ; * Change Logs:
  7. ; * Date Author Notes
  8. ; * 2011-02-23 Bernard first implementation
  9. ; */
  10. ;* <<< Use Configuration Wizard in Context Menu >>>
  11. ; Amount of memory (in bytes) allocated for Stack
  12. ; Tailor this value to your application needs
  13. ; <h> Stack Configuration
  14. ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
  15. ; </h>
  16. Stack_Size EQU 0x00000200
  17. AREA STACK, NOINIT, READWRITE, ALIGN=3
  18. Stack_Mem SPACE Stack_Size
  19. __initial_sp
  20. ; Note: RT-Thread not use malloc/free in Keil MDK, therefore the heap size is 0.
  21. Heap_Size EQU 0x00000000
  22. AREA HEAP, NOINIT, READWRITE, ALIGN=3
  23. __heap_base
  24. Heap_Mem SPACE Heap_Size
  25. __heap_limit
  26. PRESERVE8
  27. THUMB
  28. ; Vector Table Mapped to Address 0 at Reset
  29. AREA RESET, DATA, READONLY
  30. EXPORT __Vectors
  31. EXPORT __Vectors_End
  32. EXPORT __Vectors_Size
  33. __Vectors DCD __initial_sp ; Top of Stack
  34. DCD Reset_Handler ; Reset Handler
  35. DCD NMI_Handler ; NMI Handler
  36. DCD HardFault_Handler ; Hard Fault Handler
  37. DCD MemManage_Handler ; MPU Fault Handler
  38. DCD BusFault_Handler ; Bus Fault Handler
  39. DCD UsageFault_Handler ; Usage Fault Handler
  40. DCD 0 ; Reserved
  41. DCD 0 ; Reserved
  42. DCD 0 ; Reserved
  43. DCD 0 ; Reserved
  44. DCD SVC_Handler ; SVCall Handler
  45. DCD DebugMon_Handler ; Debug Monitor Handler
  46. DCD 0 ; Reserved
  47. DCD PendSV_Handler ; PendSV Handler
  48. DCD SysTick_Handler ; SysTick Handler
  49. DCD CSV_Handler ; 0: Clock Super Visor
  50. DCD SWDT_Handler ; 1: Software Watchdog Timer
  51. DCD LVD_Handler ; 2: Low Voltage Detector
  52. DCD MFT_WG_IRQHandler ; 3: Wave Form Generator / DTIF
  53. DCD INT0_7_Handler ; 4: External Interrupt Request ch.0 to ch.7
  54. DCD INT8_15_Handler ; 5: External Interrupt Request ch.8 to ch.15
  55. DCD DT_Handler ; 6: Dual Timer / Quad Decoder
  56. DCD MFS0RX_IRQHandler ; 7: MultiFunction Serial ch.0
  57. DCD MFS0TX_IRQHandler ; 8: MultiFunction Serial ch.0
  58. DCD MFS1RX_IRQHandler ; 9: MultiFunction Serial ch.1
  59. DCD MFS1TX_IRQHandler ; 10: MultiFunction Serial ch.1
  60. DCD MFS2RX_IRQHandler ; 11: MultiFunction Serial ch.2
  61. DCD MFS2TX_IRQHandler ; 12: MultiFunction Serial ch.2
  62. DCD MFS3RX_IRQHandler ; 13: MultiFunction Serial ch.3
  63. DCD MFS3TX_IRQHandler ; 14: MultiFunction Serial ch.3
  64. DCD MFS4RX_IRQHandler ; 15: MultiFunction Serial ch.4
  65. DCD MFS4TX_IRQHandler ; 16: MultiFunction Serial ch.4
  66. DCD MFS5RX_IRQHandler ; 17: MultiFunction Serial ch.5
  67. DCD MFS5TX_IRQHandler ; 18: MultiFunction Serial ch.5
  68. DCD MFS6RX_IRQHandler ; 19: MultiFunction Serial ch.6
  69. DCD MFS6TX_IRQHandler ; 20: MultiFunction Serial ch.6
  70. DCD MFS7RX_IRQHandler ; 21: MultiFunction Serial ch.7
  71. DCD MFS7TX_IRQHandler ; 22: MultiFunction Serial ch.7
  72. DCD PPG_Handler ; 23: PPG
  73. DCD TIM_IRQHandler ; 24: OSC / PLL / Watch Counter
  74. DCD ADC0_IRQHandler ; 25: ADC0
  75. DCD ADC1_IRQHandler ; 26: ADC1
  76. DCD ADC2_IRQHandler ; 27: ADC2
  77. DCD MFT_FRT_IRQHandler ; 28: Free-run Timer
  78. DCD MFT_IPC_IRQHandler ; 29: Input Capture
  79. DCD MFT_OPC_IRQHandler ; 30: Output Compare
  80. DCD BT_IRQHandler ; 31: Base Timer ch.0 to ch.7
  81. DCD CAN0_IRQHandler ; 32: CAN ch.0
  82. DCD CAN1_IRQHandler ; 33: CAN ch.1
  83. DCD USBF_Handler ; 34: USB Function
  84. DCD USB_Handler ; 35: USB Function / USB HOST
  85. DCD DummyHandler ; 36: Reserved
  86. DCD DummyHandler ; 37: Reserved
  87. DCD DMAC0_Handler ; 38: DMAC ch.0
  88. DCD DMAC1_Handler ; 39: DMAC ch.1
  89. DCD DMAC2_Handler ; 40: DMAC ch.2
  90. DCD DMAC3_Handler ; 41: DMAC ch.3
  91. DCD DMAC4_Handler ; 42: DMAC ch.4
  92. DCD DMAC5_Handler ; 43: DMAC ch.5
  93. DCD DMAC6_Handler ; 44: DMAC ch.6
  94. DCD DMAC7_Handler ; 45: DMAC ch.7
  95. DCD DummyHandler ; 46: Reserved
  96. DCD DummyHandler ; 47: Reserved
  97. __Vectors_End
  98. __Vectors_Size EQU __Vectors_End - __Vectors
  99. AREA |.text|, CODE, READONLY
  100. ; Reset handler routine
  101. Reset_Handler PROC
  102. EXPORT Reset_Handler [WEAK]
  103. IMPORT __main
  104. IMPORT SystemInit
  105. LDR R1, = __initial_sp ; restore original stack pointer
  106. MSR MSP, R1
  107. LDR R0, =SystemInit
  108. BLX R0
  109. LDR R0, =__main
  110. BX R0
  111. ENDP
  112. ; Dummy Exception Handlers (infinite loops which can be modified)
  113. NMI_Handler PROC
  114. EXPORT NMI_Handler [WEAK]
  115. B .
  116. ENDP
  117. HardFault_Handler\
  118. PROC
  119. EXPORT HardFault_Handler [WEAK]
  120. B .
  121. ENDP
  122. MemManage_Handler\
  123. PROC
  124. EXPORT MemManage_Handler [WEAK]
  125. B .
  126. ENDP
  127. BusFault_Handler\
  128. PROC
  129. EXPORT BusFault_Handler [WEAK]
  130. B .
  131. ENDP
  132. UsageFault_Handler\
  133. PROC
  134. EXPORT UsageFault_Handler [WEAK]
  135. B .
  136. ENDP
  137. SVC_Handler PROC
  138. EXPORT SVC_Handler [WEAK]
  139. B .
  140. ENDP
  141. DebugMon_Handler\
  142. PROC
  143. EXPORT DebugMon_Handler [WEAK]
  144. B .
  145. ENDP
  146. PendSV_Handler PROC
  147. EXPORT PendSV_Handler [WEAK]
  148. B .
  149. ENDP
  150. SysTick_Handler PROC
  151. EXPORT SysTick_Handler [WEAK]
  152. B .
  153. ENDP
  154. Default_Handler PROC
  155. EXPORT CSV_Handler [WEAK]
  156. EXPORT SWDT_Handler [WEAK]
  157. EXPORT LVD_Handler [WEAK]
  158. EXPORT MFT_WG_IRQHandler [WEAK]
  159. EXPORT INT0_7_Handler [WEAK]
  160. EXPORT INT8_15_Handler [WEAK]
  161. EXPORT DT_Handler [WEAK]
  162. EXPORT MFS0RX_IRQHandler [WEAK]
  163. EXPORT MFS0TX_IRQHandler [WEAK]
  164. EXPORT MFS1RX_IRQHandler [WEAK]
  165. EXPORT MFS1TX_IRQHandler [WEAK]
  166. EXPORT MFS2RX_IRQHandler [WEAK]
  167. EXPORT MFS2TX_IRQHandler [WEAK]
  168. EXPORT MFS3RX_IRQHandler [WEAK]
  169. EXPORT MFS3TX_IRQHandler [WEAK]
  170. EXPORT MFS4RX_IRQHandler [WEAK]
  171. EXPORT MFS4TX_IRQHandler [WEAK]
  172. EXPORT MFS5RX_IRQHandler [WEAK]
  173. EXPORT MFS5TX_IRQHandler [WEAK]
  174. EXPORT MFS6RX_IRQHandler [WEAK]
  175. EXPORT MFS6TX_IRQHandler [WEAK]
  176. EXPORT MFS7RX_IRQHandler [WEAK]
  177. EXPORT MFS7TX_IRQHandler [WEAK]
  178. EXPORT PPG_Handler [WEAK]
  179. EXPORT TIM_IRQHandler [WEAK]
  180. EXPORT ADC0_IRQHandler [WEAK]
  181. EXPORT ADC1_IRQHandler [WEAK]
  182. EXPORT ADC2_IRQHandler [WEAK]
  183. EXPORT MFT_FRT_IRQHandler [WEAK]
  184. EXPORT MFT_IPC_IRQHandler [WEAK]
  185. EXPORT MFT_OPC_IRQHandler [WEAK]
  186. EXPORT BT_IRQHandler [WEAK]
  187. EXPORT CAN0_IRQHandler [WEAK]
  188. EXPORT CAN1_IRQHandler [WEAK]
  189. EXPORT USBF_Handler [WEAK]
  190. EXPORT USB_Handler [WEAK]
  191. EXPORT DMAC0_Handler [WEAK]
  192. EXPORT DMAC1_Handler [WEAK]
  193. EXPORT DMAC2_Handler [WEAK]
  194. EXPORT DMAC3_Handler [WEAK]
  195. EXPORT DMAC4_Handler [WEAK]
  196. EXPORT DMAC5_Handler [WEAK]
  197. EXPORT DMAC6_Handler [WEAK]
  198. EXPORT DMAC7_Handler [WEAK]
  199. EXPORT DummyHandler [WEAK]
  200. CSV_Handler
  201. SWDT_Handler
  202. LVD_Handler
  203. MFT_WG_IRQHandler
  204. INT0_7_Handler
  205. INT8_15_Handler
  206. DT_Handler
  207. MFS0RX_IRQHandler
  208. MFS0TX_IRQHandler
  209. MFS1RX_IRQHandler
  210. MFS1TX_IRQHandler
  211. MFS2RX_IRQHandler
  212. MFS2TX_IRQHandler
  213. MFS3RX_IRQHandler
  214. MFS3TX_IRQHandler
  215. MFS4RX_IRQHandler
  216. MFS4TX_IRQHandler
  217. MFS5RX_IRQHandler
  218. MFS5TX_IRQHandler
  219. MFS6RX_IRQHandler
  220. MFS6TX_IRQHandler
  221. MFS7RX_IRQHandler
  222. MFS7TX_IRQHandler
  223. PPG_Handler
  224. TIM_IRQHandler
  225. ADC0_IRQHandler
  226. ADC1_IRQHandler
  227. ADC2_IRQHandler
  228. MFT_FRT_IRQHandler
  229. MFT_IPC_IRQHandler
  230. MFT_OPC_IRQHandler
  231. BT_IRQHandler
  232. CAN0_IRQHandler
  233. CAN1_IRQHandler
  234. USBF_Handler
  235. USB_Handler
  236. DMAC0_Handler
  237. DMAC1_Handler
  238. DMAC2_Handler
  239. DMAC3_Handler
  240. DMAC4_Handler
  241. DMAC5_Handler
  242. DMAC6_Handler
  243. DMAC7_Handler
  244. DummyHandler
  245. B .
  246. ENDP
  247. ALIGN
  248. ; User Initial Stack & Heap
  249. IF :DEF:__MICROLIB
  250. EXPORT __initial_sp
  251. EXPORT __heap_base
  252. EXPORT __heap_limit
  253. ELSE
  254. IMPORT __use_two_region_memory
  255. EXPORT __user_initial_stackheap
  256. __user_initial_stackheap
  257. LDR R0, = Heap_Mem
  258. LDR R1, =(Stack_Mem + Stack_Size)
  259. LDR R2, = (Heap_Mem + Heap_Size)
  260. LDR R3, = Stack_Mem
  261. BX LR
  262. ALIGN
  263. ENDIF
  264. END