8259A编程


一个外部中断请求信号通过中断请求线IRQ,传输到IMR(中断屏蔽寄存器),IMR根据所设定的中断屏蔽字(OCW1),决定是将其丢弃还是接受。如果可以接受,则8259A将IRR(中断请求暂存寄存器)中代表此IRQ的位置位,以表示此IRQ有中断请求信号,并同时向CPU的INTR(中断请求)管脚发送一个信号,但CPU这时可能正在执行一条指令,因此CPU不会立即响应,而当这CPU正忙着执行某条指令时,还有可能有其余的IRQ线送来中断请求,这些请求都会接受IMR的挑选,如果没有被屏蔽,那么这些请求也会被放到IRR中,也即IRR中代表它们的IRQ的相应位会被置1。
当CPU执行完一条指令时后,会检查一下INTR管脚是否有信号,如果发现有信号,就会转到中断服务,此时,CPU会立即向8259A芯片的INTA(中断应答)管脚发送一个信号。当芯片收到此信号后,判优部件开始工作,它在IRR中,挑选优先级最高的中断,将中断请求送到ISR(中断服务寄存器),也即将ISR中代表此IRQ的位置位,并将IRR中相应位置零,表明此中断正在接受CPU的处理。同时,将它的编号写入中断向量寄存器IVR的低三位,这时,CPU还会送来第二个INTA信号,当收到此信号后,芯片将IVR中的内容,也就是此中断的中断号送上通向CPU的数据线。
对8259A的编程是通过向其相应的端口发送一系列的ICW(初始化命令字)完成的。总共需要发送四个ICW,它们都分别有自己独特的格式,而且必须按次序发送,并且必须发送到相应的端口,下面我们先来看看第一个ICW1的结构:

ICW1:发送到0x20(主片)及0xa0(从片)端口
7 6 5 4 3 2 1 0
0 0 0 1 M 0 C I

I位:若置位,表示ICW4会被发送。(ICW4等下解释)
C位:若清零,表示工作在级联环境下。
M位:指出中断请求的电平触发模式,在PC机中,它应当被置零,表示采用“边沿触发模式”。

ICW2:发送到0x21(主片)及0xa1(从片)端口
7 6 5 4 3 2 1 0
A7 A6 A5 A4 A3 0 0 0

ICW2用来指示出IRQ0使用的中断号是什么,因为最后三位均是零,因此要求IRQ0的中断号必须是8的倍数,这又是一个很巧妙的设计。因为IRQ1的中断号就是IRQ0的中断号+1,IRQ2的中断号就是IRQ0的中断号+2,……,IRQ7的中断号就是IRQ0的中断号+7,刚好填满一个8个的中断向量号空间。

ICW3:发送到0x21(主片)及0xa1(从片)端口
ICW3只有在级联工作的时候才会被发送,它主要用来建立两个PIC之间的连接,对于主片与从片,它结构是不一样的。
(主片结构:)
7 6 5 4 3 2 1 0
IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 IRQ2 IRQ1 IRQ0

上面,如果相应的位被置1,则相应的IRQ线就被用于与从片连接,若清零则表示被连接到外围设备。
(从片结构:)
7 6 5 4 3 2 1 0
0 0 0 0 0 IRQ

上面的IRQ位指出了是主片的哪一个IRQ连到了从片,这需要同主片上发送的上面的主片结构字一致。

ICW4:发送到0x21(主片)及0xa1(从片)端口
7 6 5 4 3 2 1 0
0 0 0 0 0 0 EOI 80x86

80x86位:若置位则表示工作在80x86架构下。
EOI位:若置位则表示自动清除中断请求信号。在PC上这位需要被清零。




OCW(操作命令字),它们用来操作8259A的优先级、中断屏蔽及中断结束等控制。总共有三个OCW,它们也都有自己很独特的格式,不过它们的发送却不须按固定的顺序进行。


OCW1:中断屏蔽,发送到0x21(主片)或0xa1(从片)端口
7 6 5 4 3 2 1 0
IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 IRQ2 IRQ1 IRQ0


如果相应的位置1,则表示屏蔽相应的IRQ请求。

OCW2:优先权控制及中断结束命令,发送到0x20(主片)及0xa0(从片)端口
7 6 5 4 3 2 1 0
R SL EOI 0 0 L2 L1 L0


先来看看中断结束消息(EOI)
EOI也是OCW2型命令中的一种,当EOI位被置1,这就是一个EOI消息。SL是指定级别位,如果SL被置位,则表明这是一个指定级别的EOI消息,这个消息可以指定将ISR中的哪一位清零,即告诉8259A应当清除哪一个IRQ信号。L2、L1、L0就用来指定IRQ的编号。而在实际运用中我们却将SL及L2、L1、L0全置零。
SL置零表示这是一个不指定级别的EOI消息,则8259A芯片自动将ISR中所有被置位的IRQ里优先级最高的清零,因为它是正在被处理及等待处理的中断中优先级最高的,也就一定是CPU正在处理的中断
原文地址:https://www.cnblogs.com/weiweishuo/p/3082626.html