检查中断级别Mips

时间:2014-05-09 19:50:00

标签: mips interrupt

我正在编写一个中断处理程序,它接受键盘中断并将它们输入到程序中用于作业分配的函数中。我目前的步骤是:

检查中断级别。 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

此时我需要检查中断级别,但我不确定这是如何在代码中实际完成的。谁能帮我?谢谢!

1 个答案:

答案 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