initial commit

This commit is contained in:
2026-04-12 22:20:18 +08:00
commit 190c2edbb2
155 changed files with 36314 additions and 0 deletions

188
sdk/software/bsp/env/trap_handler.S vendored Normal file
View File

@@ -0,0 +1,188 @@
#include "regdef.h"
.macro TRAP_ENTRY_SETJMP
addi.w sp, sp, -124
st.w ra, sp, 120
st.w tp, sp, 116
st.w sp, sp, 112
st.w a0, sp, 108
st.w a1, sp, 104
st.w a2, sp, 100
st.w a3, sp, 96
st.w a4, sp, 92
st.w a5, sp, 88
st.w a6, sp, 84
st.w a7, sp, 80
st.w t0, sp, 76
st.w t1, sp, 72
st.w t2, sp, 68
st.w t3, sp, 64
st.w t4, sp, 60
st.w t5, sp, 56
st.w t6, sp, 52
st.w t7, sp, 48
st.w t8, sp, 44
st.w $r21, sp,40
st.w fp, sp, 36
st.w s0, sp, 32
st.w s1, sp, 28
st.w s2, sp, 24
st.w s3, sp, 20
st.w s4, sp, 16
st.w s5, sp, 12
st.w s6, sp, 8
st.w s7, sp, 4
st.w s8, sp, 0
.endm
.macro TRAP_EXIT_LONGJMP
ld.w ra, sp, 120
ld.w tp, sp, 116
ld.w sp, sp, 112
ld.w a0, sp, 108
ld.w a1, sp, 104
ld.w a2, sp, 100
ld.w a3, sp, 96
ld.w a4, sp, 92
ld.w a5, sp, 88
ld.w a6, sp, 84
ld.w a7, sp, 80
ld.w t0, sp, 76
ld.w t1, sp, 72
ld.w t2, sp, 68
ld.w t3, sp, 64
ld.w t4, sp, 60
ld.w t5, sp, 56
ld.w t6, sp, 52
ld.w t7, sp, 48
ld.w t8, sp, 44
ld.w $r21, sp,40
ld.w fp, sp, 36
ld.w s0, sp, 32
ld.w s1, sp, 28
ld.w s2, sp, 24
ld.w s3, sp, 20
ld.w s4, sp, 16
ld.w s5, sp, 12
ld.w s6, sp, 8
ld.w s7, sp, 4
ld.w s8, sp, 0
addi.w sp, sp, 124
ertn
.endm
.section .text
.align 6
.global trap_handler
.weak trap_handler
trap_handler:
TRAP_ENTRY_SETJMP
csrrd a0, csr_estat
csrrd a1, csr_era
srli.w t0, a0, 16
bne zero, t0, is_exceptions
andi t0, a0, 0x3FC
srli.w t1, t0, 2
# priority
move t2, t1
andi t2, t2, 0x1
li.w t8, 0x1
beq t2, t8, handle_hwi0
move t2, t1
andi t2, t2, 0x2
li.w t8, 0x2
beq t2, t8, handle_hwi1
move t2, t1
andi t2, t2, 0x4
li.w t8, 0x4
beq t2, t8, handle_hwi2
move t2, t1
andi t2, t2, 0x8
li.w t8, 0x8
beq t2, t8, handle_hwi3
move t2, t1
andi t2, t2, 0x10
li.w t8, 0x10
beq t2, t8, handle_hwi4
move t2, t1
andi t2, t2, 0x20
li.w t8, 0x20
beq t2, t8, handle_hwi5
move t2, t1
andi t2, t2, 0x40
li.w t8, 0x40
beq t2, t8, handle_hwi6
move t2, t1
andi t2, t2, 0x80
li.w t8, 0x80
beq t2, t8, handle_hwi7
b trap_jump_exit
is_exceptions:
addi.w t8, a1, 4
csrwr t8, csr_era
1:
b 1b
trap_jump_exit:
TRAP_EXIT_LONGJMP
# HWI0
handle_hwi0:
bl HWI0_IntrHandler
b trap_jump_exit
# HWI1
handle_hwi1:
b trap_jump_exit
# HWI2
handle_hwi2:
b trap_jump_exit
# HWI3
handle_hwi3:
b trap_jump_exit
# HWI4
handle_hwi4:
b trap_jump_exit
# HWI5
handle_hwi5:
b trap_jump_exit
# HWI6
handle_hwi6:
b trap_jump_exit
# HWI7
handle_hwi7:
b trap_jump_exit
.weak HWI0_IntrHandler
HWI0_IntrHandler:
1:
b 1b