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