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