2.中断嵌套
中断嵌套是指正在运行的中断处理程序,又被其它中断源中断的情况。
一个正在执行的中断处理程序,在开中断(IF=1)的情况下,能被优先级高于它的中断源中断,但如果要被同级或低级的中断源中断,则必须发出EOI命令,清除正在执行的中断请求,才能响应同级或低级的中断。
80X86没有规定中断嵌套的深度(中断程序又被中断的层次),但在实际使用时,多重的中断嵌套要受到堆栈容量的限制,所以在编写中断程序时,一定要考虑有足够的堆栈单元来保存多次中断的断点及各寄存器的内容。
首先,CPU响应优先级高的IR2,转去处理IR2的中断处理程序。进入IR2处理程序后,IF被置为1。当IR1的中断请求到达后,因IR1的优先级高于IR2,CPU就立即中断IR2的程序,转去执行IR1的处理程序。在IR1处理程序中,由指令发出了EOI命令,结束了IR1的中断请求。返回IR2处理程序后,同样由于发出EOI命令清除了IR2的中断请求,所以在较低级的中断请求IR4到达后,即转向处理IR4的中断请求。在IR4处理程序的执行过程中,IR3的中断请求到达,当判断IF已被置为1,则又中断了IR4的程序,转去执行IR3的程序。在IR3程序中,也发出了开中断指令(STI)和中断结束命令(EOI),最后IRET指令使其返回到IR4程序,IR4在返回IR2之前也发出了EOI命令,结束了IR4的中断请求。
IR2中断请求在前面已被清除,所以IR4执行完后,IR2继续执行直到返回主程序。
中断嵌套举例:
该动画的例子是在正常优先级方式下,优先级中断和中断嵌套发生时的处理过程。该例子假定在主程序的执行过程中,IR2和IR4的中断请求同时发生,
而后IR1的中断请求又到达,最后IR3的中断请求也到达。
|
|