(1)控制逻辑 (2)中断优先权判优及其屏蔽 (3)辅助电路
|
分类:
2010-06-22 19:17:53
|
1.中断产生过程 (1)如果IR引脚上有信号,会使中断请求寄存器(Interrupt Request Register,IRR)相应的位置位,比如图中, IR3, IR4, IR5上有信号,那么IRR的3,4,5为1 (2)如果这些IRR中有一个是允许的,也就是没有被屏蔽,那么就会通过INT向CPU发出中断请求信号。屏蔽是由中断屏蔽寄存器(Interrupt Mask Register,IMR)来控制的,比如图中位3被置1,也就是IRR位3的信号被屏蔽了。在图中,还有4,5的信号没有被屏蔽,所以,会向CPU发出请求信号。 (3)如果CPU处于开中断状态,那么在执行指令的最后一个周期,在INTA上做出回应,并且关中断 (4)8259A收到回应后,将中断服务寄存器(In-Service Register)置位,而将相应的IRR复位: 8259芯片会比较IRR中的中断的优先级,如上图中,由于IMR中位3处于屏蔽状态,所以实际上只是比较IR4,I5,缺省情况下,IR0最高,依次往下,IR7最低(这种优先级可以被设置),所以上图中,ISR被设置为4. 相应的,IRR中位4被复位(我不太清楚,复位是清0,在未来某个时刻检测IR4上是否又有中断,还是在复位的同时检测IR4上是否又产生了中断) (5)在CPU发出下一个INTA信号时,8259将中断号送到数据线上,从而能被CPU接收到,这里有个问题:比如在上图中,8259获得的是数4,但是CPU需要的是中断号(并不为4),从而可以到idt找相应的向量。所以有一个从ISR的信号到中断号的转换。在Linux的设置中,4对应的中断号是0x24. (6)如果8259处于自动结束中断(Automatic End of Interrupt AEOI)状态,那么在刚才那个INTA信号结束前,8259的ISR复位(也就是清0),如果不处于这个状态,那么直到CPU发出EOI指令,它才会使得ISR复位。 2.一些相关专题 (1)从8259:在x86单CPU的机器上采用两个8259芯片,主芯片如上图所示,x86模式规定,从8259将它的INT脚与主8259的IR2相连,这样,如果从8259芯片的引脚IR8-IR15上有中断,那么会在INT上产生信号,主8259在IR2上产生了一个硬件信号,当它如上面的步骤处理后将IR2的中断传送给CPU,收到应答后,会通过CAS通知从8259芯片,从8259芯片将IRQ中断号送到数据线上,从而被CPU接收。 由此,我猜测它产生的所有中断在主8259上优先级为2,不知道对不对。 (2)关于屏蔽 从上面可以看出,屏蔽有两种方法,一种作用于CPU, 通过清除IF标记,使得CPU不去响应8259在INT上的请求。也就是所谓关中断。 另一种方法是,作用于8259,通过给它指令设置IMR,使得相应的IRR不参与ISR(见上面的(4)),被称为禁止(disable),反之,被称为允许(enable). 每次设置IMR只需要对端口0x21(主)或0xA1(从)输出一个字节即可,字节每位对应于IMR每位,例如: outb(cached_21,0x21); 为了统一处理16个中断,Linux用一个16位cached_irq_mask变量来记录这16个中断的屏蔽情况: static unsigned int cached_irq_mask = 0xffff; 为了分别对应于主从芯片的8位IMR,将这16位cached_irq_mask分成两个8位的变量: #define __byte(x,y) (((unsigned char *)&(y))[x]) #define cached_21 (__byte(0,cached_irq_mask)) #define cached_A1 (__byte(1,cached_irq_mask)) 在禁用某个irq的时候,调用下面的函数: void disable_8259A_irq(unsigned int irq) { unsigned int mask = 1 << irq; unsigned long flags; spin_lock_irqsave(&i8259A_lock, flags); cached_irq_mask |= mask;/*-- 对这16位变量设置 */ if (irq & 8)/*-- 看是对主8259设置还是对从8259芯片设置 */ outb(cached_A1,0xA1);/*-- 对从8259芯片设置 */ else outb(cached_21,0x21);/*-- 对主8259芯片设置 */ spin_unlock_irqrestore(&i8259A_lock, flags); } (3)关于中断号的输出 | |
|
(1)控制逻辑 (2)中断优先权判优及其屏蔽 (3)辅助电路
|