8259A芯片是一�(gè)中斷管理芯片,中斷的�(lái)源除了來(lái)自于硬件自身的NMI中斷和來(lái)自于軟件的INT n指令造成的軟件中斷之外,還有�(lái)自于外部硬件�(shè)備的中斷,這些中斷是可屏蔽的。這些中斷也都通過(guò)可編程中斷控制器PIC(Programmable Interrupt Controller)�(jìn)行控�,并傳遞給CPU�
�(dāng)一�(gè)中斷�(qǐng)求從IR0到IR7中的某根線到�(dá)IMR�(shí),IMR首先判斷此IR是否被屏�,如果被屏蔽,則此中斷請(qǐng)求被丟棄;否則,則將其放入IRR��
在此中斷�(qǐng)求不能�(jìn)行下一步處理之前,它一直被放在IRR�。一旦發(fā)�(xiàn)處理中斷的時(shí)�(jī)已到,Priority Resolver將從所有被放置于IRR中的中斷中挑選出一�(gè)�(yōu)先級(jí)的中斷,將其傳遞給CPU去處�。IR�(hào)越低的中斷優(yōu)先級(jí)別越�,比如IR0的優(yōu)先級(jí)別是��
8259A通過(guò)�(fā)送一�(gè)INTR(Interrupt Request)信�(hào)給CPU,通知CPU有一�(gè)中斷到達(dá)。CPU收到這�(gè)信號(hào)�,會(huì)暫停�(zhí)行下一條指�,然后發(fā)送一�(gè)INTA(Interrupt Acknowledge)信�(hào)�8259A�8259A收到這�(gè)信號(hào)之后,馬上將ISR中對(duì)�(yīng)此中斷請(qǐng)求的Bit�(shè)�,同�(shí)IRR中相�(yīng)的bit�(huì)被reset。比�,如果當(dāng)前的中斷�(qǐng)求是IR3的話,那么ISR中的bit-3就會(huì)被設(shè)�,IRR中IR3�(duì)�(yīng)的bit就會(huì)被reset。這表示此中斷�(qǐng)求正在被CPU處理,而不是正在等待CPU處理�
隨后,CPU�(huì)再次�(fā)送一�(gè)INTA信號(hào)�8259A,要求它告訴CPU此中斷請(qǐng)求的中斷向量是什�,這是一�(gè)�0�255的一�(gè)�(shù)�8259A根據(jù)被設(shè)置的起始向量�(hào)(起始向量號(hào)通過(guò)中斷控制字ICW2被初始化)加上中斷請(qǐng)求號(hào)�(jì)算出中斷向量�(hào),并將其放置在Data Bus上。比如被初始化的起始向量�(hào)�8,當(dāng)前的中斷�(qǐng)求為IR3,則�(jì)算出的中斷向量為8+3=11�
CPU從Data Bus上得到這�(gè)中斷向量之后,就去IDT中找到相�(yīng)的中斷服�(wù)程序ISR,并�(diào)用它。如�8259A的End of Interrupt (EOI)通知被設(shè)定位人工模式,那么當(dāng)ISR處理完該處理的事情之�,應(yīng)該發(fā)送一�(gè)EOI�8259A�
8259A得到EOI通知之后,ISR寄存器中�(duì)�(yīng)于此中斷�(qǐng)求的Bit�(huì)被Reset�
如果8259A的End of Interrupt (EOI)通知被設(shè)定位自動(dòng)模式,那么在�2�(gè)INTA信號(hào)收到��8259A ISR寄存器中�(duì)�(yīng)于此中斷�(qǐng)求的Bit就會(huì)被Reset�
在此期間,如果又有新的中斷請(qǐng)求到�(dá),并被放置于IRR�,如果這些新的中斷�(qǐng)求中有比在ISR寄存中放置的所有中斷優(yōu)先級(jí)別還高的�,那么這些高優(yōu)先級(jí)別的中斷�(qǐng)求將�(huì)被馬上按照上述過(guò)程�(jìn)行處理;否則,這些中斷將會(huì)被放在IRR中,直到ISR中高�(yōu)先級(jí)別的中斷被處理結(jié)�,也就是�(shuō)知道ISR寄存器中高優(yōu)先級(jí)別的bit被Reset為止�
一�(gè)8259A芯片的可以接最�8�(gè)中斷�,但由于可以�2�(gè)或多�(gè)8259A芯片�(jí)連(cascade�,并且最多可以級(jí)連到9�(gè),所以最多可以接64�(gè)中斷�。如今絕大多�(shù)的PC都擁有兩�(gè)8259A,這樣 最多可以接�15�(gè)中斷源�
通過(guò)8259A可以�(duì)單�(gè)中斷源�(jìn)行屏��
在一�(gè)8259A芯片有如下幾�(gè)�(nèi)部寄存器
Interrupt Mask Register (IMR)�
Interrupt Request Register (IRR��
In Service Register (ISR��
IMR被用作過(guò)濾被屏蔽的中�,IRR被用作暫�(shí)放置未被�(jìn)一步處理的Interrupt,當(dāng)一�(gè)Interrupt正在被CPU處理�(shí),此中斷被放置在ISR��
除了這幾�(gè)寄存器之��8259A還有一�(gè)單元叫做Priority Resolver,當(dāng)多�(gè)中斷同時(shí)�(fā)生時(shí),Priority Resolver根據(jù)它們的�(yōu)先級(jí),將高優(yōu)先級(jí)者優(yōu)先傳遞給CPU�
每一�(gè)8259A芯片都有兩�(gè)I/O ports,程序員可以通過(guò)它們對(duì)8259A�(jìn)行編��
Master 8259A的端口地址�0x20�0x21;Slave 8259A的端口地址�0xA0�0xA1�
8259As的口�
程序員可以向8259A�(xiě)兩種命令字:
Initialization Command Word (ICW�;這種命令字被用作�(duì)8259A芯片的初始化�
Operation Command Word (OCW):這種命令被用�(lái)�8259A�(fā)布命�,以�(duì)其�(jìn)行控�。OCW可以�8259A被初始化之后的任何時(shí)候被使用�
8259A主片
下表的內(nèi)容是Master 8259A的I/O端口地址,以及通過(guò)它們所能操作的寄存��
Address Read/Write Function
0x20 Write Initialization Command Word 1 (ICW1�
Write Operation Command Word 2 (OCW2�
Write Operation Command Word 3 (OCW3�
Read Interrupt Request Register (IRR)
Read In-Service Register (ISR)
0x21 Write Initialization Command Word 2 (ICW2�
Write Initialization Command Word 3 (ICW3�
Write Initialization Command Word 4 (ICW4�
Read/Write Interrupt Mask Register (IMR)
Addresses/Registers for Master 8259A
8259A從片
下內(nèi)容是Slave 8259A的I/O端口地址,以及通過(guò)它們所能操作的寄存��
Address Read/Write Function
0xA0 Write Initialization Command Word 1 (ICW1�
Write Operation Command Word 2 (OCW2�
Write Operation Command Word 3 (OCW3�
Read Interrupt Request Register (IRR)
Read In-Service Register (ISR)
0xA1 Write Initialization Command Word 2 (ICW2�
Write Initialization Command Word 3 (ICW3�
Write Initialization Command Word 4 (ICW4�
Read/Write Interrupt Mask Register (IMR)
Addresses/Registers for Slave 8259A
由于8259A芯片不僅能夠用于IBM PC/X86,也可以被用作MCS-80/85,對(duì)于這兩�,在操作模式上有一些不一樣,�(duì)于某些寄存器的設(shè)置也有所不同。我們后面僅僅討論X86模式相關(guān)的內(nèi)容�