我正在尝试创建一个处理键盘输入的硬件中断处理程序。问题是我的处理程序只有在接收器控制寄存器的值为 1 时才应该继续。目前,我的代码产生的值为 3,所以我的处理程序只是退出,因为我只想处理硬件中断。我在网上找不到任何描述什么是 3 级中断以及如何修复我的代码以提供 1 级中断的地方。
有人可以告诉我第 3 级是什么,或者至少给我指出一个资源吗?谢谢
添加到此。我也得到 256 作为我的原因寄存器的值。我认为所有代码都是十六进制的,因此那将是代码 4。我可以看到这是来自非法地址的负载。这没有任何意义,因为直到我按下键盘上的一个键才调用中断处理程序。继承人的代码:
.data 0xffff0000
RecvCtrlReg: .word 0
.ktext 0x80000180
#move $k1, $at
#la $k0, frogger # save the address to frogger function for long call
mfc0 $k1, $13
beq $k1, 0, keyboard # If cause register is not zero, exit
li $v0, 10 # Do nothing and exit
syscall
keyboard: # else check interupt level
lw $t7, RecvCtrlReg
beq $t7, 1, continue # if the Reciever Control Reg is 1, its a hardware interrupt, so continue
li $v0, 10 # else do nothing and exit
syscall
continue:
jalr $k0 # long call frogger function
mtc0 $0, $13 # set cause register to 0
mfc0 $k0, $12 # Fix status register
andi $k0, 0xfffd # clear EXL bit
ori $k0, 0x1 # Enable interrupts
mtc0 $k0, $12 # Store value back into status register
#move $at, $k1
eret