中断请求寄存器、优先权裁决器、中断正在服务寄存器和中断屏蔽寄存器这四个功能部件协同工作,从而实现中断的请求和对多个中断源的管理。下面就分析一下8259A对外部中断的处理过程。8位中断请求寄存器IRR可以保存中断请求的状态,当中断请求线IR7~IR0连接的某个中断源发出有效的中断请求信号时,中断请求寄存器IRR中与之对应的某一位就置位。为满足实际应用的多种情况要求,我们可以通过编程选择中断源的请求信号到底是电平有效还是脉冲边沿有效。这就是中断请求寄存器IRR的主要功能。IRR保存了中断请求后,并不是说这个中断请求可以马上得到响应,需要判断是否有比他优先级高的中断申请。另外一个功能部件优先权裁决器PR就负责对多中断源的优先权裁决。如果有两个或两个以上的中断请求信号同时有效,优先权裁决器将根据中断屏蔽寄存器的状态和所设置的中断优先级状态判断哪一个中断请求有可能被响应。8位的中断屏蔽寄存器IMR和8根中断请求线对应,可以通过它们分别对8个中断请求设置屏蔽。控制逻辑首先判断该中断源的申请是否被屏蔽,如果IMR中的对应位是0,就表示没有屏蔽这个中断,被屏蔽的中断请求是不送往优先权裁决器的。如果当前没有正在服务的中断程序,优先权裁决器就选择这个中断请求响应。然后8位的正在服务寄存器ISR把正在被服务中断源的序号保存下来。就是说某级中断请求信号一旦被响应,该级正在服务寄存器的相应位置1。如果中断服务期间没有其他中断申请,则执行完中断服务程序,回到原来的状态。如果服务过程中又发生了新的中断请求,优先权裁决器裁决时,比较当前申请中断的优先级和正在服务中断的优先级,如果当前申请中断的优先级高于正在服务中断的优先级,就驱动INT信号有效,向CPU发出申请。这就意味着优先权等于或低于正在服务中断的中断请求将一律被挂起。 ��综上我们可以看出,整个控制逻辑是根据中断请求、裁决的结果来决定是否激活INT信号的。INT信号就是对CPU的中断请求信号(实际应用中与CPU的INTR连接)。INT被驱动为有效状态,也就是向CPU发出了中断申请以后,如果CPU的中断允许标志IF为1,CPU将从INTA#引线上回应2个负脉冲给控制逻辑。第一个INTA#负脉冲到达时,IRR的锁存功能被禁止,也就是此时不响应IR0~IR7上的中断请求,直到第二个负脉冲到达才恢复锁存功能。第一个负脉冲通知8259当前的申请得到响应,于是,当前中断服务寄存器ISR中对应的位置1,将对应的IRR位清零(就是中断申请时候IRR设置的对应位)。第二个INTA#相当于读信号,它令8259A的控制逻辑把编程时设定的中断类型码(存放在中断类型寄存器中)送上数据总线,CPU读取这个类型码,并转向执行该类型码的中断服务程序。 |