1、中斷控制器8259A
在中斷控制過程中,中斷源的識(shí)別和優(yōu)先權(quán)的確定可以用硬件排隊(duì)電路等實(shí)現(xiàn), Intel 8259A可編程中斷控制器就是為完成這些任務(wù)而設(shè)計(jì)的一種器件 。(之前看中斷總會(huì)看到這個(gè)控制器,現(xiàn)在總算知道踏實(shí)干什么的了)
它不是I/O接口,而是一種中斷管理芯片,統(tǒng)稱PIC(Programmable Interrupt Controller)。
8259A可編程中斷控制器用來管理8級(jí)優(yōu)先中斷,并可將多個(gè)8259A級(jí)聯(lián)起來,構(gòu)成64級(jí)中斷優(yōu)先級(jí)管理系統(tǒng),而無需外加電路;
它具有多種工作方式,CPU可以通過編程設(shè)定或改變它的工作方式;
CPU響應(yīng)中斷時(shí),8259A能自動(dòng)提供中斷入口地址,而使CPU轉(zhuǎn)向相應(yīng)的中斷處理程序。
中斷入口地址可以由用戶設(shè)定,且入口地址可以選定在任何存儲(chǔ)單元。
8259A的主要功能為:
- ① 具有8級(jí)優(yōu)先權(quán)控制,通過芯片級(jí)聯(lián)可擴(kuò)展至64級(jí)優(yōu)先權(quán)控制。
- ② 每一級(jí)中斷均可通過編程屏蔽或允許。
- ③ 在中斷響應(yīng)周期可提供相應(yīng)的中斷類型號(hào)。
- ④ 有多種工作方式,可通過編程選擇。
- ⑤ 可與CPU直接連接,不需外加硬件電路。
1 8259A的內(nèi)部結(jié)構(gòu)
8259A采用NMOS工藝,只需要單一的+5V電源,它的內(nèi)部電路為靜態(tài)電路,因此不需要時(shí)鐘輸入,其內(nèi)部結(jié)構(gòu)如圖12所示。
8259A內(nèi)部結(jié)構(gòu)
1.?dāng)?shù)據(jù)總線緩沖器
數(shù)據(jù)總線緩沖器是三態(tài)、雙向、8位的緩沖器,D7~D0用于和CPU的數(shù)據(jù)總線連接, CPU通過數(shù)據(jù)總線緩沖器向8259A傳送命令碼,或從8259A讀取狀態(tài)字。
在中斷響應(yīng)時(shí), 8259A通過數(shù)據(jù)總線緩沖器向CPU提供CALL指令的操作碼和調(diào)用子程序入口地址的低8位和高8位,以及中斷類型碼。
2.中斷請(qǐng)求寄存器(IRR)
中斷請(qǐng)求寄存器用來寄存所有IR輸入線輸入的中斷請(qǐng)求信號(hào),即保存正在請(qǐng)求服務(wù)的中斷級(jí)。有一個(gè)請(qǐng)求輸入線就有一個(gè)觸發(fā)器來保存相應(yīng)的狀態(tài),共有IR0~I(xiàn)R7 8條輸入線,連接8個(gè)I/O設(shè)備的中斷請(qǐng)求信號(hào)。
當(dāng)IR0~I(xiàn)R7中的某一條請(qǐng)求線上升為高電平時(shí),IRR中的相應(yīng)位置“1”。
3.優(yōu)先權(quán)電路
優(yōu)先權(quán)電路的主要作用是確定中斷請(qǐng)求寄存器IRR中各位的優(yōu)先級(jí),并確定能否向CPU申請(qǐng)中斷。當(dāng)IRR中有中斷請(qǐng)求觸發(fā)器置位時(shí),優(yōu)先權(quán)電路就選出其中的未被屏蔽的最高優(yōu)先級(jí),并對(duì)該優(yōu)先級(jí)編碼;然后再按照一定的優(yōu)先級(jí)方式同中斷服務(wù)寄存器(ISR)中的最高優(yōu)先級(jí)相比較,以便確定最終有無向CPU申請(qǐng)中斷的資格。若可以申請(qǐng)中斷,則CPU響應(yīng)中斷請(qǐng)求;發(fā)來第一個(gè)INTA脈沖時(shí),將級(jí)別最高者放入中斷服務(wù)寄存器(ISR)中的相應(yīng)位置。
4.中斷服務(wù)寄存器(ISR)
中斷服務(wù)寄存器(ISR)的主要作用是保存當(dāng)前被CPU服務(wù)的中斷級(jí),也就是記錄正在被處理的中斷請(qǐng)求。當(dāng)某一級(jí)中斷被CPU響應(yīng),并執(zhí)行它的中斷服務(wù)程序時(shí),中斷服務(wù)寄存器ISR中的相應(yīng)位置“1”,并一直保持該狀態(tài)(非自動(dòng)結(jié)束中斷方式),直到CPU發(fā)出結(jié)束中斷命令EOI為止。
在中斷嵌套情況下,ISR中會(huì)有多個(gè)位被置“1”。在CPU響應(yīng)中斷,發(fā)出第一個(gè)INTA時(shí),最高優(yōu)先級(jí)的狀態(tài)在ISR中相應(yīng)位置“1”,同時(shí)該位的編碼寫入中斷向量寄存器的低3位(高5位由初始化編程時(shí)寫入),以備在第二個(gè)INTA到來時(shí)送出對(duì)應(yīng)的中斷類型號(hào)。
8259A內(nèi)部結(jié)構(gòu)
5.中斷屏蔽寄存器(IMR)
中斷屏蔽寄存器的主要作用是對(duì)各中斷源的中斷請(qǐng)求信號(hào)(IR0~I(xiàn)R7)實(shí)現(xiàn)開關(guān)控制。這個(gè)寄存器中保存對(duì)輸入請(qǐng)求線上的屏蔽信息,這些信息是由CPU送給8259A的操作命令OCW1來設(shè)定的。當(dāng)某位為“1”時(shí),表示禁止相應(yīng)的中斷請(qǐng)求進(jìn)入優(yōu)先權(quán)電路。
6.控制邏輯
控制邏輯內(nèi)部包括內(nèi)部控制電路、中斷控制電路、初始化命令寄存器組和操作命令寄存器組,它根據(jù)CPU對(duì)8259A編程設(shè)定的工作方式產(chǎn)生8259A內(nèi)部控制信號(hào),并根據(jù)中斷請(qǐng)求寄存器(IRR)和優(yōu)先權(quán)電路的判別結(jié)果,在適當(dāng)時(shí)候向CPU發(fā)生中斷請(qǐng)求信號(hào),并接收CPU發(fā)來的中斷響應(yīng)信號(hào)INTA,控制提供中斷類型號(hào)。
7.讀/寫邏輯
接收CPU來的控制信號(hào),包括端口控制信號(hào)A0和CS、數(shù)據(jù)方向控制信號(hào)RD和WR??刂茖PU送來的初始化命令ICW和操作命令OCW存入8259A內(nèi)部相應(yīng)的寄存器,用以規(guī)定8259A的工作方式。
8.級(jí)聯(lián)緩沖/比較器
一片8259A最多可構(gòu)成八級(jí)中斷(IR0~I(xiàn)R7),要想擴(kuò)展中斷源,必須多片連在一起,即采用級(jí)聯(lián)方式。級(jí)聯(lián)緩沖/比較器的功能有兩個(gè),一是提供級(jí)聯(lián)控制,二是提供緩沖控制。CAS2~CAS0用于提供級(jí)聯(lián)信號(hào),主片輸入,從片輸出。
對(duì)于8088 CPU而言,8259A的工作過程是:
- ① 某一條或某幾條中斷請(qǐng)求線(IR0~I(xiàn)R7)有中斷申請(qǐng),變?yōu)楦唠娖剑怪袛嗾?qǐng)求寄存器(IRR)的相應(yīng)位置“1”。
- ② IMR對(duì)IRR屏蔽。未被屏蔽的請(qǐng)求信號(hào)經(jīng)優(yōu)先權(quán)電路判別最高優(yōu)先級(jí),再經(jīng)由優(yōu)先級(jí)方式確定沒有更高級(jí)優(yōu)先權(quán)的中斷,則8259A的INT端輸出為“1”,向CPU提出中斷請(qǐng)求。
- ③ CPU響應(yīng)中斷后發(fā)出中斷響應(yīng)信號(hào)。在中斷響應(yīng)過程中,CPU要發(fā)出兩次INTA信號(hào)。當(dāng)8259A收到第一個(gè)INTA信號(hào)后,ISR中當(dāng)前被選中的最高優(yōu)先級(jí)對(duì)應(yīng)的那一位置“1”,同時(shí)IRR中的相應(yīng)位被清“0”,表示該位上的中斷請(qǐng)求已被CPU所接受。
- ④ 8259A收到第二個(gè)INTA信號(hào)后,驅(qū)動(dòng)數(shù)據(jù)總線將對(duì)應(yīng)的中斷類型碼輸出。
- ⑤ 如果是自動(dòng)結(jié)束中斷方式(AEOI),則在第二個(gè)INTA脈沖結(jié)束時(shí)將ISR中置“1”的位復(fù)位,否則該位的“1”將一直保持,直到CPU發(fā)出EOI命令為止。
2 8259A的引腳功能
8259A是一個(gè)28引腳的雙列直插式芯片,其引腳信號(hào)可參見圖7-12。
- ① D7~D0:雙向三態(tài)數(shù)據(jù)總線,8位,用于傳送控制和狀態(tài)信息、中斷向量、中斷類型碼等。
- ② IR7~I(xiàn)R0:中斷請(qǐng)求輸入信號(hào),8級(jí)中斷源。一般情況下,IR7的中斷優(yōu)先級(jí)別最低,而IR0的中斷優(yōu)先級(jí)別最高。能夠使IRR的相應(yīng)位置“1”的IRi的有效狀態(tài)有兩種,可用命令來設(shè)定。
- 其一是邊沿觸發(fā),即IR必須由低變高產(chǎn)生一個(gè)跳變才能使IRR相應(yīng)位的觸發(fā)器置“1”,提出中斷請(qǐng)求;
- 其二是電平觸發(fā),即只要IR是一個(gè)高電平即可。邊沿觸發(fā)具有鎖存中斷源中斷請(qǐng)求信號(hào)的能力,只要有一次跳變,IRR就能鎖存中斷請(qǐng)求狀態(tài),而與中斷源無關(guān)。而在電平觸發(fā)方式中,IRR不能鎖存中斷源的中斷請(qǐng)求狀態(tài),即在中斷響應(yīng)之前,中斷源必須有能力保持中斷請(qǐng)求信號(hào)為高電平,否則將視為自行撤銷中斷請(qǐng)求。
- ③ RD:讀信號(hào),輸入。當(dāng)RD=0時(shí),8259A將狀態(tài)信息送至數(shù)據(jù)總線供CPU使用。
- ④ WR:寫信號(hào),輸入。當(dāng)WR=0時(shí),8259A接收數(shù)據(jù)總線上CPU傳來的數(shù)據(jù)。
- ⑤ CS:片選信號(hào),輸入,低電平有效。當(dāng)CS=0時(shí)8259A被選中,允許CPU對(duì)8259A進(jìn)行讀/寫操作;CS=1時(shí)芯片未被選中。
- ⑥ A0:地址線,輸入。該信號(hào)與CS、RD、WR一起用來選擇8259A的內(nèi)部寄存器。該信號(hào)通常直接連到地址總線的A0,8259A用該信號(hào)控制接收CPU的命令字或向CPU發(fā)狀態(tài)信息。
- 8259A有4個(gè)初始化命令字和3個(gè)操作命令字,共需要7個(gè)寄存器,但卻只有一條地址線A0,只能有2個(gè)端口地址,即一個(gè)奇地址和-個(gè)偶地址,所以7個(gè)寄存器只好公用2個(gè)地址,并以讀/寫順序和命令字特征碼加以區(qū)別。
- ⑦ INT:中斷請(qǐng)求信號(hào),輸出。只要8259A的中斷邏輯判定中斷請(qǐng)求信號(hào)有效,就在這個(gè)引腳上產(chǎn)生一個(gè)高電平,可接到CPU的中斷輸入端。
- ⑧ INTA:中斷響應(yīng)信號(hào),輸入,是來自于CPU的響應(yīng)脈沖,8259A根據(jù)ISR中的置位情況提供相應(yīng)的中斷類型碼。8259A在第二個(gè)INTA時(shí)向CPU提供的中斷類型碼的高5位是用戶在程序中規(guī)定的,而低3位則是由8259A自動(dòng)產(chǎn)生的。
- ⑨ VCC,GND:電源(+5V)和地。
- ⑩ CAS0~CAS2:級(jí)聯(lián)信號(hào),雙向,形成8259A的專用總線,以便構(gòu)成多片8259A的級(jí)聯(lián)結(jié)構(gòu)。當(dāng)8259A是主片時(shí),CAS0~CAS2是輸出線,在CPU響應(yīng)中斷時(shí),輸出被選中的從片代碼。
- 當(dāng)8259A是從片時(shí),CAS0~CAS2是輸入線,在CPU響應(yīng)中斷時(shí),接收主片送出的被選中的從片代碼,然后在從片內(nèi)將接收來的代碼與本從片代碼相比較,看是否一致,從而確定CPU響應(yīng)的是不是本從片的中斷請(qǐng)求。
- [11] 非SP/非EN:從片編程/允許緩沖器信號(hào),雙向,低電平有效、雙重功能引腳。當(dāng)工作在緩沖器方式時(shí),它是輸出信號(hào),用做允許緩沖器接收和發(fā)送的控制信號(hào)(非EN),即啟動(dòng)8259A至CPU之間的數(shù)據(jù)總線緩沖器。如圖13所示,8259A通過總線緩沖器8286(或者用74245)與系統(tǒng)數(shù)據(jù)總線連接,控制8286的傳送方向。當(dāng)工作在非緩沖器方式時(shí),它是輸入信號(hào),用來指明系統(tǒng)中的8259A究竟是作為主片工作(非SP/非EN=1)的,還是作為從片工作(非SP/非EN=0)的,要由程序命令來設(shè)定。緩沖器方式適合于8259A的級(jí)聯(lián)。
3 8259A的工作方式
中斷控制器8259A有四種主要的工作方式:
- 全嵌套、
- 循環(huán)優(yōu)先級(jí)、
- 特定屏蔽
- 程序查詢方式;
還有四種從屬的工作方式:
- 中斷結(jié)束方式、
- 讀狀態(tài)、
- 中斷請(qǐng)求觸發(fā)方式
- 緩沖器方式。
另外,它還被分為兩大工作類型,即
- 單片工作
- 多片級(jí)聯(lián)工作。
1.全嵌套方式
這是一種最普通的工作方式。8259A在初始化工作完成后若未設(shè)定其他的工作方式,就自動(dòng)進(jìn)入全嵌套方式。這種方式的特點(diǎn)是:
- ① 中斷請(qǐng)求的優(yōu)先級(jí)固定,其順序是IR0最高,依次降低,IR7最低。
- ② 中斷服務(wù)寄存器(ISR)保存優(yōu)先權(quán)電路確定的優(yōu)先級(jí)狀態(tài),相應(yīng)位置“1”,并且一直保持這個(gè)服務(wù)“記錄”狀態(tài),直到CPU發(fā)出中斷結(jié)束命令為止。
- ③ 在ISR置位期間,不再響應(yīng)同級(jí)及較低級(jí)的中斷請(qǐng)求,而高級(jí)的中斷請(qǐng)求如果CPU開放中斷的話仍能夠得到中斷服務(wù)。
- ④ IR7~I(xiàn)R0的中斷請(qǐng)求輸入可分別由中斷屏蔽寄存器(IMR)的相應(yīng)位(D7~D0)屏蔽與允許,對(duì)某一位的屏蔽與允許操作不影響對(duì)其他位的中斷請(qǐng)求操作。
全嵌套工作方式由ICW4的D4=0來確定。
2.循環(huán)優(yōu)先級(jí)方式
循環(huán)優(yōu)先級(jí)方式是8259A 管理優(yōu)先級(jí)相同的設(shè)備時(shí)所采用的中斷管理方式 ,它包括自動(dòng)循環(huán)優(yōu)先級(jí)方式和特殊循環(huán)優(yōu)先級(jí)方式。
- (1)自動(dòng)循環(huán)各 設(shè)備優(yōu)先級(jí)相同,當(dāng)某一個(gè)設(shè)備受到服務(wù)之后,它的優(yōu)先級(jí)就自動(dòng)地排到最后。所謂各設(shè)備優(yōu)先級(jí)相同,是指它們的地位相同,受服務(wù)的機(jī)會(huì)均等,但是畢竟各中斷源的優(yōu)先級(jí)需要排出一個(gè)順序,否則同時(shí)有多個(gè)中斷源申請(qǐng)中斷時(shí)計(jì)算機(jī)無法處理,于是排出的優(yōu)先級(jí)由高到低的順序?yàn)椋?/li>
這是一個(gè)循環(huán)套,有一個(gè)最低優(yōu)先權(quán)指針,哪一臺(tái)設(shè)備剛被服務(wù)后,它就被賦予最低優(yōu)先權(quán)指針。例如,IR7剛被服務(wù),它就被賦予最低優(yōu)先權(quán)指針,按照循環(huán)順序,IR0的優(yōu)先級(jí)就是最高優(yōu)先級(jí);如果IR4剛被服務(wù),IR4就被賦予最低優(yōu)先權(quán)指針,按照優(yōu)先級(jí)循環(huán)順序,IR5的優(yōu)先級(jí)就最高。這樣,當(dāng)一臺(tái)設(shè)備提出中斷請(qǐng)求后,在最不利的情況下(此時(shí)它的優(yōu)先級(jí)最低),待其他7臺(tái)設(shè)備被輪流服務(wù)一次以后,它變?yōu)樽罡邇?yōu)先級(jí),從而得到系統(tǒng)的服務(wù)。但是如果不是在循環(huán)優(yōu)先級(jí)方式下(包括自動(dòng)循環(huán)和特殊循環(huán))工作,它可能永遠(yuǎn)得不到系統(tǒng)的服務(wù)。
自動(dòng)循環(huán)優(yōu)先級(jí)方式由OCW2的R=1、SL=0來確定。
- (2)特殊循環(huán)
特殊循環(huán)優(yōu)先級(jí)方式與自動(dòng)循環(huán)優(yōu)先級(jí)方式的不同之處在于:在自動(dòng)循環(huán)優(yōu)先級(jí)方式中,某一設(shè)備在被服務(wù)之后被確定為最低優(yōu)先級(jí);而在特殊循環(huán)優(yōu)先級(jí)方式中,通過編程來確定某一設(shè)備為最低優(yōu)先級(jí)。如IR5被指定為最低優(yōu)先級(jí),則IR6的優(yōu)先級(jí)最高。特殊循環(huán)優(yōu)先級(jí)方式由OCW2的R=1、SL=1來確定,L2L1L0用于指定最低優(yōu)先級(jí)的二進(jìn)制編碼。
一般來說,在命令控制字中,凡是采用“L2L1L0”的都有“特殊”的含義。
3.特定屏蔽方式
8259A的每個(gè)中斷請(qǐng)求輸入信號(hào)都可由中斷屏蔽寄存器(IMR)的相應(yīng)位進(jìn)行屏蔽, IMR的D0對(duì)應(yīng)IR0,D1對(duì)應(yīng)IR1…… D7對(duì)應(yīng)IR7。相應(yīng)位為“1”則屏蔽中斷輸入,相應(yīng)位為“0”則允許中斷輸入。IMR寄存器由操作命令OCW1進(jìn)行設(shè)置。對(duì)中斷請(qǐng)求輸入信號(hào)的屏蔽方式一般有兩種:正常屏蔽方式和特定屏蔽方式。
在正常屏蔽方式中,每一個(gè)屏蔽位對(duì)應(yīng)一個(gè)中斷請(qǐng)求輸入信號(hào),屏蔽某一個(gè)中斷請(qǐng)求輸入信號(hào)對(duì)其他請(qǐng)求信號(hào)沒有影響,未被屏蔽的中斷請(qǐng)求輸入信號(hào)仍然按照設(shè)定的優(yōu)先級(jí)順序進(jìn)行工作,而且保證當(dāng)某一級(jí)中斷請(qǐng)求被響應(yīng)服務(wù)時(shí),同級(jí)和低級(jí)的中斷請(qǐng)求將被禁止。如果CPU允許中斷,則高級(jí)的中斷請(qǐng)求還會(huì)被響應(yīng),實(shí)現(xiàn)中斷嵌套。
特定屏蔽方式也叫特殊的中斷屏蔽方式,當(dāng)設(shè)定了特定屏蔽方式后,IMR中為“1”的位仍要屏蔽相應(yīng)的中斷請(qǐng)求輸入信號(hào),但所有未被屏蔽的位被全部開放,無論優(yōu)先級(jí)別是低還是高,都可以申請(qǐng)中斷,并且都可能得到CPU的響應(yīng)并為之服務(wù)。也就是說,這種方式拋棄了同級(jí)或低級(jí)中斷被禁止的原則,任何級(jí)別的未被屏蔽的中斷請(qǐng)求都會(huì)得到響應(yīng),所以,可以有選擇地設(shè)定IMR的狀態(tài),開啟需要的中斷輸入。
特定屏蔽方式由OCW3的ESMM和SMM確定,設(shè)定時(shí)ESMM=1、SMM=1,復(fù)位時(shí)ESMM=1、SMM=0。
4.程序查詢方式
程序查詢方式不使用中斷,是用軟件尋找中斷源并為之服務(wù)的工作方式。在這種方式下,8259A不向CPU發(fā)送INT信號(hào)(實(shí)際上是8259A的INT信號(hào)不連到CPU的INTR信號(hào)上),或者CPU關(guān)閉自己的中斷允許觸發(fā)器,使IF=0,禁止中斷輸入。申請(qǐng)中斷的優(yōu)先級(jí)不是由8259A提供的中斷類型碼而是由CPU發(fā)出查詢命令得到的。
查詢時(shí),CPU先向8259A發(fā)出查詢命令,8259A接到查詢命令后,就把下一個(gè)IN指令(對(duì)偶地址端口的讀指令)產(chǎn)生的RD脈沖作為中斷響應(yīng)信號(hào),此時(shí),若有中斷請(qǐng)求信號(hào),則在ISR中相應(yīng)位置“1”,并把該優(yōu)先級(jí)送至數(shù)據(jù)總線。在RD期間8259A送至數(shù)據(jù)總線供CPU讀取查詢的代碼格式為:
其中,I是中斷請(qǐng)求標(biāo)志,I=1表示有中斷請(qǐng)求,此時(shí)W2W1W0有效,W2W1W0就表示申請(qǐng)服務(wù)的最高中斷優(yōu)先級(jí)。I=0表示沒有中斷請(qǐng)求,此時(shí)W2W1W0無效。例如讀入的查詢代碼是83H,則表示有中斷請(qǐng)求,申請(qǐng)中斷的優(yōu)先級(jí)輸入是IR3。
在查詢方式下,CPU不需執(zhí)行中斷響應(yīng)周期,不必安排中斷向量表,8259A能自動(dòng)提供最高優(yōu)先級(jí)中斷請(qǐng)求信號(hào)的二進(jìn)制代碼,供CPU查詢。該方式使用方便,可擴(kuò)充中斷優(yōu)先級(jí)數(shù)目,擴(kuò)充數(shù)目超過64級(jí)以上(此時(shí)不是中斷級(jí)聯(lián)方式,而是一般的端口連接。在查詢時(shí),只涉及8259A端口地址。顯然,在查詢方式下,能夠擴(kuò)展的8259A的數(shù)目?jī)H限于系統(tǒng)的I/O空間容量)。
查詢方式是由OCW3的P=1來確定的。
5.中斷結(jié)束方式
所謂中斷結(jié)束方式是指中斷如何結(jié)束的方法,這里的“結(jié)束”不是指中斷服務(wù)程序的結(jié)束。中斷服務(wù)程序的結(jié)束用IRET指令就可完成,這里的“結(jié)束”是指如何和何時(shí)使8259A中的ISR中的相應(yīng)位清0。ISR中某位為“1”,表示CPU正在為之服務(wù);某位為“0”表示CPU已經(jīng)停止(結(jié)束)為之服務(wù)。而IRET指令主要是恢復(fù)程序的斷點(diǎn),它并不能使ISR的相應(yīng)位清0。
8259A的中斷結(jié)束方式有兩種:命令中斷結(jié)束方式(EOI)和自動(dòng)中斷結(jié)束方式(AEOI)。
- (1)自動(dòng)結(jié)束
在自動(dòng)中斷結(jié)束(AEOI)方式下,8259A自動(dòng)地在最后一個(gè)INTA中斷響應(yīng)脈沖的后沿將中斷服務(wù)寄存器ISR中的相應(yīng)位清0。這種方式的過程是:中斷請(qǐng)求,CPU響應(yīng),發(fā)第一個(gè)INTA,ISR相應(yīng)位置“1”, CPU發(fā)第二個(gè)INTA,8259A提供中斷類型碼,ISR相應(yīng)位清0,結(jié)束。顯然,ISR的相應(yīng)置“1”位在CPU中斷響應(yīng)周期內(nèi)自生自滅,因此在ISR中不會(huì)有兩個(gè)或兩個(gè)以上的置“1”位。
自動(dòng)中斷結(jié)束方式(AEOI)的應(yīng)用場(chǎng)合一般是,8259A單片系統(tǒng),或不需要嵌套的多級(jí)中斷系統(tǒng)。AEOI方式只能用于主片8259A,不能用于從片8259A。
自動(dòng)中斷結(jié)束方式由ICW4的AEOI=1確定。
- (2)命令結(jié)束命令中斷結(jié)束方式(EOI)是在中斷服務(wù)程序返回之前,向8259A發(fā)中斷結(jié)束命令(EOI),使ISR中的相應(yīng)位清0。它包括兩種情況:
- ① 非特殊EOI命令:全嵌套方式下的中斷結(jié)束命令稱為非特殊EOI命令,該命令能自動(dòng)地把當(dāng)前ISR中的最高優(yōu)先級(jí)的那一位清0。非特殊EOI命令是由OCW2的R=0、SL=0、EOI=1確定的。
- ② 特殊EOI命令:非全嵌套方式下的中斷結(jié)束命令稱為特殊EOI命令。在非全嵌套方式下,由于無法確定最后響應(yīng)的是哪一級(jí)中斷(非全嵌套方式的各中斷源沒有固定的優(yōu)先級(jí)別,因此也就不知道誰(shuí)高誰(shuí)低),所以應(yīng)向8259A發(fā)出特殊EOI命令,即指定哪一級(jí)中斷返回,使其ISR中的相應(yīng)位清0。特殊EOI命令是由OCW2的R=0、SL=1、EOI=1確定的,由L2L1L0指定ISR中要復(fù)位的相應(yīng)位的二進(jìn)制編碼。
6.讀8259A狀態(tài)
讀8259A的狀態(tài)是指讀8259A內(nèi)部的IRR、ISR和IMR的內(nèi)容。
- ① 讀IRR:先發(fā)出OCW3命令(使RR=1, RIS=0,地址A0=0),在下一個(gè)RD脈沖到來時(shí)可讀出IRR,其中包含尚未被響應(yīng)的中斷源情況。
- ② 讀ISR:先發(fā)出OCW3命令(使RR=1, RIS=1,地址A0=0),在下一個(gè)RD脈沖到來時(shí)可讀出ISR,其中包含正在服務(wù)的中斷源情況,從中也可看出中斷嵌套情況。
- ③ 讀IMR:不必先發(fā)OCW3,只要讀出奇地址端口(A0=l),即可讀出IMR,其中包含設(shè)置的中斷屏蔽情況。
7.中斷請(qǐng)求觸發(fā)方式
8259A的中斷請(qǐng)求寄存器IRR中有8個(gè)中斷請(qǐng)求觸發(fā)器,分別對(duì)應(yīng)8個(gè)中斷請(qǐng)求信號(hào)的輸入端IR0~I(xiàn)R7。這些觸發(fā)器的觸發(fā)方式有兩種,即邊沿觸發(fā)和電平觸發(fā)。
- (1)邊沿觸發(fā) 當(dāng)輸入端有從低電平到高電平的正跳變時(shí),則產(chǎn)生中斷請(qǐng)求(IRR中相應(yīng)位的觸發(fā)器被觸發(fā)置“1”,而不是直接向CPU申請(qǐng)中斷)。此后,即使輸入端仍然保持高電平也不會(huì)再產(chǎn)生中斷。也就是說,只有正跳沿才能產(chǎn)生中斷。
邊沿觸發(fā)方式由ICW1的LTIM=0確定。
- (2)電平觸發(fā)
當(dāng)輸入端為高電平時(shí)產(chǎn)生中斷請(qǐng)求(只要為高電平就可以,不需要脈沖跳變)。但需要注意的是,在電平觸發(fā)方式下,在發(fā)出EOI命令以前,或CPU開放中斷以前,必須去掉中斷請(qǐng)求信號(hào)(使其變?yōu)榈碗娖剑?,否則將產(chǎn)生第二次中斷。
電平觸發(fā)方式由ICW1的LTIM=1確定。
8.緩沖器方式
所謂緩沖器方式就是在8259A和數(shù)據(jù)總線之間掛接總線驅(qū)動(dòng)器的方式。在緩沖器方式下,SP/EN引腳將使用EN功能,并使之輸出一個(gè)有效低電平,開啟緩沖器工作。該方式多用于級(jí)聯(lián)的大系統(tǒng)中。
緩沖器方式由ICW4的BUF=1確定。
9.特殊的全嵌套方式
該方式適用于多片級(jí)聯(lián),且必須將優(yōu)先級(jí)保存在各從片8259A中的大系統(tǒng)。 該方式與普通的全嵌套方式的工作情況基本相同,有兩點(diǎn)區(qū)別:
- ① 當(dāng)某從片的一個(gè)中斷請(qǐng)求被CPU響應(yīng)后,該從片的中斷仍未被禁止(即沒有被屏蔽),即該從片中的高級(jí)中斷仍可提出申請(qǐng)。(全嵌套方式中這樣的中斷是被屏蔽的,因?yàn)檫@種中斷對(duì)從片而言后者是高級(jí)中斷,可以嵌套,但對(duì)主片而言,由于它們來自于同一個(gè)從片,故中斷優(yōu)先級(jí)相同,而在全嵌套方式中,同級(jí)和低級(jí)中斷是被禁止的。)
- ②在某個(gè)中斷源退出中斷服務(wù)程序之前,CPU要用軟件檢查它是否是這個(gè)從片中的唯一中斷。檢查的辦法是:送一個(gè)非特殊的中斷結(jié)束命令(EOI)給這個(gè)從片,然后讀它的ISR,檢查是否為0,若為0則唯一,即只有這一個(gè)中斷在被服務(wù),沒有嵌套;若不為0則不唯一,說明還有其他的中斷在被服務(wù),該中斷是嵌套在其他中斷里的。只有唯一時(shí),才能把另一個(gè)非特殊EOI命令送至主片,結(jié)束此從片的中斷。否則,如果過早地結(jié)束主片的工作記載而從片尚有未處理完的嵌套中斷的話,整個(gè)系統(tǒng)的中斷嵌套環(huán)境就會(huì)混亂。特殊的全嵌套方式由ICW4的SFNM=1確定。
10.多片級(jí)聯(lián)方式
在級(jí)聯(lián)系統(tǒng)中,每個(gè)從片的中斷請(qǐng)求輸出線INT直接連到主片的某個(gè)中斷請(qǐng)求輸入線上,主片的CAS0~CAS2是輸出線,輸出被響應(yīng)的從片代碼,從片的CAS0~CAS2是輸入線,接收主片發(fā)出的從片代碼,以便與自身代碼相比較。級(jí)聯(lián)方式的要點(diǎn)如下:
- ① 一個(gè)8259A主片至多帶8個(gè)從片,可擴(kuò)展至64級(jí)。
- ② 緩沖方式下,主片和從片的設(shè)定由ICW4的M/S位確定,M/S=1是主片,M/S=0是從片。M/S的狀態(tài)在BUF=l時(shí)有意義。
- ③ 在非緩沖方式下,主片和從片由SP/EN引腳的SP功能確定,SP=1是主片,SP=0是從片。
- ④在級(jí)聯(lián)系統(tǒng)中,主片的三條級(jí)聯(lián)線相當(dāng)于從片的片選信號(hào),從片的INT是主片的中斷請(qǐng)求輸入信號(hào)。
- ⑤ 主片和從片需要分別進(jìn)行初始化操作,可設(shè)定為不同的工作方式。
級(jí)聯(lián)方式由ICW1的SNGL=0確定。
上述的各種工作方式中,全嵌套方式、自動(dòng)中斷結(jié)束方式、中斷請(qǐng)求觸發(fā)方式、緩沖器方式、特殊的全嵌套方式、級(jí)聯(lián)方式 等是由初始化命令字ICW來設(shè)定的 ,
而循環(huán)優(yōu)先級(jí)方式、特定屏蔽方式、查詢方式、命令中斷結(jié)束方式、讀8259A狀態(tài)等是由 操作命令字OCW來設(shè)定的 。
4 8259A的編程
8259A是一個(gè)可編程器件。為了使8259A實(shí)現(xiàn)預(yù)定的中斷管理功能,并按預(yù)定的方式工作,就必須對(duì)它進(jìn)行初始化編程。所謂初始化編程是指系統(tǒng)在上電或復(fù)位后對(duì)可編程器件進(jìn)行控制字設(shè)定的一段程序。8259A的命令控制字包括兩個(gè)部分,即初始化命令字和操作命令字。
初始化命令字一般在系統(tǒng)復(fù)位后的初始化編程中設(shè)置,用于確定8259A的基本工作方式,設(shè)置以后一般保持不變。操作命令是在初始化以后的正常工作中寫入的,它實(shí)現(xiàn)對(duì)8259A的狀態(tài)、中斷方式和過程的動(dòng)態(tài)控制,在工作中可隨時(shí)寫入操作命令字以修改某些控制方式。
8259A內(nèi)部有7個(gè)寄存器,分為兩組:初始化命令寄存器組和操作命令寄存器組。初始化命令寄存器組包括4個(gè)寄存器:ICW1~I(xiàn)CW4對(duì)應(yīng)的寄存器。操作命令寄存器組包括3個(gè)寄存器:OCW1~OCW3對(duì)應(yīng)的寄存器。
由于8259A只有一條地址線A0,所以它只能有兩個(gè)端口地址;而8259A有7個(gè)命令字,每個(gè)命令字要寫入相應(yīng)的寄存器。為此,采取以下幾點(diǎn)措施:第一,以端口地址區(qū)分;第二,把命令字中的某些位作為特征碼來區(qū)分;第三,以命令字的寫入順序來區(qū)分。
在PC/XT中,8259A的兩個(gè)端口地址分別為20H和21H。下面具體討論8259A的命令字。
1.初始化命令字
初始化命令字有4個(gè):ICW1~I(xiàn)CW4。8259A在進(jìn)入正常工作之前,必須將系統(tǒng)中的每一個(gè)8259A進(jìn)行初始化設(shè)置,以此建立8259A的基本工作條件。
寫入的初始化命令字一般為2~4個(gè)(在某些條件下,4個(gè)初始化命令字并非必須全部寫入),最多為4個(gè),然而,ICW1使用偶地址,而ICW2、ICW3、ICW4 都使用奇地址。為了相互區(qū)別,初始化命令字的寫入必須有一個(gè)固定的順序,其順序如圖14所示。
8259A的ICW寫入順序
系統(tǒng)上電或復(fù)位以后,對(duì)8259A第一件要做的工作就是按圖7-14的順序?qū)懭氤跏蓟钭帧?/p>
初始化命令字格式如圖7-15所示。初始化命令字ICW1的主要功能是:確定級(jí)聯(lián)方式,觸發(fā)方式。寫入ICW1后,8259A內(nèi)部自動(dòng)復(fù)位,其復(fù)位功能為:
- ① 初始化命令字順序邏輯重新置位,準(zhǔn)備接收ICW2~I(xiàn)CW4。
- ② 清除IMR和ISR。
- ③ IRR狀態(tài)可讀。
- ④ 優(yōu)先級(jí)排隊(duì),IR0最高,IR7最低。
- ⑤ 特殊屏蔽方式復(fù)位。
- ⑥ 設(shè)定中斷請(qǐng)求信號(hào)由低變高的邊沿觸發(fā)有效。
- ⑦ 自動(dòng)EOI循環(huán)方式復(fù)位。
初始化命令字ICW2的主要功能是:
- 確定中斷向量,
- 中斷類型碼。
初始化命令字ICW3的主要功能是:確定主片/從片的級(jí)聯(lián)狀態(tài),即確定主片的連接位和從片的編碼。
初始化命令字ICW4的主要功能是:選擇CPU系統(tǒng),確定中斷結(jié)束方式,規(guī)定是主片還是從片,選擇是否采用緩沖方式。
初始化命令字一定要在系統(tǒng)復(fù)位后首先寫入8259A,寫入時(shí)要嚴(yán)格按照?qǐng)D15的順序,不允許顛倒。
寫完初始化命令字后,8259A已經(jīng)建立了基本的工作環(huán)境,可以接受中斷請(qǐng)求,也可以寫入操作命令字OCW來改變某些中斷管理方式。
操作命令字可以隨時(shí)寫入、修改,但初始化命令字一經(jīng)寫入一般不再改動(dòng)。
如果在寫入初始化命令字后不寫入操作命令字,則8259A便處于全嵌套工作方式,即中斷優(yōu)先級(jí)為IR0最高,IR7最低,禁止同級(jí)及低級(jí)中斷,高級(jí)中斷可嵌套處理。
2.操作命令字
在初始化命令字寫入8259A之后,8259A就準(zhǔn)備接收中斷請(qǐng)求輸入信號(hào)了。
在8259A工作期間,CPU可以隨時(shí)通過操作命令字使8259A完成各種不同的工作方式。8259A有三種操作命令字:OCW1、OCW
-
緩沖器
+關(guān)注
關(guān)注
6文章
1911瀏覽量
45424 -
比較器
+關(guān)注
關(guān)注
14文章
1628瀏覽量
107046 -
8259A
+關(guān)注
關(guān)注
0文章
6瀏覽量
8269 -
中斷控制器
+關(guān)注
關(guān)注
0文章
59瀏覽量
9431 -
NMOS管
+關(guān)注
關(guān)注
2文章
120瀏覽量
5387
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論