我正在编写一个中断处理程序,它接受键盘中断并将它们输入到程序中用于作业分配的函数中。我目前的步骤是:
检查中断级别。 MMIO接收器控制中断是硬件 在级别1中断,这是图B.7中的中断屏蔽中最低(最右边)的位。{1,2}, 这是位8 = 0x0100。对于这个硬件,我们不关心任何其他中断级别,所以如果它 与这个不匹配,什么也不做,退出。
我想知道我是怎么做的。到目前为止,我的中断是这样的:
.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
此时我需要检查中断级别,但我不确定这是如何在代码中实际完成的。谁能帮我?谢谢!
答案 0 :(得分:2)
如果$ 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