startup_ch32v20x_D8W.S 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. ;/********************************** (C) COPYRIGHT *******************************
  2. ;* File Name : startup_ch32v20x_D8W.s
  3. ;* Author : WCH
  4. ;* Version : V1.0.0
  5. ;* Date : 2021/06/06
  6. ;* Description : CH32V208x
  7. ;* vector table for eclipse toolchain.
  8. ;*********************************************************************************
  9. ;* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
  10. ;* Attention: This software (modified or not) and binary are used for
  11. ;* microcontroller manufactured by Nanjing Qinheng Microelectronics.
  12. *******************************************************************************/
  13. .section .init,"ax",@progbits
  14. .global _start
  15. .align 1
  16. _start:
  17. j handle_reset
  18. .word 0x00000013
  19. .word 0x00000013
  20. .word 0x00000013
  21. .word 0x00000013
  22. .word 0x00000013
  23. .word 0x00000013
  24. .word 0x00000013
  25. .word 0x00000013
  26. .word 0x00000013
  27. .word 0x00000013
  28. .word 0x00000013
  29. .word 0x00000013
  30. .word 0x00100073
  31. .section .vector,"ax",@progbits
  32. .align 1
  33. _vector_base:
  34. .option norvc;
  35. .word _start
  36. .word 0
  37. .word NMI_Handler /* NMI */
  38. .word HardFault_Handler /* Hard Fault */
  39. .word 0
  40. .word Ecall_M_Mode_Handler /* Ecall M Mode */
  41. .word 0
  42. .word 0
  43. .word Ecall_U_Mode_Handler /* Ecall U Mode */
  44. .word Break_Point_Handler /* Break Point */
  45. .word 0
  46. .word 0
  47. .word SysTick_Handler /* SysTick */
  48. .word 0
  49. .word SW_Handler /* SW */
  50. .word 0
  51. /* External Interrupts */
  52. .word WWDG_IRQHandler /* Window Watchdog */
  53. .word PVD_IRQHandler /* PVD through EXTI Line detect */
  54. .word TAMPER_IRQHandler /* TAMPER */
  55. .word RTC_IRQHandler /* RTC */
  56. .word FLASH_IRQHandler /* Flash */
  57. .word RCC_IRQHandler /* RCC */
  58. .word EXTI0_IRQHandler /* EXTI Line 0 */
  59. .word EXTI1_IRQHandler /* EXTI Line 1 */
  60. .word EXTI2_IRQHandler /* EXTI Line 2 */
  61. .word EXTI3_IRQHandler /* EXTI Line 3 */
  62. .word EXTI4_IRQHandler /* EXTI Line 4 */
  63. .word DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */
  64. .word DMA1_Channel2_IRQHandler /* DMA1 Channel 2 */
  65. .word DMA1_Channel3_IRQHandler /* DMA1 Channel 3 */
  66. .word DMA1_Channel4_IRQHandler /* DMA1 Channel 4 */
  67. .word DMA1_Channel5_IRQHandler /* DMA1 Channel 5 */
  68. .word DMA1_Channel6_IRQHandler /* DMA1 Channel 6 */
  69. .word DMA1_Channel7_IRQHandler /* DMA1 Channel 7 */
  70. .word ADC1_2_IRQHandler /* ADC1_2 */
  71. .word USB_HP_CAN1_TX_IRQHandler /* USB HP and CAN1 TX */
  72. .word USB_LP_CAN1_RX0_IRQHandler /* USB LP and CAN1RX0 */
  73. .word CAN1_RX1_IRQHandler /* CAN1 RX1 */
  74. .word CAN1_SCE_IRQHandler /* CAN1 SCE */
  75. .word EXTI9_5_IRQHandler /* EXTI Line 9..5 */
  76. .word TIM1_BRK_IRQHandler /* TIM1 Break */
  77. .word TIM1_UP_IRQHandler /* TIM1 Update */
  78. .word TIM1_TRG_COM_IRQHandler /* TIM1 Trigger and Commutation */
  79. .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
  80. .word TIM2_IRQHandler /* TIM2 */
  81. .word TIM3_IRQHandler /* TIM3 */
  82. .word TIM4_IRQHandler /* TIM4 */
  83. .word I2C1_EV_IRQHandler /* I2C1 Event */
  84. .word I2C1_ER_IRQHandler /* I2C1 Error */
  85. .word I2C2_EV_IRQHandler /* I2C2 Event */
  86. .word I2C2_ER_IRQHandler /* I2C2 Error */
  87. .word SPI1_IRQHandler /* SPI1 */
  88. .word SPI2_IRQHandler /* SPI2 */
  89. .word USART1_IRQHandler /* USART1 */
  90. .word USART2_IRQHandler /* USART2 */
  91. .word USART3_IRQHandler /* USART3 */
  92. .word EXTI15_10_IRQHandler /* EXTI Line 15..10 */
  93. .word RTCAlarm_IRQHandler /* RTC Alarm through EXTI Line */
  94. .word USBWakeUp_IRQHandler /* USB Wake up from suspend */
  95. .word USBHD_IRQHandler /* USBHD Break */
  96. .word USBHDWakeUp_IRQHandler /* USBHD Wake up from suspend */
  97. .word ETH_IRQHandler /* ETH global */
  98. .word ETHWakeUp_IRQHandler /* ETH Wake up */
  99. .word BB_IRQHandler /* BLE BB */
  100. .word LLE_IRQHandler /* BLE LLE */
  101. .word TIM5_IRQHandler /* TIM5 */
  102. .word UART4_IRQHandler /* UART4 */
  103. .word DMA1_Channel8_IRQHandler /* DMA1 Channel8 */
  104. .word OSC32KCal_IRQHandler /* OSC32KCal */
  105. .word OSCWakeUp_IRQHandler /* OSC Wake Up */
  106. .option rvc;
  107. .section .text.vector_handler, "ax", @progbits
  108. .weak NMI_Handler /* NMI */
  109. .weak HardFault_Handler /* Hard Fault */
  110. .weak Ecall_M_Mode_Handler /* Ecall M Mode */
  111. .weak Ecall_U_Mode_Handler /* Ecall U Mode */
  112. .weak Break_Point_Handler /* Break Point */
  113. .weak SysTick_Handler /* SysTick */
  114. .weak SW_Handler /* SW */
  115. .weak WWDG_IRQHandler /* Window Watchdog */
  116. .weak PVD_IRQHandler /* PVD through EXTI Line detect */
  117. .weak TAMPER_IRQHandler /* TAMPER */
  118. .weak RTC_IRQHandler /* RTC */
  119. .weak FLASH_IRQHandler /* Flash */
  120. .weak RCC_IRQHandler /* RCC */
  121. .weak EXTI0_IRQHandler /* EXTI Line 0 */
  122. .weak EXTI1_IRQHandler /* EXTI Line 1 */
  123. .weak EXTI2_IRQHandler /* EXTI Line 2 */
  124. .weak EXTI3_IRQHandler /* EXTI Line 3 */
  125. .weak EXTI4_IRQHandler /* EXTI Line 4 */
  126. .weak DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */
  127. .weak DMA1_Channel2_IRQHandler /* DMA1 Channel 2 */
  128. .weak DMA1_Channel3_IRQHandler /* DMA1 Channel 3 */
  129. .weak DMA1_Channel4_IRQHandler /* DMA1 Channel 4 */
  130. .weak DMA1_Channel5_IRQHandler /* DMA1 Channel 5 */
  131. .weak DMA1_Channel6_IRQHandler /* DMA1 Channel 6 */
  132. .weak DMA1_Channel7_IRQHandler /* DMA1 Channel 7 */
  133. .weak ADC1_2_IRQHandler /* ADC1_2 */
  134. .weak USB_HP_CAN1_TX_IRQHandler /* USB HP and CAN1 TX */
  135. .weak USB_LP_CAN1_RX0_IRQHandler /* USB LP and CAN1RX0 */
  136. .weak CAN1_RX1_IRQHandler /* CAN1 RX1 */
  137. .weak CAN1_SCE_IRQHandler /* CAN1 SCE */
  138. .weak EXTI9_5_IRQHandler /* EXTI Line 9..5 */
  139. .weak TIM1_BRK_IRQHandler /* TIM1 Break */
  140. .weak TIM1_UP_IRQHandler /* TIM1 Update */
  141. .weak TIM1_TRG_COM_IRQHandler /* TIM1 Trigger and Commutation */
  142. .weak TIM1_CC_IRQHandler /* TIM1 Capture Compare */
  143. .weak TIM2_IRQHandler /* TIM2 */
  144. .weak TIM3_IRQHandler /* TIM3 */
  145. .weak TIM4_IRQHandler /* TIM4 */
  146. .weak I2C1_EV_IRQHandler /* I2C1 Event */
  147. .weak I2C1_ER_IRQHandler /* I2C1 Error */
  148. .weak I2C2_EV_IRQHandler /* I2C2 Event */
  149. .weak I2C2_ER_IRQHandler /* I2C2 Error */
  150. .weak SPI1_IRQHandler /* SPI1 */
  151. .weak SPI2_IRQHandler /* SPI2 */
  152. .weak USART1_IRQHandler /* USART1 */
  153. .weak USART2_IRQHandler /* USART2 */
  154. .weak USART3_IRQHandler /* USART3 */
  155. .weak EXTI15_10_IRQHandler /* EXTI Line 15..10 */
  156. .weak RTCAlarm_IRQHandler /* RTC Alarm through EXTI Line */
  157. .weak USBWakeUp_IRQHandler /* USB Wakeup from suspend */
  158. .weak USBHD_IRQHandler /* USBHD */
  159. .weak USBHDWakeUp_IRQHandler /* USBHD Wake Up */
  160. .weak ETH_IRQHandler /* ETH global */
  161. .weak ETHWakeUp_IRQHandler /* ETHWakeUp */
  162. .weak BB_IRQHandler /* BB */
  163. .weak LLE_IRQHandler /* LLE */
  164. .weak TIM5_IRQHandler /* TIM5 */
  165. .weak UART4_IRQHandler /* UART4 */
  166. .weak DMA1_Channel8_IRQHandler /* DMA1 Channel8 */
  167. .weak OSC32KCal_IRQHandler /* OSC32 KCal */
  168. .weak OSCWakeUp_IRQHandler /* OSC Wake Up */
  169. NMI_Handler: 1: j 1b
  170. HardFault_Handler: 1: j 1b
  171. Ecall_M_Mode_Handler: 1: j 1b
  172. Ecall_U_Mode_Handler: 1: j 1b
  173. Break_Point_Handler: 1: j 1b
  174. SysTick_Handler: 1: j 1b
  175. SW_Handler: 1: j 1b
  176. WWDG_IRQHandler: 1: j 1b
  177. PVD_IRQHandler: 1: j 1b
  178. TAMPER_IRQHandler: 1: j 1b
  179. RTC_IRQHandler: 1: j 1b
  180. FLASH_IRQHandler: 1: j 1b
  181. RCC_IRQHandler: 1: j 1b
  182. EXTI0_IRQHandler: 1: j 1b
  183. EXTI1_IRQHandler: 1: j 1b
  184. EXTI2_IRQHandler: 1: j 1b
  185. EXTI3_IRQHandler: 1: j 1b
  186. EXTI4_IRQHandler: 1: j 1b
  187. DMA1_Channel1_IRQHandler: 1: j 1b
  188. DMA1_Channel2_IRQHandler: 1: j 1b
  189. DMA1_Channel3_IRQHandler: 1: j 1b
  190. DMA1_Channel4_IRQHandler: 1: j 1b
  191. DMA1_Channel5_IRQHandler: 1: j 1b
  192. DMA1_Channel6_IRQHandler: 1: j 1b
  193. DMA1_Channel7_IRQHandler: 1: j 1b
  194. ADC1_2_IRQHandler: 1: j 1b
  195. USB_HP_CAN1_TX_IRQHandler: 1: j 1b
  196. USB_LP_CAN1_RX0_IRQHandler: 1: j 1b
  197. CAN1_RX1_IRQHandler: 1: j 1b
  198. CAN1_SCE_IRQHandler: 1: j 1b
  199. EXTI9_5_IRQHandler: 1: j 1b
  200. TIM1_BRK_IRQHandler: 1: j 1b
  201. TIM1_UP_IRQHandler: 1: j 1b
  202. TIM1_TRG_COM_IRQHandler: 1: j 1b
  203. TIM1_CC_IRQHandler: 1: j 1b
  204. TIM2_IRQHandler: 1: j 1b
  205. TIM3_IRQHandler: 1: j 1b
  206. TIM4_IRQHandler: 1: j 1b
  207. I2C1_EV_IRQHandler: 1: j 1b
  208. I2C1_ER_IRQHandler: 1: j 1b
  209. I2C2_EV_IRQHandler: 1: j 1b
  210. I2C2_ER_IRQHandler: 1: j 1b
  211. SPI1_IRQHandler: 1: j 1b
  212. SPI2_IRQHandler: 1: j 1b
  213. USART1_IRQHandler: 1: j 1b
  214. USART2_IRQHandler: 1: j 1b
  215. USART3_IRQHandler: 1: j 1b
  216. EXTI15_10_IRQHandler: 1: j 1b
  217. RTCAlarm_IRQHandler: 1: j 1b
  218. USBWakeUp_IRQHandler: 1: j 1b
  219. USBHD_IRQHandler: 1: j 1b
  220. USBHDWakeUp_IRQHandler: 1: j 1b
  221. ETH_IRQHandler: 1: j 1b
  222. ETHWakeUp_IRQHandler: 1: j 1b
  223. BB_IRQHandler: 1: j 1b
  224. LLE_IRQHandler: 1: j 1b
  225. TIM5_IRQHandler: 1: j 1b
  226. UART4_IRQHandler: 1: j 1b
  227. DMA1_Channel8_IRQHandler: 1: j 1b
  228. OSC32KCal_IRQHandler: 1: j 1b
  229. OSCWakeUp_IRQHandler: 1: j 1b
  230. .section .text.handle_reset,"ax",@progbits
  231. .weak handle_reset
  232. .align 1
  233. handle_reset:
  234. .option push
  235. .option norelax
  236. la gp, __global_pointer$
  237. .option pop
  238. 1:
  239. la sp, _eusrstack
  240. 2:
  241. /* Load data section from flash to RAM */
  242. la a0, _data_lma
  243. la a1, _data_vma
  244. la a2, _edata
  245. bgeu a1, a2, 2f
  246. 1:
  247. lw t0, (a0)
  248. sw t0, (a1)
  249. addi a0, a0, 4
  250. addi a1, a1, 4
  251. bltu a1, a2, 1b
  252. 2:
  253. /* Clear bss section */
  254. la a0, _sbss
  255. la a1, _ebss
  256. bgeu a0, a1, 2f
  257. 1:
  258. sw zero, (a0)
  259. addi a0, a0, 4
  260. bltu a0, a1, 1b
  261. 2:
  262. li t0, 0x1f
  263. csrw 0xbc0, t0
  264. /* Enable nested and hardware stack */
  265. li t0, 0x3
  266. csrw 0x804, t0
  267. /* Enable interrupt */
  268. li t0, 0x1888
  269. csrs mstatus, t0
  270. la t0, _vector_base
  271. ori t0, t0, 3
  272. csrw mtvec, t0
  273. jal SystemInit
  274. la t0, main
  275. csrw mepc, t0
  276. j 0x40000
  277. mret