210 lines
5.1 KiB
ArmAsm
210 lines
5.1 KiB
ArmAsm
// See LICENSE for license details.
|
|
|
|
#include "riscv_encoding.h"
|
|
|
|
.section .text.entry
|
|
.globl _start
|
|
.type _start,@function
|
|
_start:
|
|
csrc mstatus, MSTATUS_MIE
|
|
csrw mie, 0
|
|
|
|
la t0, machine_trap_entry
|
|
csrw mtvec, t0
|
|
#if 1
|
|
// before kernel run, the stack is unused
|
|
// so just borrow to use
|
|
la t0, k_idle_task_stk_addr
|
|
lw t1, k_idle_task_stk_size
|
|
add sp, t0, t1
|
|
#else
|
|
// uncomment in link.ld
|
|
la sp, _stack_top
|
|
#endif
|
|
|
|
/* Load data section */
|
|
la a0, _load_data
|
|
la a1, _data
|
|
la a2, _edata
|
|
bgeu a1, a2, begin_clear_bss
|
|
clear_data:
|
|
lw t0, (a0)
|
|
sw t0, (a1)
|
|
addi a0, a0, 4
|
|
addi a1, a1, 4
|
|
bltu a1, a2, clear_data
|
|
|
|
begin_clear_bss:
|
|
// clear bss section
|
|
la a0, _bss
|
|
la a1, _ebss
|
|
bgeu a0, a1, init_finish
|
|
clear_bss:
|
|
sw zero, (a0)
|
|
addi a0, a0, 4
|
|
bltu a0, a1, clear_bss
|
|
init_finish:
|
|
call main
|
|
__die:
|
|
j __die
|
|
|
|
|
|
|
|
.section .text
|
|
.weak eclic_msip_handler
|
|
.weak eclic_mtip_handler
|
|
.weak SysTick_IRQHandler
|
|
.weak eclic_bwei_handler
|
|
.weak eclic_pmovi_handler
|
|
.weak WWDGT_IRQHandler
|
|
.weak LVD_IRQHandler
|
|
.weak TAMPER_IRQHandler
|
|
.weak RTC_IRQHandler
|
|
.weak FMC_IRQHandler
|
|
.weak RCU_IRQHandler
|
|
.weak EXTI0_IRQHandler
|
|
.weak EXTI1_IRQHandler
|
|
.weak EXTI2_IRQHandler
|
|
.weak EXTI3_IRQHandler
|
|
.weak EXTI4_IRQHandler
|
|
.weak DMA0_Channel0_IRQHandler
|
|
.weak DMA0_Channel1_IRQHandler
|
|
.weak DMA0_Channel2_IRQHandler
|
|
.weak DMA0_Channel3_IRQHandler
|
|
.weak DMA0_Channel4_IRQHandler
|
|
.weak DMA0_Channel5_IRQHandler
|
|
.weak DMA0_Channel6_IRQHandler
|
|
.weak ADC0_1_IRQHandler
|
|
.weak CAN0_TX_IRQHandler
|
|
.weak CAN0_RX0_IRQHandler
|
|
.weak CAN0_RX1_IRQHandler
|
|
.weak CAN0_EWMC_IRQHandler
|
|
.weak EXTI5_9_IRQHandler
|
|
.weak TIMER0_BRK_IRQHandler
|
|
.weak TIMER0_UP_IRQHandler
|
|
.weak TIMER0_TRG_CMT_IRQHandler
|
|
.weak TIMER0_Channel_IRQHandler
|
|
.weak TIMER1_IRQHandler
|
|
.weak TIMER2_IRQHandler
|
|
.weak TIMER3_IRQHandler
|
|
.weak I2C0_EV_IRQHandler
|
|
.weak I2C0_ER_IRQHandler
|
|
.weak I2C1_EV_IRQHandler
|
|
.weak I2C1_ER_IRQHandler
|
|
.weak SPI0_IRQHandler
|
|
.weak SPI1_IRQHandler
|
|
.weak USART0_IRQHandler
|
|
.weak USART1_IRQHandler
|
|
.weak USART2_IRQHandler
|
|
.weak EXTI10_15_IRQHandler
|
|
.weak RTC_Alarm_IRQHandler
|
|
.weak USBFS_WKUP_IRQHandler
|
|
.weak EXMC_IRQHandler
|
|
.weak TIMER4_IRQHandler
|
|
.weak SPI2_IRQHandler
|
|
.weak UART3_IRQHandler
|
|
.weak UART4_IRQHandler
|
|
.weak TIMER5_IRQHandler
|
|
.weak TIMER6_IRQHandler
|
|
.weak DMA1_Channel0_IRQHandler
|
|
.weak DMA1_Channel1_IRQHandler
|
|
.weak DMA1_Channel2_IRQHandler
|
|
.weak DMA1_Channel3_IRQHandler
|
|
.weak DMA1_Channel4_IRQHandler
|
|
.weak CAN1_TX_IRQHandler
|
|
.weak CAN1_RX0_IRQHandler
|
|
.weak CAN1_RX1_IRQHandler
|
|
.weak CAN1_EWMC_IRQHandler
|
|
.weak USBFS_IRQHandler
|
|
|
|
.global handler_vector_table
|
|
.align 2
|
|
handler_vector_table:
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word eclic_msip_handler
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word SysTick_IRQHandler
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word eclic_bwei_handler
|
|
.word eclic_pmovi_handler
|
|
.word WWDGT_IRQHandler
|
|
.word LVD_IRQHandler
|
|
.word TAMPER_IRQHandler
|
|
.word RTC_IRQHandler
|
|
.word FMC_IRQHandler
|
|
.word RCU_IRQHandler
|
|
.word EXTI0_IRQHandler
|
|
.word EXTI1_IRQHandler
|
|
.word EXTI2_IRQHandler
|
|
.word EXTI3_IRQHandler
|
|
.word EXTI4_IRQHandler
|
|
.word DMA0_Channel0_IRQHandler
|
|
.word DMA0_Channel1_IRQHandler
|
|
.word DMA0_Channel2_IRQHandler
|
|
.word DMA0_Channel3_IRQHandler
|
|
.word DMA0_Channel4_IRQHandler
|
|
.word DMA0_Channel5_IRQHandler
|
|
.word DMA0_Channel6_IRQHandler
|
|
.word ADC0_1_IRQHandler
|
|
.word CAN0_TX_IRQHandler
|
|
.word CAN0_RX0_IRQHandler
|
|
.word CAN0_RX1_IRQHandler
|
|
.word CAN0_EWMC_IRQHandler
|
|
.word EXTI5_9_IRQHandler
|
|
.word TIMER0_BRK_IRQHandler
|
|
.word TIMER0_UP_IRQHandler
|
|
.word TIMER0_TRG_CMT_IRQHandler
|
|
.word TIMER0_Channel_IRQHandler
|
|
.word TIMER1_IRQHandler
|
|
.word TIMER2_IRQHandler
|
|
.word TIMER3_IRQHandler
|
|
.word I2C0_EV_IRQHandler
|
|
.word I2C0_ER_IRQHandler
|
|
.word I2C1_EV_IRQHandler
|
|
.word I2C1_ER_IRQHandler
|
|
.word SPI0_IRQHandler
|
|
.word SPI1_IRQHandler
|
|
.word USART0_IRQHandler
|
|
.word USART1_IRQHandler
|
|
.word USART2_IRQHandler
|
|
.word EXTI10_15_IRQHandler
|
|
.word RTC_Alarm_IRQHandler
|
|
.word USBFS_WKUP_IRQHandler
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word 0
|
|
.word EXMC_IRQHandler
|
|
.word 0
|
|
.word TIMER4_IRQHandler
|
|
.word SPI2_IRQHandler
|
|
.word UART3_IRQHandler
|
|
.word UART4_IRQHandler
|
|
.word TIMER5_IRQHandler
|
|
.word TIMER6_IRQHandler
|
|
.word DMA1_Channel0_IRQHandler
|
|
.word DMA1_Channel1_IRQHandler
|
|
.word DMA1_Channel2_IRQHandler
|
|
.word DMA1_Channel3_IRQHandler
|
|
.word DMA1_Channel4_IRQHandler
|
|
.word 0
|
|
.word 0
|
|
.word CAN1_TX_IRQHandler
|
|
.word CAN1_RX0_IRQHandler
|
|
.word CAN1_RX1_IRQHandler
|
|
.word CAN1_EWMC_IRQHandler
|
|
.word USBFS_IRQHandler
|