伪造中断(Spurious IRQs)IRQ7、IRQ15 的处理

来源:互联网 发布:windows网络文件系统 编辑:程序博客网 时间:2024/06/05 00:42

    当一个IRQ发生的时候,PIC芯片将通知CPU有一个中断发生了,CPU对其进行确认并等待PIC芯片发送这个中断的中断号。如果一个中断在PIC通知CPU后和PIC发送中断号给CPU知前的这段时间内消失了,那么CPU将一直等待PIC,但这时PIC没有一个合法的中断号来发生给CPU。系统将发生死锁。
    为了避免这种情况,PIC芯片将发送一个伪造的中断号给CPU,以免死锁的发生。这就是伪造中断(Spurious IRQs)。通常,伪造中断号是对应PIC芯片中优先级最低的中断号,即 主PIC的IRQ7,从PIC的IRQ15。

    有很多原因会导致这种情况,常见的是在不恰当的时候发生了EOI指令,或者是INTR线路上有噪声。
    处理伪造中断的方法是,当IRQ7发生时,先检测主PIC的ISR寄存器,看是否有真实中断发生,如果有则当普通中断处理,如果没有,则是一个伪造中断,可以直接忽略并且不要发送EOI指令。IRQ15和IRQ7的处理方法类似,不同点在于需要同时对主PIC和从PIC进行处理。
CosOS中暂时没有用到IRQ7和IRQ15,所以不进行真伪判断,直接忽略,代码如下。

 

 

关于CosOS更多资料请关注 http://bbs.ecjtu.org/forum-141-1.html