startup_gd32f4xx.S 13 KB

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