检查中断级别Mips

检查中断级别Mips,mips,interrupt,Mips,Interrupt,我正在写一个中断处理程序,它接受键盘中断并将它们输入到程序中的一个函数中,以完成家庭作业。我目前的步骤是: 检查中断级别。MMIO接收器控制中断是一种硬件 1级中断,即图B.7中断掩码中的最低(最右边)位。{1,2}, 这是第8位=0x0100。对于这个硬件,我们不关心任何其他中断级别,所以如果 与此不匹配,不执行任何操作并退出 我想知道我是怎么做的。到目前为止,我的打断是这样的: .ktext 0x80000180 Interrupt: sw $at, saveat sw $a0, sav

我正在写一个中断处理程序,它接受键盘中断并将它们输入到程序中的一个函数中,以完成家庭作业。我目前的步骤是:

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

在这一点上,我需要检查中断级别,但我不确定这是如何在代码中实际完成的。有人能帮我吗?谢谢

如果$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,所以现在有点模糊,但是要了解大概的意思!