startup_ch32v00X.S 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. ;/********************************** (C) COPYRIGHT *******************************
  2. ;* File Name : startup_ch32v00X.s
  3. ;* Author : WCH
  4. ;* Version : V1.0.1
  5. ;* Date : 2024/08/02
  6. ;* Description : ch32v002-ch32v004-ch32v005-ch32v006-ch32v007-ch32m007 vector table for eclipse toolchain.
  7. ;*********************************************************************************
  8. ;* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
  9. ;* Attention: This software (modified or not) and binary are used for
  10. ;* microcontroller manufactured by Nanjing Qinheng Microelectronics.
  11. ;*******************************************************************************/
  12. .section .init, "ax", @progbits
  13. .globl _start
  14. .align 2
  15. _start:
  16. .option norvc;
  17. j handle_reset
  18. .word 0
  19. .word NMI_Handler /* NMI Handler */
  20. .word HardFault_Handler /* Hard Fault Handler */
  21. .word 0
  22. .word 0
  23. .word 0
  24. .word 0
  25. .word 0
  26. .word 0
  27. .word 0
  28. .word 0
  29. .word SysTick_Handler /* SysTick Handler */
  30. .word 0
  31. .word SW_Handler /* SW Handler */
  32. .word 0
  33. /* External Interrupts */
  34. .word WWDG_IRQHandler /* Window Watchdog */
  35. .word PVD_IRQHandler /* PVD through EXTI Line detect */
  36. .word FLASH_IRQHandler /* Flash */
  37. .word RCC_IRQHandler /* RCC */
  38. .word EXTI7_0_IRQHandler /* EXTI Line 7..0 */
  39. .word AWU_IRQHandler /* AWU */
  40. .word DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */
  41. .word DMA1_Channel2_IRQHandler /* DMA1 Channel 2 */
  42. .word DMA1_Channel3_IRQHandler /* DMA1 Channel 3 */
  43. .word DMA1_Channel4_IRQHandler /* DMA1 Channel 4 */
  44. .word DMA1_Channel5_IRQHandler /* DMA1 Channel 5 */
  45. .word DMA1_Channel6_IRQHandler /* DMA1 Channel 6 */
  46. .word DMA1_Channel7_IRQHandler /* DMA1 Channel 7 */
  47. .word ADC1_IRQHandler /* ADC1 */
  48. .word I2C1_EV_IRQHandler /* I2C1 Event */
  49. .word I2C1_ER_IRQHandler /* I2C1 Error */
  50. .word USART1_IRQHandler /* USART1 */
  51. .word SPI1_IRQHandler /* SPI1 */
  52. .word TIM1_BRK_IRQHandler /* TIM1 Break */
  53. .word TIM1_UP_IRQHandler /* TIM1 Update */
  54. .word TIM1_TRG_COM_IRQHandler /* TIM1 Trigger and Commutation */
  55. .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
  56. .word TIM2_IRQHandler /* TIM2 */
  57. .word USART2_IRQHandler /* USART2 */
  58. .word OPCM_IRQHandler /* OPCM */
  59. .option rvc;
  60. .section .text.vector_handler, "ax", @progbits
  61. .weak NMI_Handler
  62. .weak HardFault_Handler
  63. .weak SysTick_Handler
  64. .weak SW_Handler
  65. .weak WWDG_IRQHandler
  66. .weak PVD_IRQHandler
  67. .weak FLASH_IRQHandler
  68. .weak RCC_IRQHandler
  69. .weak EXTI7_0_IRQHandler
  70. .weak AWU_IRQHandler
  71. .weak DMA1_Channel1_IRQHandler
  72. .weak DMA1_Channel2_IRQHandler
  73. .weak DMA1_Channel3_IRQHandler
  74. .weak DMA1_Channel4_IRQHandler
  75. .weak DMA1_Channel5_IRQHandler
  76. .weak DMA1_Channel6_IRQHandler
  77. .weak DMA1_Channel7_IRQHandler
  78. .weak ADC1_IRQHandler
  79. .weak I2C1_EV_IRQHandler
  80. .weak I2C1_ER_IRQHandler
  81. .weak USART1_IRQHandler
  82. .weak SPI1_IRQHandler
  83. .weak TIM1_BRK_IRQHandler
  84. .weak TIM1_UP_IRQHandler
  85. .weak TIM1_TRG_COM_IRQHandler
  86. .weak TIM1_CC_IRQHandler
  87. .weak TIM2_IRQHandler
  88. .weak USART2_IRQHandler
  89. .weak OPCM_IRQHandler
  90. NMI_Handler:
  91. HardFault_Handler:
  92. SysTick_Handler:
  93. SW_Handler:
  94. WWDG_IRQHandler:
  95. PVD_IRQHandler:
  96. FLASH_IRQHandler:
  97. RCC_IRQHandler:
  98. EXTI7_0_IRQHandler:
  99. AWU_IRQHandler:
  100. DMA1_Channel1_IRQHandler:
  101. DMA1_Channel2_IRQHandler:
  102. DMA1_Channel3_IRQHandler:
  103. DMA1_Channel4_IRQHandler:
  104. DMA1_Channel5_IRQHandler:
  105. DMA1_Channel6_IRQHandler:
  106. DMA1_Channel7_IRQHandler:
  107. ADC1_IRQHandler:
  108. I2C1_EV_IRQHandler:
  109. I2C1_ER_IRQHandler:
  110. USART1_IRQHandler:
  111. SPI1_IRQHandler:
  112. TIM1_BRK_IRQHandler:
  113. TIM1_UP_IRQHandler:
  114. TIM1_TRG_COM_IRQHandler:
  115. TIM1_CC_IRQHandler:
  116. TIM2_IRQHandler:
  117. USART2_IRQHandler:
  118. OPCM_IRQHandler:
  119. 1:
  120. j 1b
  121. .section .text.handle_reset, "ax", @progbits
  122. .weak handle_reset
  123. .align 1
  124. handle_reset:
  125. .option push
  126. .option norelax
  127. la gp, __global_pointer$
  128. .option pop
  129. 1:
  130. la sp, _eusrstack
  131. 2:
  132. /* Load data section from flash to RAM */
  133. la a0, _data_lma
  134. la a1, _data_vma
  135. la a2, _edata
  136. bgeu a1, a2, 2f
  137. 1:
  138. lw t0, (a0)
  139. sw t0, (a1)
  140. addi a0, a0, 4
  141. addi a1, a1, 4
  142. bltu a1, a2, 1b
  143. 2:
  144. /* Clear bss section */
  145. la a0, _sbss
  146. la a1, _ebss
  147. bgeu a0, a1, 2f
  148. 1:
  149. sw zero, (a0)
  150. addi a0, a0, 4
  151. bltu a0, a1, 1b
  152. 2:
  153. /* Enable global interrupt and configure privileged mode */
  154. li t0, 0x1880
  155. csrw mstatus, t0
  156. /* Enable interrupt nesting and hardware stack */
  157. li t0, 0x3
  158. csrw 0x804, t0
  159. /* Configure the interrupt vector table recognition mode and entry address mode */
  160. la t0, _start
  161. ori t0, t0, 3
  162. csrw mtvec, t0
  163. jal SystemInit
  164. la t0, main
  165. csrw mepc, t0
  166. mret