检查中断级别Mips
我正在写一个中断处理程序,它接受键盘中断并将它们输入到程序中的一个函数中,以完成家庭作业。我目前的步骤是: 检查中断级别。MMIO接收器控制中断是一种硬件 1级中断,即图B.7中断掩码中的最低(最右边)位。{1,2}, 这是第8位=0x0100。对于这个硬件,我们不关心任何其他中断级别,所以如果 与此不匹配,不执行任何操作并退出 我想知道我是怎么做的。到目前为止,我的打断是这样的:检查中断级别Mips,mips,interrupt,Mips,Interrupt,我正在写一个中断处理程序,它接受键盘中断并将它们输入到程序中的一个函数中,以完成家庭作业。我目前的步骤是: 检查中断级别。MMIO接收器控制中断是一种硬件 1级中断,即图B.7中断掩码中的最低(最右边)位。{1,2}, 这是第8位=0x0100。对于这个硬件,我们不关心任何其他中断级别,所以如果 与此不匹配,不执行任何操作并退出 我想知道我是怎么做的。到目前为止,我的打断是这样的: .ktext 0x80000180 Interrupt: sw $at, saveat sw $a0, sav
.ktext 0x80000180
Interrupt:
sw $at, saveat
sw $a0, save0
sw $a1, save1
mfc0 $k0, $13 #$k0 = Cause
mfc0 $k1, $14 #$k1 = EPC
andi $k0, $k0, 0x003c # $k0 = Exception Code
bnez $k0, done # If its not equal 0, its not a keyboard interrupt, done
在这一点上,我需要检查中断级别,但我不确定这是如何在代码中实际完成的。有人能帮我吗?谢谢 如果$k0是您的原因,我假设它也存储了该级别。像这样做怎么样
andi $t0, $k0, 0x003c # $t0 = Exception code, $k0 is preserved
bnez $t0, done #If its not equal 0, its not a keyboard interrupt, done
andi $t0, $k0, 0x0100 #Check to see if this bit is set in $k0
bnez $t0, done #If it is set, service the interrupt
#otherwise, go to done
#service the interrupt
done:
#clean up and exit
哦,去年我从没有看过你的评论,但当时我明白了。自从这项作业以来,我还没有使用过MIPS,所以现在有点模糊,但是要了解大概的意思!