1/********************************** (C) COPYRIGHT *******************************
2* File Name          : startup_gcc.s
3* Author             : WCH
4* Version            : V1.0
5* Date               : 2020/07/31
6* Description        : CH56x vector table for eclipse toolchain.
7*******************************************************************************/
8
9	.section	.init,"ax",@progbits
10	.global	_start
11	.align	1
12_start:
13	j	handle_reset
14
15    .section    .vector,"ax",@progbits
16    .align  1
17_vector_base:
18    .option norvc;
19    .word   0
20    .word   0
21        j   nmi_handler
22        j   hardfault_handler
23    .word   0
24    .word   0
25    .word   0
26    .word   0
27    .word   0
28    .word   0
29    .word   0
30    .word   0
31        j   systick_handler
32    .word   0
33        j   swi_handler
34    .word   0
35    /* External Interrupts */
36        j   wdog_irq_handler
37        j   tmr0_irq_handler
38        j   gpio_irq_handler
39        j   spi0_irq_handler
40        j   usbss_irq_handler
41        j   link_irq_handler
42        j   tmr1_irq_handler
43        j   tmr2_irq_handler
44        j   uart0_irq_handler
45        j   usbhs_irq_handler
46        j   emmc_irq_handler
47        j   dvp_irq_handler
48        j   hspi_irq_handler
49        j   spi1_irq_handler
50        j   uart1_irq_handler
51        j   uart2_irq_handler
52        j   uart3_irq_handler
53        j   serdes_irq_handler
54        j   eth_irq_handler
55        j   pmt_irq_handler
56        j   ecdc_irq_handler
57
58    .option rvc;
59
60    .section    .text.vector_handler,"ax", @prsocogbits
61
62    .weak   nmi_handler
63    .weak   hardfault_handler
64    .weak   systick_handler
65    .weak   swi_handler
66    .weak   wdog_irq_handler
67    .weak   tmr0_irq_handler
68    .weak   gpio_irq_handler
69    .weak   spi0_irq_handler
70    .weak   usbss_irq_handler
71    .weak   link_irq_handler
72    .weak   tmr1_irq_handler
73    .weak   tmr2_irq_handler
74    .weak   uart0_irq_handler
75    .weak   usbhs_irq_handler
76    .weak   emmc_irq_handler
77    .weak   dvp_irq_handler
78    .weak   hspi_irq_handler
79    .weak   spi1_irq_handler
80    .weak   uart1_irq_handler
81    .weak   uart2_irq_handler
82    .weak   uart3_irq_handler
83    .weak   serdes_irq_handler
84    .weak   eth_irq_handler
85    .weak   pmt_irq_handler
86    .weak   ecdc_irq_handler
87
88nmi_handler:
89hardfault_handler:
90systick_handler:
91swi_handler:
92wdog_irq_handler:
93tmr0_irq_handler:
94gpio_irq_handler:
95spi0_irq_handler:
96usbss_irq_handler:
97link_irq_handler:
98tmr1_irq_handler:
99tmr2_irq_handler:
100uart0_irq_handler:
101usbhs_irq_handler:
102emmc_irq_handler:
103dvp_irq_handler:
104hspi_irq_handler:
105spi1_irq_handler:
106uart1_irq_handler:
107uart2_irq_handler:
108uart3_irq_handler:
109serdes_irq_handler:
110eth_irq_handler:
111pmt_irq_handler:
112ecdc_irq_handler:
113    j .L_rip
114
115.L_rip:
116    csrr t0, mepc
117    csrr t1, mstatus
118    csrr t2, mcause
119    csrr t3, mtval
120    csrr t4, mscratch
1211:  j 1b
122
123	.section	.text.handle_reset,"ax",@progbits
124	.weak	handle_reset
125	.align	1
126handle_reset:
127    .option push
128    .option	norelax
129	la gp, __global_pointer$
130    .option	pop
1311:
132	la sp, _eusrstack
133
134/* Load data section from flash to RAM */
1352:
136	la a0, _data_lma
137	la a1, _data_vma
138	la a2, _edata
139	bgeu a1, a2, 2f
1401:
141	lw t0, (a0)
142	sw t0, (a1)
143	addi a0, a0, 4
144	addi a1, a1, 4
145	bltu a1, a2, 1b
146/* clear bss section */
1472:
148	la a0, _sbss
149	la a1, _ebss
150	bgeu a0, a1, 2f
1511:
152	sw zero, (a0)
153	addi a0, a0, 4
154	bltu a0, a1, 1b
155
156/* clear dmadata section */
1572:
158    la a0, _dmadata_start
159    la a1, _dmadata_end
160    bgeu a0, a1, 2f
1611:
162    sw zero, (a0)
163    addi a0, a0, 4
164    bltu a0, a1, 1b
165
1662:
167	/* leave all interrupt disabled */
168    li t0, 0x1800
169    csrw mstatus, t0
170	la t0, _vector_base
171    ori t0, t0, 1
172	csrw mtvec, t0
173	la t0, entry
174	csrw mepc, t0
175	mret
176