startup_gd32f4xx.S 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  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. ; * 2018-05-22 tanek first implementation
  9. ; */
  10. .syntax unified
  11. .cpu cortex-m4
  12. .fpu softvfp
  13. .thumb
  14. .global g_pfnVectors
  15. .global Default_Handler
  16. .section .isr_vector,"a",%progbits
  17. .type g_pfnVectors, %object
  18. g_pfnVectors:
  19. .word _estack // Top of Stack
  20. .word Reset_Handler // Reset Handler
  21. .word NMI_Handler // NMI Handler
  22. .word HardFault_Handler // Hard Fault Handler
  23. .word MemManage_Handler // MPU Fault Handler
  24. .word BusFault_Handler // Bus Fault Handler
  25. .word UsageFault_Handler // Usage Fault Handler
  26. .word 0 // Reserved
  27. .word 0 // Reserved
  28. .word 0 // Reserved
  29. .word 0 // Reserved
  30. .word SVC_Handler // SVCall Handler
  31. .word DebugMon_Handler // Debug Monitor Handler
  32. .word 0 // Reserved
  33. .word PendSV_Handler // PendSV Handler
  34. .word SysTick_Handler // SysTick Handler
  35. // external interrupts handler
  36. .word WWDGT_IRQHandler // 16:Window Watchdog Timer
  37. .word LVD_IRQHandler // 17:LVD through EXTI Line detect
  38. .word TAMPER_STAMP_IRQHandler // 18:Tamper and TimeStamp through EXTI Line detect
  39. .word RTC_WKUP_IRQHandler // 19:RTC Wakeup through EXTI Line
  40. .word FMC_IRQHandler // 20:FMC
  41. .word RCU_CTC_IRQHandler // 21:RCU and CTC
  42. .word EXTI0_IRQHandler // 22:EXTI Line 0
  43. .word EXTI1_IRQHandler // 23:EXTI Line 1
  44. .word EXTI2_IRQHandler // 24:EXTI Line 2
  45. .word EXTI3_IRQHandler // 25:EXTI Line 3
  46. .word EXTI4_IRQHandler // 26:EXTI Line 4
  47. .word DMA0_Channel0_IRQHandler // 27:DMA0 Channel0
  48. .word DMA0_Channel1_IRQHandler // 28:DMA0 Channel1
  49. .word DMA0_Channel2_IRQHandler // 29:DMA0 Channel2
  50. .word DMA0_Channel3_IRQHandler // 30:DMA0 Channel3
  51. .word DMA0_Channel4_IRQHandler // 31:DMA0 Channel4
  52. .word DMA0_Channel5_IRQHandler // 32:DMA0 Channel5
  53. .word DMA0_Channel6_IRQHandler // 33:DMA0 Channel6
  54. .word ADC_IRQHandler // 34:ADC
  55. .word CAN0_TX_IRQHandler // 35:CAN0 TX
  56. .word CAN0_RX0_IRQHandler // 36:CAN0 RX0
  57. .word CAN0_RX1_IRQHandler // 37:CAN0 RX1
  58. .word CAN0_EWMC_IRQHandler // 38:CAN0 EWMC
  59. .word EXTI5_9_IRQHandler // 39:EXTI5 to EXTI9
  60. .word TIMER0_BRK_TIMER8_IRQHandler // 40:TIMER0 Break and TIMER8
  61. .word TIMER0_UP_TIMER9_IRQHandler // 41:TIMER0 Update and TIMER9
  62. .word TIMER0_TRG_CMT_TIMER10_IRQHandler // 42:TIMER0 Trigger and Commutation and TIMER10
  63. .word TIMER0_CC_IRQHandler // 43:TIMER0 Capture Compare
  64. .word TIMER1_IRQHandler // 44:TIMER1
  65. .word TIMER2_IRQHandler // 45:TIMER2
  66. .word TIMER3_IRQHandler // 46:TIMER3
  67. .word I2C0_EV_IRQHandler // 47:I2C0 Event
  68. .word I2C0_ER_IRQHandler // 48:I2C0 Error
  69. .word I2C1_EV_IRQHandler // 49:I2C1 Event
  70. .word I2C1_ER_IRQHandler // 50:I2C1 Error
  71. .word SPI0_IRQHandler // 51:SPI0
  72. .word SPI1_IRQHandler // 52:SPI1
  73. .word USART0_IRQHandler // 53:USART0
  74. .word USART1_IRQHandler // 54:USART1
  75. .word USART2_IRQHandler // 55:USART2
  76. .word EXTI10_15_IRQHandler // 56:EXTI10 to EXTI15
  77. .word RTC_Alarm_IRQHandler // 57:RTC Alarm
  78. .word USBFS_WKUP_IRQHandler // 58:USBFS Wakeup
  79. .word TIMER7_BRK_TIMER11_IRQHandler // 59:TIMER7 Break and TIMER11
  80. .word TIMER7_UP_TIMER12_IRQHandler // 60:TIMER7 Update and TIMER12
  81. .word TIMER7_TRG_CMT_TIMER13_IRQHandler // 61:TIMER7 Trigger and Commutation and TIMER13
  82. .word TIMER7_CC_IRQHandler // 62:TIMER7 Capture Compare
  83. .word DMA0_Channel7_IRQHandler // 63:DMA0 Channel7
  84. .word EXMC_IRQHandler // 64:EXMC
  85. .word SDIO_IRQHandler // 65:SDIO
  86. .word TIMER4_IRQHandler // 66:TIMER4
  87. .word SPI2_IRQHandler // 67:SPI2
  88. .word UART3_IRQHandler // 68:UART3
  89. .word UART4_IRQHandler // 69:UART4
  90. .word TIMER5_DAC_IRQHandler // 70:TIMER5 and DAC0 DAC1 Underrun error
  91. .word TIMER6_IRQHandler // 71:TIMER6
  92. .word DMA1_Channel0_IRQHandler // 72:DMA1 Channel0
  93. .word DMA1_Channel1_IRQHandler // 73:DMA1 Channel1
  94. .word DMA1_Channel2_IRQHandler // 74:DMA1 Channel2
  95. .word DMA1_Channel3_IRQHandler // 75:DMA1 Channel3
  96. .word DMA1_Channel4_IRQHandler // 76:DMA1 Channel4
  97. .word ENET_IRQHandler // 77:Ethernet
  98. .word ENET_WKUP_IRQHandler // 78:Ethernet Wakeup through EXTI Line
  99. .word CAN1_TX_IRQHandler // 79:CAN1 TX
  100. .word CAN1_RX0_IRQHandler // 80:CAN1 RX0
  101. .word CAN1_RX1_IRQHandler // 81:CAN1 RX1
  102. .word CAN1_EWMC_IRQHandler // 82:CAN1 EWMC
  103. .word USBFS_IRQHandler // 83:USBFS
  104. .word DMA1_Channel5_IRQHandler // 84:DMA1 Channel5
  105. .word DMA1_Channel6_IRQHandler // 85:DMA1 Channel6
  106. .word DMA1_Channel7_IRQHandler // 86:DMA1 Channel7
  107. .word USART5_IRQHandler // 87:USART5
  108. .word I2C2_EV_IRQHandler // 88:I2C2 Event
  109. .word I2C2_ER_IRQHandler // 89:I2C2 Error
  110. .word USBHS_EP1_Out_IRQHandler // 90:USBHS Endpoint 1 Out
  111. .word USBHS_EP1_In_IRQHandler // 91:USBHS Endpoint 1 in
  112. .word USBHS_WKUP_IRQHandler // 92:USBHS Wakeup through EXTI Line
  113. .word USBHS_IRQHandler // 93:USBHS
  114. .word DCI_IRQHandler // 94:DCI
  115. .word 0 // 95:Reserved
  116. .word TRNG_IRQHandler // 96:TRNG
  117. .word FPU_IRQHandler // 97:FPU
  118. .word UART6_IRQHandler // 98:UART6
  119. .word UART7_IRQHandler // 99:UART7
  120. .word SPI3_IRQHandler // 100:SPI3
  121. .word SPI4_IRQHandler // 101:SPI4
  122. .word SPI5_IRQHandler // 102:SPI5
  123. .word 0 // 103:Reserved
  124. .word TLI_IRQHandler // 104:TLI
  125. .word TLI_ER_IRQHandler // 105:TLI Error
  126. .word IPA_IRQHandler // 106:IPA
  127. .size g_pfnVectors, .-g_pfnVectors
  128. .section .text.Reset_Handler
  129. .weak Reset_Handler
  130. .type Reset_Handler, %function
  131. Reset_Handler:
  132. ldr r1, =_sidata
  133. ldr r2, =_sdata
  134. ldr r3, =_edata
  135. subs r3, r2
  136. ble fill_bss_start
  137. loop_copy_data:
  138. subs r3, #4
  139. ldr r0, [r1,r3]
  140. str r0, [r2,r3]
  141. bgt loop_copy_data
  142. fill_bss_start:
  143. ldr r1, =__bss_start
  144. ldr r2, =__bss_end
  145. movs r0, 0
  146. subs r2, r1
  147. ble startup_enter
  148. loop_fill_bss:
  149. subs r2, #4
  150. str r0, [r1, r2]
  151. bgt loop_fill_bss
  152. startup_enter:
  153. bl SystemInit
  154. bl entry
  155. /* Exception Handlers */
  156. .weak NMI_Handler
  157. .type NMI_Handler, %function
  158. NMI_Handler:
  159. b .
  160. .size NMI_Handler, . - NMI_Handler
  161. .weak MemManage_Handler
  162. .type MemManage_Handler, %function
  163. MemManage_Handler:
  164. b .
  165. .size MemManage_Handler, . - MemManage_Handler
  166. .weak BusFault_Handler
  167. .type BusFault_Handler, %function
  168. BusFault_Handler:
  169. b .
  170. .size BusFault_Handler, . - BusFault_Handler
  171. .weak UsageFault_Handler
  172. .type UsageFault_Handler, %function
  173. UsageFault_Handler:
  174. b .
  175. .size UsageFault_Handler, . - UsageFault_Handler
  176. .weak SVC_Handler
  177. .type SVC_Handler, %function
  178. SVC_Handler:
  179. b .
  180. .size SVC_Handler, . - SVC_Handler
  181. .weak DebugMon_Handler
  182. .type DebugMon_Handler, %function
  183. DebugMon_Handler:
  184. b .
  185. .size DebugMon_Handler, . - DebugMon_Handler
  186. .weak PendSV_Handler
  187. .type PendSV_Handler, %function
  188. PendSV_Handler:
  189. b .
  190. .size PendSV_Handler, . - PendSV_Handler
  191. .weak SysTick_Handler
  192. .type SysTick_Handler, %function
  193. SysTick_Handler:
  194. b .
  195. .size SysTick_Handler, . - SysTick_Handler
  196. /* IQR Handler */
  197. .section .text.Default_Handler,"ax",%progbits
  198. .type Default_Handler, %function
  199. Default_Handler:
  200. b .
  201. .size Default_Handler, . - Default_Handler
  202. .macro IRQ handler
  203. .weak \handler
  204. .set \handler, Default_Handler
  205. .endm
  206. IRQ WWDGT_IRQHandler
  207. IRQ LVD_IRQHandler
  208. IRQ TAMPER_STAMP_IRQHandler
  209. IRQ RTC_WKUP_IRQHandler
  210. IRQ FMC_IRQHandler
  211. IRQ RCU_CTC_IRQHandler
  212. IRQ EXTI0_IRQHandler
  213. IRQ EXTI1_IRQHandler
  214. IRQ EXTI2_IRQHandler
  215. IRQ EXTI3_IRQHandler
  216. IRQ EXTI4_IRQHandler
  217. IRQ DMA0_Channel0_IRQHandler
  218. IRQ DMA0_Channel1_IRQHandler
  219. IRQ DMA0_Channel2_IRQHandler
  220. IRQ DMA0_Channel3_IRQHandler
  221. IRQ DMA0_Channel4_IRQHandler
  222. IRQ DMA0_Channel5_IRQHandler
  223. IRQ DMA0_Channel6_IRQHandler
  224. IRQ ADC_IRQHandler
  225. IRQ CAN0_TX_IRQHandler
  226. IRQ CAN0_RX0_IRQHandler
  227. IRQ CAN0_RX1_IRQHandler
  228. IRQ CAN0_EWMC_IRQHandler
  229. IRQ EXTI5_9_IRQHandler
  230. IRQ TIMER0_BRK_TIMER8_IRQHandler
  231. IRQ TIMER0_UP_TIMER9_IRQHandler
  232. IRQ TIMER0_TRG_CMT_TIMER10_IRQHandler
  233. IRQ TIMER0_CC_IRQHandler
  234. IRQ TIMER1_IRQHandler
  235. IRQ TIMER2_IRQHandler
  236. IRQ TIMER3_IRQHandler
  237. IRQ I2C0_EV_IRQHandler
  238. IRQ I2C0_ER_IRQHandler
  239. IRQ I2C1_EV_IRQHandler
  240. IRQ I2C1_ER_IRQHandler
  241. IRQ SPI0_IRQHandler
  242. IRQ SPI1_IRQHandler
  243. IRQ USART0_IRQHandler
  244. IRQ USART1_IRQHandler
  245. IRQ USART2_IRQHandler
  246. IRQ EXTI10_15_IRQHandler
  247. IRQ RTC_Alarm_IRQHandler
  248. IRQ USBFS_WKUP_IRQHandler
  249. IRQ TIMER7_BRK_TIMER11_IRQHandler
  250. IRQ TIMER7_UP_TIMER12_IRQHandler
  251. IRQ TIMER7_TRG_CMT_TIMER13_IRQHandler
  252. IRQ TIMER7_CC_IRQHandler
  253. IRQ DMA0_Channel7_IRQHandler
  254. IRQ EXMC_IRQHandler
  255. IRQ SDIO_IRQHandler
  256. IRQ TIMER4_IRQHandler
  257. IRQ SPI2_IRQHandler
  258. IRQ UART3_IRQHandler
  259. IRQ UART4_IRQHandler
  260. IRQ TIMER5_DAC_IRQHandler
  261. IRQ TIMER6_IRQHandler
  262. IRQ DMA1_Channel0_IRQHandler
  263. IRQ DMA1_Channel1_IRQHandler
  264. IRQ DMA1_Channel2_IRQHandler
  265. IRQ DMA1_Channel3_IRQHandler
  266. IRQ DMA1_Channel4_IRQHandler
  267. IRQ ENET_IRQHandler
  268. IRQ ENET_WKUP_IRQHandler
  269. IRQ CAN1_TX_IRQHandler
  270. IRQ CAN1_RX0_IRQHandler
  271. IRQ CAN1_RX1_IRQHandler
  272. IRQ CAN1_EWMC_IRQHandler
  273. IRQ USBFS_IRQHandler
  274. IRQ DMA1_Channel5_IRQHandler
  275. IRQ DMA1_Channel6_IRQHandler
  276. IRQ DMA1_Channel7_IRQHandler
  277. IRQ USART5_IRQHandler
  278. IRQ I2C2_EV_IRQHandler
  279. IRQ I2C2_ER_IRQHandler
  280. IRQ USBHS_EP1_Out_IRQHandler
  281. IRQ USBHS_EP1_In_IRQHandler
  282. IRQ USBHS_WKUP_IRQHandler
  283. IRQ USBHS_IRQHandler
  284. IRQ DCI_IRQHandler
  285. IRQ TRNG_IRQHandler
  286. IRQ FPU_IRQHandler
  287. IRQ UART6_IRQHandler
  288. IRQ UART7_IRQHandler
  289. IRQ SPI3_IRQHandler
  290. IRQ SPI4_IRQHandler
  291. IRQ SPI5_IRQHandler
  292. IRQ TLI_IRQHandler
  293. IRQ TLI_ER_IRQHandler
  294. IRQ IPA_IRQHandler