1/********************************** (C) COPYRIGHT *******************************
2* File Name          : startup_ch32f10x.s
3* Author             : WCH
4* Version            : V1.0.0
5* Date               : 2020/11/01
6* Description        : CH32F10x vector table for GCC toolchain.
7*******************************************************************************/
8
9  .syntax unified
10  .cpu cortex-m3
11  .fpu softvfp
12  .thumb
13
14.global  g_pfnVectors
15.global  Default_Handler
16
17/* start address for the initialization values of the .data section.
18defined in linker script */
19.word  _sidata
20/* start address for the .data section. defined in linker script */
21.word  _sdata
22/* end address for the .data section. defined in linker script */
23.word  _edata
24/* start address for the .bss section. defined in linker script */
25.word  _sbss
26/* end address for the .bss section. defined in linker script */
27.word  _ebss
28
29/*******************************************************************************
30 Reset handler
31*******************************************************************************/
32  .section  .text.Reset_Handler
33  .weak  Reset_Handler
34  .type  Reset_Handler, %function
35Reset_Handler:
36
37/* Copy the data segment initializers from flash to SRAM */
38  movs  r1, #0
39  b     LoopCopyDataInit
40
41CopyDataInit:
42  ldr   r3, =_sidata
43  ldr   r3, [r3, r1]
44  str   r3, [r0, r1]
45  adds  r1, r1, #4
46
47LoopCopyDataInit:
48  ldr   r0, =_sdata
49  ldr   r3, =_edata
50  adds  r2, r0, r1
51  cmp   r2, r3
52  bcc   CopyDataInit
53  ldr   r2, =_sbss
54  b     LoopFillZerobss
55/* Zero fill the bss segment. */
56FillZerobss:
57  movs  r3, #0
58  str   r3, [r2], #4
59
60LoopFillZerobss:
61  ldr   r3, = _ebss
62  cmp   r2, r3
63  bcc   FillZerobss
64/* Call the clock system intitialization function.*/
65  bl  SystemInit
66/* Call the application's entry point.*/
67  bl    main
68  bx    lr
69.size  Reset_Handler, .-Reset_Handler
70
71/*******************************************************************************
72  This simply enters an infinite loop.
73*******************************************************************************/
74  .section  .text.Default_Handler,"ax",%progbits
75Default_Handler:
76Infinite_Loop:
77  b  Infinite_Loop
78  .size  Default_Handler, .-Default_Handler
79
80/*******************************************************************************
81 Vector Table Mapped to Address 0 at Reset.
82*******************************************************************************/
83  .section  .isr_vector,"a",%progbits
84  .type  g_pfnVectors, %object
85  .size  g_pfnVectors, .-g_pfnVectors
86
87g_pfnVectors:
88  .word  _estack
89  .word  Reset_Handler
90  .word  NMI_Handler
91  .word  HardFault_Handler
92  .word  MemManage_Handler
93  .word  BusFault_Handler
94  .word  UsageFault_Handler
95  .word  0
96  .word  0
97  .word  0
98  .word  0
99  .word  SVC_Handler
100  .word  DebugMon_Handler
101  .word  0
102  .word  PendSV_Handler
103  .word  SysTick_Handler
104
105/*******************************************************************************
106 External Interrupts
107*******************************************************************************/
108  .word  WWDG_IRQHandler
109  .word  PVD_IRQHandler
110  .word  TAMPER_IRQHandler
111  .word  RTC_IRQHandler
112  .word  FLASH_IRQHandler
113  .word  RCC_IRQHandler
114  .word  EXTI0_IRQHandler
115  .word  EXTI1_IRQHandler
116  .word  EXTI2_IRQHandler
117  .word  EXTI3_IRQHandler
118  .word  EXTI4_IRQHandler
119  .word  DMA1_Channel1_IRQHandler
120  .word  DMA1_Channel2_IRQHandler
121  .word  DMA1_Channel3_IRQHandler
122  .word  DMA1_Channel4_IRQHandler
123  .word  DMA1_Channel5_IRQHandler
124  .word  DMA1_Channel6_IRQHandler
125  .word  DMA1_Channel7_IRQHandler
126  .word  ADC1_2_IRQHandler
127  .word  USB_HP_CAN1_TX_IRQHandler
128  .word  USB_LP_CAN1_RX0_IRQHandler
129  .word  CAN1_RX1_IRQHandler
130  .word  CAN1_SCE_IRQHandler
131  .word  EXTI9_5_IRQHandler
132  .word  TIM1_BRK_IRQHandler
133  .word  TIM1_UP_IRQHandler
134  .word  TIM1_TRG_COM_IRQHandler
135  .word  TIM1_CC_IRQHandler
136  .word  TIM2_IRQHandler
137  .word  TIM3_IRQHandler
138  .word  TIM4_IRQHandler
139  .word  I2C1_EV_IRQHandler
140  .word  I2C1_ER_IRQHandler
141  .word  I2C2_EV_IRQHandler
142  .word  I2C2_ER_IRQHandler
143  .word  SPI1_IRQHandler
144  .word  SPI2_IRQHandler
145  .word  USART1_IRQHandler
146  .word  USART2_IRQHandler
147  .word  USART3_IRQHandler
148  .word  EXTI15_10_IRQHandler
149  .word  RTCAlarm_IRQHandler
150  .word  USBWakeUp_IRQHandler
151  .word  USBHD_IRQHandler
152
153/*******************************************************************************
154 Dummy Exception Handlers (infinite loops which can be modified)
155*******************************************************************************/
156  .weak  NMI_Handler
157  .thumb_set NMI_Handler,Default_Handler
158
159  .weak  HardFault_Handler
160  .thumb_set HardFault_Handler,Default_Handler
161
162  .weak  MemManage_Handler
163  .thumb_set MemManage_Handler,Default_Handler
164
165  .weak  BusFault_Handler
166  .thumb_set BusFault_Handler,Default_Handler
167
168  .weak  UsageFault_Handler
169  .thumb_set UsageFault_Handler,Default_Handler
170
171  .weak  SVC_Handler
172  .thumb_set SVC_Handler,Default_Handler
173
174  .weak  DebugMon_Handler
175  .thumb_set DebugMon_Handler,Default_Handler
176
177  .weak  PendSV_Handler
178  .thumb_set PendSV_Handler,Default_Handler
179
180  .weak  SysTick_Handler
181  .thumb_set SysTick_Handler,Default_Handler
182
183  .weak  WWDG_IRQHandler
184  .thumb_set WWDG_IRQHandler,Default_Handler
185
186  .weak  PVD_IRQHandler
187  .thumb_set PVD_IRQHandler,Default_Handler
188
189  .weak  TAMPER_IRQHandler
190  .thumb_set TAMPER_IRQHandler,Default_Handler
191
192  .weak  RTC_IRQHandler
193  .thumb_set RTC_IRQHandler,Default_Handler
194
195  .weak  FLASH_IRQHandler
196  .thumb_set FLASH_IRQHandler,Default_Handler
197
198  .weak  RCC_IRQHandler
199  .thumb_set RCC_IRQHandler,Default_Handler
200
201  .weak  EXTI0_IRQHandler
202  .thumb_set EXTI0_IRQHandler,Default_Handler
203
204  .weak  EXTI1_IRQHandler
205  .thumb_set EXTI1_IRQHandler,Default_Handler
206
207  .weak  EXTI2_IRQHandler
208  .thumb_set EXTI2_IRQHandler,Default_Handler
209
210  .weak  EXTI3_IRQHandler
211  .thumb_set EXTI3_IRQHandler,Default_Handler
212
213  .weak  EXTI4_IRQHandler
214  .thumb_set EXTI4_IRQHandler,Default_Handler
215
216  .weak  DMA1_Channel1_IRQHandler
217  .thumb_set DMA1_Channel1_IRQHandler,Default_Handler
218
219  .weak  DMA1_Channel2_IRQHandler
220  .thumb_set DMA1_Channel2_IRQHandler,Default_Handler
221
222  .weak  DMA1_Channel3_IRQHandler
223  .thumb_set DMA1_Channel3_IRQHandler,Default_Handler
224
225  .weak  DMA1_Channel4_IRQHandler
226  .thumb_set DMA1_Channel4_IRQHandler,Default_Handler
227
228  .weak  DMA1_Channel5_IRQHandler
229  .thumb_set DMA1_Channel5_IRQHandler,Default_Handler
230
231  .weak  DMA1_Channel6_IRQHandler
232  .thumb_set DMA1_Channel6_IRQHandler,Default_Handler
233
234  .weak  DMA1_Channel7_IRQHandler
235  .thumb_set DMA1_Channel7_IRQHandler,Default_Handler
236
237  .weak  ADC1_2_IRQHandler
238  .thumb_set ADC1_2_IRQHandler,Default_Handler
239
240  .weak  USB_HP_CAN1_TX_IRQHandler
241  .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler
242
243  .weak  USB_LP_CAN1_RX0_IRQHandler
244  .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler
245
246  .weak  CAN1_RX1_IRQHandler
247  .thumb_set CAN1_RX1_IRQHandler,Default_Handler
248
249  .weak  CAN1_SCE_IRQHandler
250  .thumb_set CAN1_SCE_IRQHandler,Default_Handler
251
252  .weak  EXTI9_5_IRQHandler
253  .thumb_set EXTI9_5_IRQHandler,Default_Handler
254
255  .weak  TIM1_BRK_IRQHandler
256  .thumb_set TIM1_BRK_IRQHandler,Default_Handler
257
258  .weak  TIM1_UP_IRQHandler
259  .thumb_set TIM1_UP_IRQHandler,Default_Handler
260
261  .weak  TIM1_TRG_COM_IRQHandler
262  .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler
263
264  .weak  TIM1_CC_IRQHandler
265  .thumb_set TIM1_CC_IRQHandler,Default_Handler
266
267  .weak  TIM2_IRQHandler
268  .thumb_set TIM2_IRQHandler,Default_Handler
269
270  .weak  TIM3_IRQHandler
271  .thumb_set TIM3_IRQHandler,Default_Handler
272
273  .weak  TIM4_IRQHandler
274  .thumb_set TIM4_IRQHandler,Default_Handler
275
276  .weak  I2C1_EV_IRQHandler
277  .thumb_set I2C1_EV_IRQHandler,Default_Handler
278
279  .weak  I2C1_ER_IRQHandler
280  .thumb_set I2C1_ER_IRQHandler,Default_Handler
281
282  .weak  I2C2_EV_IRQHandler
283  .thumb_set I2C2_EV_IRQHandler,Default_Handler
284
285  .weak  I2C2_ER_IRQHandler
286  .thumb_set I2C2_ER_IRQHandler,Default_Handler
287
288  .weak  SPI1_IRQHandler
289  .thumb_set SPI1_IRQHandler,Default_Handler
290
291  .weak  SPI2_IRQHandler
292  .thumb_set SPI2_IRQHandler,Default_Handler
293
294  .weak  USART1_IRQHandler
295  .thumb_set USART1_IRQHandler,Default_Handler
296
297  .weak  USART2_IRQHandler
298  .thumb_set USART2_IRQHandler,Default_Handler
299
300  .weak  USART3_IRQHandler
301  .thumb_set USART3_IRQHandler,Default_Handler
302
303  .weak  EXTI15_10_IRQHandler
304  .thumb_set EXTI15_10_IRQHandler,Default_Handler
305
306  .weak  RTCAlarm_IRQHandler
307  .thumb_set RTCAlarm_IRQHandler,Default_Handler
308
309  .weak  USBWakeUp_IRQHandler
310  .thumb_set USBWakeUp_IRQHandler,Default_Handler
311
312  .weak  USBHD_IRQHandler
313  .thumb_set USBHD_IRQHandler,Default_Handler
314