进入中断,硬件自动禁用中断,出中断,自动开启中断,无需手动操作,删除对应的代码
This commit is contained in:
@@ -128,15 +128,19 @@ trap_entry:
|
|||||||
sw t6,124(sp)
|
sw t6,124(sp)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
csrr t0, mstatus # 读取 mstatus 寄存器
|
csrr t0, mstatus # 读取 mstatus 寄存器
|
||||||
andi t0, t0, ~(1 << 3) # 清除 MIE 位 (全局中断禁用)
|
andi t0, t0, ~(1 << 3) # 清除 MIE 位 (全局中断禁用)
|
||||||
csrw mstatus, t0 # 写回 mstatus 寄存器
|
csrw mstatus, t0 # 写回 mstatus 寄存器
|
||||||
|
#endif
|
||||||
|
|
||||||
call plic_handle
|
call plic_handle
|
||||||
|
|
||||||
|
#if 0
|
||||||
csrr t0, mstatus
|
csrr t0, mstatus
|
||||||
ori t0, t0, 1<<3
|
ori t0, t0, 1<<3
|
||||||
csrw mstatus, t0
|
csrw mstatus, t0
|
||||||
|
#endif
|
||||||
|
|
||||||
lw ra,4(sp)
|
lw ra,4(sp)
|
||||||
lw sp,8(sp)
|
lw sp,8(sp)
|
||||||
@@ -219,9 +223,11 @@ opt_trap_entry:
|
|||||||
#sw t5,120(sp)
|
#sw t5,120(sp)
|
||||||
#sw t6,124(sp)
|
#sw t6,124(sp)
|
||||||
|
|
||||||
|
#if 0
|
||||||
csrr t0, mstatus # 读取 mstatus 寄存器
|
csrr t0, mstatus # 读取 mstatus 寄存器
|
||||||
andi t0, t0, ~(1 << 3) # 清除 MIE 位 (全局中断禁用)
|
andi t0, t0, ~(1 << 3) # 清除 MIE 位 (全局中断禁用)
|
||||||
csrw mstatus, t0 # 写回 mstatus 寄存器
|
csrw mstatus, t0 # 写回 mstatus 寄存器
|
||||||
|
#endif
|
||||||
|
|
||||||
lui t1, %hi(plic_claim)
|
lui t1, %hi(plic_claim)
|
||||||
lw t0, %lo(plic_claim)(t1) # t0 = &plic_claim
|
lw t0, %lo(plic_claim)(t1) # t0 = &plic_claim
|
||||||
@@ -264,9 +270,11 @@ opt_trap_entry:
|
|||||||
sw s1,%lo(flag_intRxEnd)(s0)
|
sw s1,%lo(flag_intRxEnd)(s0)
|
||||||
|
|
||||||
4:
|
4:
|
||||||
|
#if 0
|
||||||
csrr t0, mstatus
|
csrr t0, mstatus
|
||||||
ori t0, t0, 1<<3
|
ori t0, t0, 1<<3
|
||||||
csrw mstatus, t0
|
csrw mstatus, t0
|
||||||
|
#endif
|
||||||
|
|
||||||
#lw ra,4(sp)
|
#lw ra,4(sp)
|
||||||
#lw sp,8(sp)
|
#lw sp,8(sp)
|
||||||
|
|||||||
@@ -42,15 +42,17 @@ _prog_start:
|
|||||||
|
|
||||||
.balign 32
|
.balign 32
|
||||||
_rv32i_plic_handle:
|
_rv32i_plic_handle:
|
||||||
|
#if 0 /*RV32的核心自动禁用中断,无需手动禁用*/
|
||||||
csrr x16, mstatus # 读取 mstatus 寄存器
|
csrr x16, mstatus # 读取 mstatus 寄存器
|
||||||
andi x16, x16, ~(1 << 3) # 清除 MIE 位 (全局中断禁用)
|
andi x16, x16, ~(1 << 3) # 清除 MIE 位 (全局中断禁用)
|
||||||
csrw mstatus, x16 # 写回 mstatus 寄存器
|
csrw mstatus, x16 # 写回 mstatus 寄存器
|
||||||
|
#endif
|
||||||
|
|
||||||
lw x23, 0(x17) # x23 = *plic_claim
|
lw x23, 0(x17) # x23 = *plic_claim
|
||||||
sw x23, 0(x17) # *plic_claim = x23
|
sw x23, 0(x17) # *plic_claim = x23
|
||||||
|
|
||||||
#li x25, 1
|
#li x25, 1
|
||||||
|
#if 0
|
||||||
li x24, CDR_INT_TXEND
|
li x24, CDR_INT_TXEND
|
||||||
bne x23, x24, 1f #_if (x23 != x24) goto 1f
|
bne x23, x24, 1f #_if (x23 != x24) goto 1f
|
||||||
sw x25, 0(x18) #_else
|
sw x25, 0(x18) #_else
|
||||||
@@ -72,9 +74,29 @@ _rv32i_plic_handle:
|
|||||||
li x24, CDR_INT_RXEND
|
li x24, CDR_INT_RXEND
|
||||||
bne x23, x24, 4f #_if (x23 != x24) goto 4f
|
bne x23, x24, 4f #_if (x23 != x24) goto 4f
|
||||||
sw x25, 0(x21) #_else
|
sw x25, 0(x21) #_else
|
||||||
|
#else
|
||||||
|
bne x23, x28, 1f #_if (x23 != x24) goto 1f
|
||||||
|
sw x25, 0(x18) #_else
|
||||||
|
j 4f
|
||||||
|
|
||||||
|
1:
|
||||||
|
bne x23, x29, 2f #_if (x23 != x24) goto 2f
|
||||||
|
sw x25, 0(x19) #_else
|
||||||
|
j 4f
|
||||||
|
|
||||||
|
2:
|
||||||
|
bne x23, x30, 3f #_if (x23 != x24) goto 3f
|
||||||
|
sw x25, 0(x20) #_else
|
||||||
|
j 4f
|
||||||
|
|
||||||
|
3:
|
||||||
|
bne x23, x31, 4f #_if (x23 != x24) goto 4f
|
||||||
|
sw x25, 0(x21) #_else
|
||||||
|
#endif
|
||||||
4:
|
4:
|
||||||
|
#if 0 /*RV32的核心自动启动中断,无需手动启用*/
|
||||||
csrr x16, mstatus
|
csrr x16, mstatus
|
||||||
ori x16, x16, 1<<3
|
ori x16, x16, 1<<3
|
||||||
csrw mstatus, x16
|
csrw mstatus, x16
|
||||||
|
#endif
|
||||||
mret
|
mret
|
||||||
|
|||||||
Reference in New Issue
Block a user