1 中断响应的条件
CPU在每一机器周期的S5P2状态顺序查询每一个中断源,到机器周期的S6状态时,便将有效的中断请求按优先级(权)顺序排好。当有中断请求、对应中断允许位为1、开中断(即EA=1)同时满足时,才可能响应中断。当有下列三种情况之一发生时,不会响应中断请求,在下一机器周期重新开始查询;否则,CPU响应中断。
1)CPU正在响应同级或更高优先级的中断。
2)当前指令未执行完。
3)正执行的指令是RETI中断返回指令或正在访问特殊功能寄存器IE或IP的指令(执行这些指令后至少再执行一条指令后才会响应中断)。
中断响应条件可以是以下的几条:
1)中断系统为开中断状态(即中断允许总控位EA=1,且相应中断源的中断允许分控位为1)。
2)中断源发出中断请求。
3)没有同优先级或高优先级的中断正在处理。
4)现行的单条指令已经执行完毕(保证单条指令在执行过程中不会被中途打断)。
5)若CPU正在执行的指令是RET、RETI或任何访问特殊功能寄存器IE或IP的指令,则在当前指令执行完后,还要紧接着再执行完下一条指令。
2 中断响应的过程
CPU响应中断执行过程为(www.xing528.com)
1)当前指令完毕后立即中止现行程序的运行,置位优先级状态寄存器,以阻止同级和低级中断。
2)程序计数器PC将当前值压入堆栈,保存断点处的地址,以便从中断服务程序返回时能继续执行原来的程序。
3)转至对应的中断源入口地址,执行中断服务程序,结束时由RETI弹出断点,返回主程序。
MCS-51系列单片对各中断源的中断服务程序入口地址及有关的中断请求标志清除状态有规定,见表4-6。
表4-6 中断源的中断服务程序入口地址
中断入口地址相邻中断源之间的地址空间只有8B。一般不足以容纳一个中断服务程序。也就是说,如果一个中断服务程序的长度超过这个限度,就会占用下一个中断源的入口地址,导致出错,我们称之为“地址覆盖”。一般在中断入口处写一条“LJMP XXXXH”或“AJMP XXXXH”的跳转指令,把中断服务程序的实际处理内容放到64KB程序存储器的任何地方或在ROM的2KB范围内其他位置转移,以避开“地址覆盖”现象。
1)将与被响应中断源对应的中断优先级状态触发器置1,以阻止后来的同级或低级的中断请求。
2)撤除所响应中断源的中断标志(复位为0),以防止CPU因中断标志未能得到及时撤除而重复响应同一中断请求。
3)执行一条由中断系统硬件电路提供的LCALL指令。该指令的转移地址就是被响应中断源的中断服务程序入口地址(见表4-6)。执行这条指令时,先把断点(发生中断的当前指令的下一条指令首地址)压入堆栈,以便中断返回时使用;然后将相应的中断服务程序入口地址送入PC,于是CPU转去执行相应的中断服务程序。
4)执行到中断服务程序的最后一条指令——中断返回指令RETI时,首先将响应中断时压入堆栈保存的断点地址从堆栈弹出到PC,使CPU从原来中断的地方继续执行程序;然后将与已响应中断源对应的中断优先级状态触发器清0,通知中断系统,该中断服务程序已执行完毕,在没有更高级别的中断请求发生时,允许CPU响应同优先级或低优先级的中断请求。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。