全部博文(32)
分类: LINUX
2010-07-07 17:27:01
“中断屏蔽寄存器”(Interrupt Mask Register,简称IMR)用于屏蔽8259A的中断信号输入,每一位对应一个输入。当IMR中的bit[i](0≤i≤7)位被置1时,相对应的中断信号输入线IRi上的中断信号将被8259A所屏蔽,也即IRi被禁止。
当外设产生中断信号时(由低到高的跳变信号,80x86系统中的8259A是边沿触发的,Edge Triggered),中断信号被输入到“中断请求寄存器”(Interrupt Request Register,简称IRR),并同时看看IMR中的相应位是否已被设置。如果没有被设置,则IRR中的相应位被设置为1,表示外设产生一个中断请求,等待CPU服务。
然后,8259A的优先级仲裁部分从IRR中选出一个优先级最高中断请求。优先级仲裁之后,8259A就通过其INT引脚向CPU发出中断信号,以通知CPU有外设请求中断服务。CPU在其当前指令执行完后就通过他的INTA引脚给8259A发出中断应答信号,以告诉8259A,CPU已经检测到有中断信号产生。
8259A在收到CPU的INTA信号后,将优先级最高的那个中断请求在ISR寄存器(In-Service Register,简称ISR)中对应的bit置1,表示该中断请求已得到CPU的服务,同时IRR寄存器中的相应位被清零重置。
然后,CPU再向8259A发出一个INTA脉冲信号,8259A在收到CPU的第二个INTA信号后,将中断请求对应的中断向量放到数据总线上,以供CPU读取。CPU读到中断向量后,就可以装入执行相应的中断处理程序。
边沿触发方式
边沿触发方式也是在初始化8259A时,由相应的控制字决定的。它是采用IR输入信号的上升沿触发即信号由低电平跳转高电平时触发,当IR由低电平跳转为高电平后,一直保持高电平到中断被响应时止。当第一个中断响应脉冲INTA的下降沿出现后,边沿检测器的锁存作用被解除,只有当IR变为无效后,边沿检测器才能重新进入待命状态,接受其它中断请求。因此,边沿触发方式,最好用负脉冲的后沿实现触发,IR信号为高时,为保持态,以满足定时要求。如图8-11所示。
边沿触发方式常被用于不希望产生重复响应及中断请求信号是一个短暂脉冲的情况。如果边沿触发方式与自动EOI方式联合使用,不会发生"重复嵌套"现象。