| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- /********************************** (C) COPYRIGHT *******************************
- * File Name : startup_gcc.s
- * Author : WCH
- * Version : V1.0
- * Date : 2020/07/31
- * Description : CH56x vector table for eclipse toolchain.
- *******************************************************************************/
- .section .init,"ax",@progbits
- .global _start
- .align 1
- _start:
- j handle_reset
- .section .vector,"ax",@progbits
- .align 1
- _vector_base:
- .option norvc;
- .word 0
- .word 0
- j nmi_handler
- j hardfault_handler
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- j systick_handler
- .word 0
- j swi_handler
- .word 0
- /* External Interrupts */
- j wdog_irq_handler
- j tmr0_irq_handler
- j gpio_irq_handler
- j spi0_irq_handler
- j usbss_irq_handler
- j link_irq_handler
- j tmr1_irq_handler
- j tmr2_irq_handler
- j uart0_irq_handler
- j usbhs_irq_handler
- j emmc_irq_handler
- j dvp_irq_handler
- j hspi_irq_handler
- j spi1_irq_handler
- j uart1_irq_handler
- j uart2_irq_handler
- j uart3_irq_handler
- j serdes_irq_handler
- j eth_irq_handler
- j pmt_irq_handler
- j ecdc_irq_handler
- .option rvc;
- .section .text.vector_handler,"ax", @prsocogbits
- .weak nmi_handler
- .weak hardfault_handler
- .weak systick_handler
- .weak swi_handler
- .weak wdog_irq_handler
- .weak tmr0_irq_handler
- .weak gpio_irq_handler
- .weak spi0_irq_handler
- .weak usbss_irq_handler
- .weak link_irq_handler
- .weak tmr1_irq_handler
- .weak tmr2_irq_handler
- .weak uart0_irq_handler
- .weak usbhs_irq_handler
- .weak emmc_irq_handler
- .weak dvp_irq_handler
- .weak hspi_irq_handler
- .weak spi1_irq_handler
- .weak uart1_irq_handler
- .weak uart2_irq_handler
- .weak uart3_irq_handler
- .weak serdes_irq_handler
- .weak eth_irq_handler
- .weak pmt_irq_handler
- .weak ecdc_irq_handler
- nmi_handler: j .L_rip
- hardfault_handler: j .L_rip
- systick_handler: j .L_rip
- swi_handler: j .L_rip
- wdog_irq_handler: j .L_rip
- tmr0_irq_handler: j .L_rip
- gpio_irq_handler: j .L_rip
- spi0_irq_handler: j .L_rip
- usbss_irq_handler: j .L_rip
- link_irq_handler: j .L_rip
- tmr1_irq_handler: j .L_rip
- tmr2_irq_handler: j .L_rip
- uart0_irq_handler: j .L_rip
- usbhs_irq_handler: j .L_rip
- emmc_irq_handler: j .L_rip
- dvp_irq_handler: j .L_rip
- hspi_irq_handler: j .L_rip
- spi1_irq_handler: j .L_rip
- uart1_irq_handler: j .L_rip
- uart2_irq_handler: j .L_rip
- uart3_irq_handler: j .L_rip
- serdes_irq_handler: j .L_rip
- eth_irq_handler: j .L_rip
- pmt_irq_handler: j .L_rip
- ecdc_irq_handler: j .L_rip
- .L_rip:
- csrr t0, mepc
- csrr t1, mstatus
- csrr t2, mcause
- csrr t3, mtval
- csrr t4, mscratch
- 1: j 1b
- .section .text.handle_reset,"ax",@progbits
- .weak handle_reset
- .align 1
- handle_reset:
- .option push
- .option norelax
- la gp, __global_pointer$
- .option pop
- 1:
- la sp, _eusrstack
- /* Load data section from flash to RAM */
- 2:
- la a0, _data_lma
- la a1, _data_vma
- la a2, _edata
- bgeu a1, a2, 2f
- 1:
- lw t0, (a0)
- sw t0, (a1)
- addi a0, a0, 4
- addi a1, a1, 4
- bltu a1, a2, 1b
- /* clear bss section */
- 2:
- la a0, _sbss
- la a1, _ebss
- bgeu a0, a1, 2f
- 1:
- sw zero, (a0)
- addi a0, a0, 4
- bltu a0, a1, 1b
- /* clear dmadata section */
- 2:
- la a0, _dmadata_start
- la a1, _dmadata_end
- bgeu a0, a1, 2f
- 1:
- sw zero, (a0)
- addi a0, a0, 4
- bltu a0, a1, 1b
- 2:
- /* leave all interrupt disabled */
- li t0, 0x1800
- csrs mstatus, t0
- la t0, _vector_base
- ori t0, t0, 1
- csrw mtvec, t0
- la t0, entry
- csrw mepc, t0
- mret
|