微機(jī)原理課件-第七章-微型計(jì)算機(jī)中斷系統(tǒng)_第1頁
微機(jī)原理課件-第七章-微型計(jì)算機(jī)中斷系統(tǒng)_第2頁
微機(jī)原理課件-第七章-微型計(jì)算機(jī)中斷系統(tǒng)_第3頁
微機(jī)原理課件-第七章-微型計(jì)算機(jī)中斷系統(tǒng)_第4頁
微機(jī)原理課件-第七章-微型計(jì)算機(jī)中斷系統(tǒng)_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第八章輸入/輸出系統(tǒng)7-1概述一、中斷概念 當(dāng)CPU正常運(yùn)行程序時(shí),由于微處理器內(nèi)部事件或外設(shè)請求,引起CPU中斷正在運(yùn)行的程序,轉(zhuǎn)去執(zhí)行請求中斷的外設(shè)(或內(nèi)部事件)的中斷服務(wù)子程序,中斷服務(wù)程序執(zhí)行完畢后,再返回被中止的程序,這一過程稱為中斷。1.中斷源 引起程序中斷的事件稱為中斷源。中斷源有外部中斷和內(nèi)部中斷,內(nèi)部中斷由程序預(yù)先安排的中斷指令(INTn)引起,或由于CPU運(yùn)算中產(chǎn)生的某些錯(cuò)誤(如除法出錯(cuò)、運(yùn)算溢出)引起。外部中斷是外部設(shè)備或協(xié)處理器向CPU發(fā)出中斷申請引起的。2.中斷響應(yīng) 中斷請求何時(shí)發(fā)生是隨機(jī)的。CPU在每條指令的最后一個(gè)T周期去檢測INTR引腳,CPU一旦檢測到有中斷請求,在滿足中斷響應(yīng)的條件下(IF=1),CPU響應(yīng)中斷,會(huì)向外設(shè)發(fā)出中斷響應(yīng)信號。并保護(hù)斷點(diǎn)(當(dāng)前CS、IP和PSW值入棧),然后轉(zhuǎn)向中斷服務(wù)程序。中斷服務(wù)程序執(zhí)行完畢,CPU返回原執(zhí)行程序的中斷處,繼續(xù)向下執(zhí)行,稱為中斷返回。3.中斷向量表

CPU響應(yīng)中斷后,必須由中斷源提供地址信息,引導(dǎo)程序進(jìn)入中斷服務(wù)子程序,這些中斷服務(wù)子程序的入口地址存放在中斷向量表中。內(nèi)存中專門開辟了一個(gè)區(qū)域,存放中斷向量表(也稱中斷矢量表)。4.中斷優(yōu)先級 當(dāng)有多個(gè)中斷源請求中斷時(shí),中斷系統(tǒng)判別中斷申請的優(yōu)先級,CPU響應(yīng)優(yōu)先級高的中斷,掛起優(yōu)先級低的中斷。當(dāng)CPU在運(yùn)行中中斷服務(wù)子程序時(shí),又有新的更高優(yōu)先級的中斷申請進(jìn)入,CPU要掛起原中斷進(jìn)入更高級的中斷服務(wù)子程序,實(shí)現(xiàn)中斷嵌套功能。5.中斷屏蔽 當(dāng)中斷源申請中斷時(shí),CPU可以由軟件設(shè)置,使之不能響應(yīng),稱為中斷屏蔽。 本章討論與8086/8088CPU相配合的中斷系統(tǒng)及中斷接口芯片8259A。二、中斷分類

8086/8088有一個(gè)強(qiáng)有力的中斷系統(tǒng),可以處理256種不同的中斷。8086/8088系統(tǒng)上的中斷源如圖7-1所示。以產(chǎn)生中斷的方法來分類,256種中斷可以分為兩大類:外部中斷和內(nèi)部中斷。

圖7-18086/8088中斷源

外部中斷也稱為硬件中斷,是由外部的硬件產(chǎn)生的,硬件中斷又分成不可屏蔽中斷和可屏蔽中斷。下面分別加以說明。1.外部中斷

8086/8088CPU有兩個(gè)外部中斷請求線:不可屏蔽中斷請求線NMI和可屏蔽中斷請求線INTR。(1) 由NMI引腳引入的不可屏蔽中斷請求,采用邊沿觸發(fā),上升沿之后維持兩個(gè)時(shí)鐘周期高電平有效。對于不可屏蔽中斷用戶是不能用軟件來屏蔽的,一旦有不可屏蔽中斷請求,CPU必須予以響應(yīng)。不可屏蔽中斷請求的中斷類型號為2,即中斷處理程序的入口地址在0段的0008H~000BH的4個(gè)單元中。(2) 由INTR引腳引入的外設(shè)提出的可屏蔽中斷請求,采用電平觸發(fā),高電平有效,INTR信號的高電平必須維持到CPU響應(yīng)中斷才結(jié)束??善帘沃袛嗍怯脩艨梢酝ㄟ^軟件設(shè)置來屏蔽的外部中斷,即使外部設(shè)備有中斷請求,CPU可以不予響應(yīng)。由外設(shè)引起的可屏蔽中斷請求要得到響應(yīng)應(yīng)有兩個(gè)條件:①外設(shè)中斷請求是否被屏蔽;②CPU是否允許響應(yīng)中斷。

在8086CPU系統(tǒng)中,外設(shè)的中斷請求信號接入可編程中斷控制器8259A的IRi端,而8259A的中斷輸出INT連到CPU的INTR引腳上。8259A中設(shè)有中斷屏蔽寄存器,它的8位對應(yīng)控制8個(gè)外設(shè),通過設(shè)置這個(gè)寄存器的某位為0或1,可以允許或禁止某個(gè)外設(shè)的中斷請求。一塊8259A可管理8個(gè)中斷,當(dāng)外設(shè)超過8個(gè)時(shí),可以使用多個(gè)8259A進(jìn)行級聯(lián),擴(kuò)大到64級中斷。外設(shè)與8259A的連接是由用戶來設(shè)計(jì)的,硬件連線決定了中斷類型號和中斷優(yōu)先級次序。

CPU是否允許響應(yīng)中斷,與中斷允許位IF有關(guān)。IF=1CPU允許響應(yīng)中斷;IF=0,CPU禁止響應(yīng)中斷。2.內(nèi)部中斷

內(nèi)部中斷又稱為軟件中斷。軟件中斷通常有三種情況引起:①由中斷指令I(lǐng)NT引起的中斷;②由CPU的某些運(yùn)算錯(cuò)誤引起的中斷;③由調(diào)試程序debug設(shè)置的中斷。※內(nèi)部中斷只要由上面三種情況引起了,是不可屏蔽的!(1)由中斷指令I(lǐng)NT引起的中斷

CPU執(zhí)行一條INTn指令后立即產(chǎn)生中斷,并且調(diào)用系統(tǒng)中相應(yīng)的中斷處理程序去完成中斷功能,指令中的n指出了中斷類型號。例7-1測試存儲(chǔ)器容量

INT12H CPU執(zhí)行這條指令時(shí),立即產(chǎn)生一個(gè)中斷。并從中斷向量表的0:12H×4開始的單元中取出4個(gè)字節(jié),其內(nèi)容為中斷服務(wù)子程序的段地址和偏移地址,然后轉(zhuǎn)去此入口去執(zhí)行中斷服務(wù)子程序,完成對存儲(chǔ)器的測試。(2)由CPU的某些運(yùn)算錯(cuò)誤引起的中斷

CPU在運(yùn)行程序時(shí),會(huì)發(fā)現(xiàn)一些運(yùn)算中出現(xiàn)的錯(cuò)誤,此時(shí)CPU就會(huì)中斷,讓用戶去處理這些錯(cuò)誤。主要有:①除法錯(cuò)中斷:除法錯(cuò)中斷類型號為0,在除法運(yùn)算中,若除數(shù)為0或商超過了寄存器所能表達(dá)的范圍,就產(chǎn)生一個(gè)類型號為0的中斷,轉(zhuǎn)去類型號為0的中斷處理。②溢出中斷:溢出中斷類型號為4,專用指令為INTO。若OF=1執(zhí)行中斷指令I(lǐng)NTO;若OF=0,不執(zhí)行中斷指令。通常INTO放在加、減法運(yùn)算指令的后面。例7-2測試加法的溢出

ADDAX,BX INTO(3)由調(diào)試程序debug設(shè)置的中斷 在調(diào)試程序時(shí),為了檢查中間結(jié)果或?qū)ふ页绦蛑械腻e(cuò)誤,在程序中可設(shè)置斷點(diǎn)或進(jìn)行單步跟蹤,調(diào)試程序debug有此功能它也是由中斷來實(shí)現(xiàn)的。①單步中斷:單步是每次只執(zhí)行一條指令,然后屏幕顯示當(dāng)前各寄存器和有關(guān)存儲(chǔ)單元的內(nèi)容,以及下條要執(zhí)行的指令。這樣逐條運(yùn)行指令,來跟蹤程序的流程,以檢查出程序中的錯(cuò)誤。

單步中斷是在標(biāo)志位TF=1時(shí),每條指令執(zhí)行后,CPU自動(dòng)產(chǎn)生中斷類型號為1的中斷。②斷點(diǎn)中斷:中斷類型號為3。用debug調(diào)試程序時(shí),可用G命令設(shè)置斷點(diǎn)。當(dāng)CPU執(zhí)行到斷點(diǎn)時(shí)便產(chǎn)生中斷,同時(shí)顯示當(dāng)前各寄存器和有關(guān)存儲(chǔ)單元的內(nèi)容,以及下條要執(zhí)行的指令,供用戶檢查。設(shè)置斷點(diǎn)實(shí)際上是把一條斷點(diǎn)指令I(lǐng)NT3插入到斷點(diǎn)設(shè)置處。7-2中斷處理過程 可屏蔽中斷處理的過程一般分成幾步:中斷請求;中斷響應(yīng);保護(hù)現(xiàn)場;轉(zhuǎn)入中斷服務(wù)子程序;恢復(fù)現(xiàn)場和中斷返回。其流程如圖7-2所示。圖7-2可屏蔽中斷處理流程圖一、CPU響應(yīng)中斷過程

CPU響應(yīng)中斷要有三個(gè)條件:●外設(shè)提出中斷申請●本中斷位未被屏蔽●中斷允許 當(dāng)中斷接口電路中的中斷屏蔽觸發(fā)器未被屏蔽時(shí),外設(shè)可通過中斷接口發(fā)出中斷申請。外設(shè)向CPU發(fā)出中斷請求的時(shí)間是隨機(jī)的,而CPU在每條指令的最后一個(gè)機(jī)器周期的最后一個(gè)T狀態(tài)去采樣中斷請求輸入線INTR,當(dāng)CPU在INTR引腳上接收到一個(gè)有效的中斷請求信號,而CPU內(nèi)部的中斷允許觸發(fā)器是開放的,則在當(dāng)前指令執(zhí)行完后CPU響應(yīng)中斷。

CPU響應(yīng)中斷后,對外設(shè)接口發(fā)出兩個(gè)中斷響應(yīng)信號,第一個(gè)信號通知外設(shè),CPU已響應(yīng)申請的中斷請求,準(zhǔn)備發(fā)送中斷類型號;當(dāng)外設(shè)收到第二個(gè)以后,立即往數(shù)據(jù)線上給CPU送中斷類型號。CPU在響應(yīng)外部中斷,并轉(zhuǎn)入相應(yīng)中斷服務(wù)子程序的過程中,自動(dòng)依次做以下工作:(1)從數(shù)據(jù)總線上讀取中斷類型號,將其存入內(nèi)部暫存器。(2)將標(biāo)志寄存器PSW的值入棧。(3)將PSW中的中斷允許標(biāo)志IF和單步標(biāo)志TF清0,以屏蔽外部其它中斷請求,和避免CPU以單步方式執(zhí)行中斷處理子程序。(4)保護(hù)斷點(diǎn),將當(dāng)前指令下面一條指令的段地址CS和指令指針I(yè)P的值入棧,使中斷處理完畢后,能正確返回到主程序繼續(xù)執(zhí)行。(5)根據(jù)中斷類型號到中斷向量表中找到中斷向量,轉(zhuǎn)入相應(yīng)中斷服務(wù)子程序。(6)中斷處理程序結(jié)束后,從堆棧中依次彈出IP、CS和PSW,然后返回主程序斷點(diǎn)處,繼續(xù)執(zhí)行原來的程序。 對于不可屏蔽中斷請求,不必判斷IF是否為1,也不是由外設(shè)接口給出中斷類型號,從NMI引腳進(jìn)入的中斷請求規(guī)定其中斷類型號為2。在運(yùn)行中斷子程序過程中,若NMI引腳上有不可屏蔽中斷請求信號,CPU仍能響應(yīng)。 軟件中斷由程序設(shè)定,沒有隨機(jī)性,它不受中斷允許標(biāo)志位IF的影響,中斷類型號由指令I(lǐng)NTn中的n決定。正在執(zhí)行軟件中斷時(shí),如果有不可屏蔽中斷請求,就會(huì)在當(dāng)前指令執(zhí)行完后立即予以響應(yīng)。如果有可屏蔽中斷請求,并且IF=1,也會(huì)在當(dāng)前指令執(zhí)行完后予以響應(yīng)。二、中斷向量表 尋找中斷源可以用查詢中斷及矢量中斷兩種方法。

查詢中斷是采用軟件查詢方法,中斷響應(yīng)后啟動(dòng)中斷查詢程序,依次查詢哪個(gè)設(shè)備的中斷請求觸發(fā)器為1,檢測到后,轉(zhuǎn)向此設(shè)備預(yù)先設(shè)置的中斷服務(wù)程序入口地址。此方法較簡單,但花費(fèi)時(shí)間多,并且后面的設(shè)備服務(wù)機(jī)會(huì)少,在8086系統(tǒng)中一般采用矢量中斷方法。

矢量中斷是將每個(gè)設(shè)備的中斷服務(wù)程序的入口地址(矢量地址)集中,依次放在中斷向量表中。當(dāng)CPU響應(yīng)中斷后,控制邏輯根據(jù)外設(shè)提供的中斷類型號查找中斷向量表,然后將中斷服務(wù)程序的入口地址送到CS段寄存器和指令指針I(yè)P,CPU轉(zhuǎn)入中斷服務(wù)子程序。這樣大大加快了中斷處理的速度。1.中斷向量表 中斷向量表又稱中斷服務(wù)程序入口地址表。8086/8088系統(tǒng)允許處理256種類型的中斷,對應(yīng)的中斷類型號為0~FFH在存儲(chǔ)器的00000H~003FFH,占用1K字節(jié)空間,用作存放中斷向量。每個(gè)類型號占4個(gè)字節(jié),高2個(gè)字節(jié)存放中斷入口地址的段地址,低2個(gè)字節(jié)存放段內(nèi)偏移地址,如圖7-4所示。

圖7-48086/8088中斷向量表 各個(gè)中斷處理程序的段地址和偏移地址按中斷類型號順序存放在中斷向量表中。因此由中斷類型號n×4即可得到相應(yīng)中斷向量的地址,取4n和4n+1單元中的內(nèi)容(中斷入口程序偏移地址)裝入指令指針I(yè)P,取4n+2和4n+3單元中的內(nèi)容(中斷入口程序段地址)裝入代碼段寄存器CS,即可轉(zhuǎn)入中斷處理服務(wù)子程序。例7-3某中斷的中斷類型號為68H,圖7-5圖示了中斷操作過程:(1)取中斷類型號68H;(2)計(jì)算中斷向量地址68H×4=1A0H;(3)取中斷入口地址的偏移地址送入IP,IP=2050H,段地址;送入CS,CS=A000H;(4)轉(zhuǎn)向中斷服務(wù)程序;(5)中斷返回到INT68H指令的下一條指令。圖7-5中斷操作過程例子2.中斷向量(中斷入口地址)的設(shè)置

IBMPC對256種中斷類型已進(jìn)行了地址分配,附錄D中給出了中斷向量地址分配表。其中類型0~4為專用中斷,中斷入口地址已由系統(tǒng)定義,用戶不能修改;類型5~類型31為系統(tǒng)使用中斷,也不允許用戶修改;其余的中斷類型號原則上可以由用戶定義,但實(shí)際上,有些中斷類型目前已有用途,例INT21H為系統(tǒng)功能調(diào)用,中斷類型20H~3FH為DOS中斷調(diào)用。供用戶使用的中斷類型號,它可以由用戶定義為軟中斷,由INTn指令引用;也可以通過INTR端直接接入,或通過中斷控制器8259A引入可屏蔽硬件中斷。使用時(shí)用戶要自己將中斷服務(wù)程序入口地址置入相應(yīng)的中斷向量表中。有兩種方法可為中斷類型號n設(shè)置中斷向量,即將中斷服務(wù)程序的入口地址置入中斷類型號n所對應(yīng)的中斷向量表中。一種方法用指令來設(shè)置,另一種方法利用DOS功能調(diào)用來設(shè)置。例7-5用指令來設(shè)置中斷服務(wù)程序的入口地址到中斷類型號n所對應(yīng)的中斷向量表中。

MOV AX,0 MOV ES,AX MOV BX,N*4 MOV AX,OFFSETINTRAD;置入偏移地址

MOV ES:WORDPTR[BX],AX MOV AX,SEGINTRAD ;置入段地址

MOV ES:WORDPTR[BX+2],AX STI ┋INTRAD:;類型號n的中斷服務(wù)子程序 ┋

IRET

實(shí)際上,在設(shè)置或檢查任何中斷向量時(shí),總是避免直接使用中斷向量的絕對地址,而是利用DOS功能調(diào)用INT21H設(shè)置中斷向量和取出中斷向量。此外要注意,在設(shè)置自己的中斷向量時(shí),應(yīng)先保存原中斷向量,在設(shè)置新的中斷向量,在程序結(jié)束前恢復(fù)原中斷向量。設(shè)置中斷向量:把由AL中指定中斷類型號的中斷向量DS:DX放置在中斷向量表中。則操作如下:

預(yù)置:AL=中斷類型號

DS:DX=中斷服務(wù)程序入口地址

AH=25H

執(zhí)行:INT21H取中斷向量:把由AL中指定中斷類型號的中斷向量,從中斷向量表中取到ES:BX中。則操作如下:

預(yù)置:AL=中斷類型號

AH=35H

執(zhí)行:INT21H

返回:ES:BX=中斷服務(wù)程序入口地址例7-6利用DOS功能調(diào)用設(shè)置中斷向量和取中斷向量。

MOV AL,N;取中斷向量到ES:BX中

MOV AH,35H INT 21H

PUSH ES ;存原中斷向量

PUSH BX PUSH DS

MOV AX,SEGINTRAD;設(shè)置新的中斷向量

MOV DS,AX MOV DX,OFFSETINTRAD MOV AL,N MOV AH,25H INT 21H POP DS ┋

POP DX ;恢復(fù)原中斷向量

POP DS MOV AL,N MOV AH,25H INT 21H

RETINTRAD: ;類型號n的中斷服務(wù)子程序 ┋

IRET

3.中斷類型號的獲?。?) 對于除法出錯(cuò)、單步中斷、不可屏蔽中斷NMI、斷點(diǎn)中斷和溢出中斷,CPU分別自動(dòng)提供中斷類型號0~4。(2)對于用戶自己確定的軟件中斷INTn,中斷類型號就是n。(3)對外部可屏蔽中斷INTR,可用硬件電路(例如通用并行接口芯片8212)設(shè)計(jì)產(chǎn)生中斷類型號。(4)對外部可屏蔽中斷INTR,可以用可編程中斷控制器8259A獲得中斷類型號。 如圖7-1所示,8個(gè)中斷請求信號接到8259A。當(dāng)外設(shè)申請中斷時(shí),8259A響應(yīng)優(yōu)先級高的中斷源,將中斷請求信號送到CPU的INTR端。8259A收到CPU發(fā)出的第二個(gè)中斷響應(yīng)信號時(shí),將對應(yīng)中斷源的中斷類型號送給CPU,CPU獲取中斷類型號后,自動(dòng)轉(zhuǎn)入相應(yīng)的中斷服務(wù)子程序。

IBMPC機(jī)內(nèi)裝有一片8259A,它的中斷入口分配如表7-1所示:表7-18259A的中斷源分配

8259A中有中斷屏蔽寄存器,它的端口地址為21H,中斷屏蔽寄存器的位7~0對應(yīng)IR7~I(xiàn)R0。可以通過設(shè)置屏蔽寄存器的各位為0或1去控制每一個(gè)中斷源的中斷允許或屏蔽,此位為0,允許中斷;此位為1,禁止中斷。例7-7若某系統(tǒng)中允許定時(shí)和鍵盤中斷,則中斷屏蔽控制字為:

MOV AL,11111100B OUT 21H,AL

在中斷服務(wù)程序的結(jié)束處,應(yīng)發(fā)出中斷結(jié)束命令(EOI)給中斷命令寄存器,中斷命令寄存器的端口地址為20H。例7-8IBMPC機(jī)中斷結(jié)束命令的程序?yàn)椋?/p>

MOV AL,20H OUT 20H,AL

綜合上面的介紹,我們對中斷有了一定的了解,下面將有關(guān)中斷的主程序編寫方法歸納如下:1.主程序中的初始化(1)設(shè)置中斷向量。(2)設(shè)置8259A的中斷屏蔽寄存器的中斷屏蔽位。(3)設(shè)置CPU中斷允許位標(biāo)志IF(開中斷STI)。2.硬件(外設(shè)接口)和CPU自動(dòng)完成(1)外設(shè)接口向CPUINTR端發(fā)中斷請求。(2)當(dāng)前指令執(zhí)行完后,CPU發(fā)兩個(gè)中斷響應(yīng)信號給外設(shè)接口。(3)CPU讀取中斷類型號n。(4)CPU自動(dòng)將當(dāng)前PSW、CS、IP內(nèi)容入棧保護(hù)。(5)清除IF、TF,禁止外部中斷和單步中斷。(6)從中斷向量表中?。?n)地址中內(nèi)容→IP;?。?n+2)地址中內(nèi)容→CS。(7)轉(zhuǎn)向中斷服務(wù)子程序。

這里一定要注意三點(diǎn):①對重復(fù)前綴的指令(如REPMOVSB)作為一條指令處理。執(zhí)行一次重復(fù)前綴和串指令即可響應(yīng)中斷,而不是把串操作全部執(zhí)行完。②遇到開中斷指令STI和中斷返回指令I(lǐng)RET,要在這兩條指令執(zhí)行完后,再執(zhí)行一條指令才能響應(yīng)中斷。③CPU自動(dòng)清除IF和TF位,使CPU進(jìn)入中斷服務(wù)子程序后,不允許再產(chǎn)生新的中斷,如果在中斷服務(wù)子程序中還允許外部中斷進(jìn)入,則在中斷服務(wù)子程序中必須再開中斷。三、中斷服務(wù)子程序 中斷服務(wù)子程序的功能各有不同,但所有的中斷服務(wù)子程序都有相同的結(jié)構(gòu)形式。(1)程序開始必須保護(hù)中斷時(shí)的現(xiàn)場,可以通過一系列PUSH指令將CPU各寄存器的值入棧保護(hù)。(2)若允許中斷嵌套,則用STI指令來設(shè)置開中斷,使中斷允許標(biāo)志IF=1。(3)執(zhí)行中斷處理程序。(4)用CLI指令來設(shè)置關(guān)中斷,使中斷允許標(biāo)志IF=0,禁止其他中斷請求進(jìn)入。(5)給中斷命令寄存器送中斷結(jié)束命令EOI,使當(dāng)前正在處理的中斷請求標(biāo)志位被清除,否則同級中斷或低級中斷的請求仍會(huì)被屏蔽掉。(6)恢復(fù)中斷時(shí)的現(xiàn)場,通過一系列POP指令將CPU各寄存器的值恢復(fù)。(7)用中斷返回指令I(lǐng)RET返回主程序,此時(shí)堆棧中保存的斷點(diǎn)值和標(biāo)志值分別裝入IP、CS和PSW。

進(jìn)入中斷服務(wù)程序時(shí),TF和IF清除,不再響應(yīng)其他外設(shè)的中斷請求,所以要設(shè)置開中斷,以允許中斷進(jìn)入,實(shí)現(xiàn)中斷嵌套?;謴?fù)寄存器內(nèi)容時(shí),為了防止有中斷進(jìn)入破壞其內(nèi)容,要執(zhí)行關(guān)中斷,然后在中斷返回時(shí)原來的PSW返回,使IF=1,又再開中斷,這樣返回主程序后,中斷請求能得到允許。中斷結(jié)束命令EOI一般在中斷處理結(jié)束前發(fā)出,使一次中斷處理的過程是完整的。四、中斷響應(yīng)時(shí)序

CPU對可屏蔽中斷請求的響應(yīng)過程要執(zhí)行兩個(gè)連續(xù)的中斷響應(yīng)總線周期,第一個(gè)中斷響應(yīng)總線周期,CPU通知外設(shè)準(zhǔn)備響應(yīng)中斷,外設(shè)應(yīng)該準(zhǔn)備好中斷類型號,第二個(gè)中斷響應(yīng)總線周期,CPU接收外設(shè)接口發(fā)來的中斷類型號。圖7-6給出了8086/8088中斷響應(yīng)時(shí)序。圖7-68086/8088中斷響應(yīng)總線周期時(shí)序圖7-3中斷優(yōu)先級和中斷嵌套 在實(shí)際系統(tǒng)中,經(jīng)常有多個(gè)中斷源同時(shí)向CPU請求中斷,CPU響應(yīng)哪個(gè)中斷源的中斷請求,由中斷優(yōu)先級排隊(duì)決定,CPU先響應(yīng)優(yōu)先級高的中斷請求。當(dāng)CPU正在處理中斷時(shí),有更高優(yōu)先級別的中斷請求,并且IF=1,CPU能響應(yīng)更高級別的中斷請求,而屏蔽掉低級的中斷請求,形成了中斷嵌套,或稱為多重中斷。一、中斷優(yōu)先級

IBMPC機(jī)中規(guī)定優(yōu)先級從高到低的次序?yàn)椋?/p>

內(nèi)中斷(除法錯(cuò)、INTO、INTn) 不可屏蔽中斷(NMI)

可屏蔽中斷(INTR)

單步中斷 對于可屏蔽中斷的優(yōu)先級設(shè)定有三種方法:高低1.軟件查詢中斷優(yōu)先級 軟件查詢中斷方式,是將各個(gè)外設(shè)的中斷請求信號通過或門相或后,送到CPU的INTR端,同時(shí)把幾個(gè)外設(shè)的中斷請求狀態(tài)位組成一個(gè)端口,賦以端口號。任一外設(shè)有中斷請求,CPU響應(yīng)中斷后進(jìn)入中斷處理子程序,用軟件讀取端口內(nèi)容,逐位查詢端口的每位狀態(tài),查到哪個(gè)外設(shè)有中斷請求,就轉(zhuǎn)入哪個(gè)外設(shè)的中斷服務(wù)程序。查詢程序的次序,決定了外設(shè)優(yōu)先級別的高低,先測試的中斷源優(yōu)先級別最高。當(dāng)然在軟件查詢程序中也可用移位或屏蔽法來改變端口各位的測試次序,但查詢時(shí)間較長,對中斷源較多的情況不合適。2.硬件查詢優(yōu)先方式——菊花鏈法 菊花鏈法是采用硬件查詢優(yōu)先的方式,它是在每個(gè)外設(shè)的對應(yīng)接口上連接一個(gè)邏輯電路構(gòu)成一個(gè)鏈,控制了中斷響應(yīng)信號的通路,圖7-8給出了它的原理圖。圖7-8菊花鏈優(yōu)先查詢法越靠近CPU的外設(shè)接口,優(yōu)先級越高!3.矢量中斷優(yōu)先級 矢量中斷優(yōu)先級的設(shè)置是采用中斷優(yōu)先級控制器。圖7-9給出了它的典型設(shè)計(jì)原理框圖。

外設(shè)可以有8個(gè)中斷請求IR0~I(xiàn)R7送入中斷請求寄存器,中斷屏蔽寄存器可由用戶設(shè)置屏蔽某幾位的中斷請求。中斷優(yōu)先級管理邏輯電路判別出最高優(yōu)先級中斷請求,將其中斷級轉(zhuǎn)換成3位碼,送到中斷類型寄存器的低3位及當(dāng)前中斷服務(wù)寄存器。此后,中斷優(yōu)先級控制器向CPU發(fā)出中斷請求信號,CPU開中斷時(shí),CPU發(fā)出中斷響應(yīng)信號,如上所述開始一個(gè)中斷處理過程。中斷處理結(jié)束引起中斷服務(wù)寄存器對應(yīng)為清0,級別較低的中斷請求才能得到響應(yīng)。圖7-9矢量中斷優(yōu)先級控制器的原理圖二、中斷嵌套

IBMPC機(jī)沒有規(guī)定中斷嵌套的深度,但使用中受到堆棧容量的限制,必須要有足夠的堆棧單元來保存多重中斷的斷點(diǎn)及寄存器。8259A在完全嵌套優(yōu)先級工作方式下,中斷優(yōu)先次序?yàn)镮R0、IR1…IR7,圖7-10圖示了中斷嵌套序列的例子。圖7-10中斷嵌套序列7-4可編程中斷控制器8259A一、功能和引腳

8259A是8086/8088系列的可編程中斷控制器,它的主要功能是:(1)具有8級優(yōu)先級控制,通過級聯(lián)可以擴(kuò)展到64級優(yōu)先級;(2)每一級中斷可由程序單獨(dú)屏蔽或允許;(3)可提供中斷類型號傳送給CPU;(4)可以通過編程選擇多種不同工作方式。

8259A是28個(gè)引腳的雙列直插式芯片,其引腳圖和內(nèi)部結(jié)構(gòu)框圖如圖7-11所示。圖7-118259A芯片引腳圖D7~D0:雙向數(shù)據(jù)線,三態(tài),它直接或通過總線驅(qū)動(dòng)器與系統(tǒng)的數(shù)據(jù)總線相連。IR7~I(xiàn)R0:外設(shè)的中斷請求信號輸入端,輸入,中斷請求信號可以是電平觸發(fā)或邊沿觸發(fā)。中斷級聯(lián)時(shí),連接8259A從片INT端。INT:向CPU發(fā)出的中斷請求信號,輸出,與CPU的INTR端相連。

:讀命令信號,輸入,低電平有效,用來控制數(shù)據(jù)由8259A讀到CPU。

:寫命令信號,輸入,低電平有效,用來控制數(shù)據(jù)由CPU寫到8259A。

:片選信號,輸入,通過譯碼電路與高位地址總線相連。A0:選擇8259A的兩個(gè)端口,輸入,連低位地址線。:CPU給8259A的中斷響應(yīng)信號,輸入。8259A要求兩個(gè)負(fù)脈沖的中斷響應(yīng)信號,第一個(gè)是CPU響應(yīng)中斷的信號,第二個(gè)結(jié)束后,CPU讀取8259A送去的中斷類型號。CAS2~CAS0:雙向級聯(lián)信號線。8259A作主片時(shí),為輸出線,作從片時(shí),為輸入線。與配合實(shí)現(xiàn)8259A級聯(lián)。:編程/雙向使能緩沖。作為輸入使用時(shí),用來決定本片8259A是主片還是從片;若=1,則為主片;若

=0,則為從片。作為輸出使用時(shí),啟動(dòng)8259A到CPU之間的數(shù)據(jù)總線驅(qū)動(dòng)器。作為輸入還是輸出,決定于8259A是否采用緩沖方式工作,若采用緩沖方式工作,則作為輸出,若采用非緩沖方式,作為輸入。二、內(nèi)部結(jié)構(gòu)1.數(shù)據(jù)總線緩沖器 數(shù)據(jù)總線緩沖器是8位雙向三態(tài)緩沖器,是8259A與系統(tǒng)數(shù)據(jù)總線接口,通常連接到低8位數(shù)據(jù)總線D7~D0。CPU編程控制字寫入8259A、8259A的狀態(tài)信息讀出以及中斷響應(yīng)時(shí)8259A送出的中斷類型號,都經(jīng)過它傳送。2.讀寫控制電路

讀寫控制電路接收CPU送來的讀/寫信號、,片選信號

及端口選擇信號A0。高位地址譯碼后送

作片選信號。A0連地址總線A0或A1,用來選擇8259A的兩個(gè)I/O端口,一個(gè)為奇地址,一個(gè)為偶地址。讀寫操作由這4個(gè)信號控制來實(shí)現(xiàn)的,使8259A接收CPU送來的初始化命令字(ICW)和操作命令字(OCW),或?qū)?nèi)部狀態(tài)信息送給CPU。、、、A0的控制作用見表7-2。表7-2中D4、D3代表控制字的第4位和第3位。

表7-28259A的讀寫功能在IBMPC/XT機(jī)中用A9~A1譯碼來產(chǎn)生信號,組合為00001××××,產(chǎn)生I/O端口地址為20H~3FH,共32個(gè)。而8259A只需要兩個(gè)I/O端口地址,IBMPC/XT取20H、21H兩個(gè)地址在編程時(shí)使用。但其他30地址為映像地址,不可能再分配給其他I/O設(shè)備使用。

8088系統(tǒng)中數(shù)據(jù)線為8位,8259A數(shù)據(jù)線為8位,所以地址總線的A0連8259A的A0,可以分配給8259A兩個(gè)端口地址,一個(gè)奇地址,一個(gè)偶地址,從而滿足8259A的編程要求。

在8086系統(tǒng)中數(shù)據(jù)總線為16位,CPU傳送數(shù)據(jù)時(shí),低8位數(shù)據(jù)總線傳送到偶地址端口,高8位數(shù)據(jù)總線傳送到奇地址端口。當(dāng)8位I/O接口芯片與8086CPU16位數(shù)據(jù)總線相連接時(shí),既可以連到低8位數(shù)據(jù)總線,也可以連到高8位數(shù)據(jù)總線,實(shí)際設(shè)計(jì)時(shí),如果8259A的D7~D0與CPU數(shù)據(jù)總線低8位相連,為了保證CPU與8259A用低8位傳輸數(shù)據(jù),CPU的A1連8259A的A0。這樣對CPU來說A0=0,A1可以為1或?yàn)?,CPU讀寫始終是用偶地址。對8259A來說A1可以為1或0,給8259A的端口分配了兩個(gè)地址,一個(gè)奇地址,一個(gè)偶地址,符合了8259A的編程要求。8086系統(tǒng)中接口芯片8259A的譯碼電路3.級聯(lián)緩沖/比較器

8259A與系統(tǒng)總線相連有兩種方式:(1)緩沖方式:在多片8259A級聯(lián)的系統(tǒng)中,8259A通過總線驅(qū)動(dòng)器和數(shù)據(jù)總線相連,這就是緩沖方式。在緩沖方式下,8259A的端與總線驅(qū)動(dòng)器允許端相連,控制總線驅(qū)動(dòng)器啟動(dòng),作為輸出端。當(dāng)=0,8259A控制數(shù)據(jù)從8259A送到CPU,當(dāng)=1時(shí),控制數(shù)據(jù)從CPU送到8259A。(2)非緩沖方式:單片8259A或少量8259A級聯(lián)時(shí),可以將8259A直接與數(shù)據(jù)總線相連,稱為非緩沖方式。非緩沖方式下,8259A的端作輸入端,控制8259A作為主片還是從片,

=1,表示此8259A為主片,=0,表示此8259A為從片。單片8259A時(shí),接高電平。 由初始化命令字ICW4來設(shè)置緩沖方式或非緩沖方式。4.中斷請求寄存器IRR

中斷請求寄存器是一個(gè)8位寄存器,存放外部輸入的中斷請求信號IR7~I(xiàn)R0。當(dāng)某個(gè)IR端有中斷請求時(shí),IRR相應(yīng)的某位置‘1’。可以允許8個(gè)中斷請求信號同時(shí)進(jìn)入,此時(shí)IRR寄存器被置成全‘1’。當(dāng)中斷請求被響應(yīng)時(shí),IRR的相應(yīng)位復(fù)位。5.中斷屏蔽寄存器IMR

中斷屏蔽寄存器是一個(gè)8位寄存器,用來存放對各級中斷請求的屏蔽信息。當(dāng)用軟件編程使IMR寄存器中某一位置‘0’時(shí),允許IRR寄存器中相應(yīng)位的中斷請求進(jìn)入中斷優(yōu)先級判別器。若IMR中某位為‘1’,則此位中斷請求被屏蔽。各個(gè)中斷屏蔽位是獨(dú)立的,屏蔽了優(yōu)先級高的中斷,不影響其他優(yōu)先級低的中斷允許。6.優(yōu)先級判別器PR

優(yōu)先級判別器對保存在IRR寄存器中的中斷請求進(jìn)行優(yōu)先級識別,送出最高優(yōu)先級的中斷請求到中斷服務(wù)寄存器ISR中去。當(dāng)出現(xiàn)多重中斷時(shí),PR判定是否允許所出現(xiàn)的中斷去打斷正在處理的中斷,讓優(yōu)先級更高的中斷優(yōu)先處理。7.中斷服務(wù)寄存器ISR

中斷服務(wù)寄存器是一個(gè)8位寄存器,保存正在處理中的中斷請求信號,某個(gè)IR端的中斷請求被CPU響應(yīng)后,當(dāng)CPU發(fā)出第一個(gè)信號時(shí),ISR寄存器中的相應(yīng)位置‘1’,一直保持到該級中斷處理結(jié)束為止。允許多重中斷時(shí),ISR多位同時(shí)被置成‘1’。8.控制電路 控制電路是8259A的內(nèi)部控制器。根據(jù)中斷請求寄存器IRR的置位情況和中斷屏蔽寄存器IMR設(shè)置的情況,通過優(yōu)先級判別器PR判定優(yōu)先級,向8259A內(nèi)部及其他部件發(fā)出控制信號。并向CPU發(fā)出中斷請求信號INT和接收CPU的中斷響應(yīng)信號,使中斷服務(wù)寄存器ISR相應(yīng)位置‘1’,并使中斷請求寄存器IRR相應(yīng)位置‘0’。當(dāng)CPU第二個(gè)信號到來時(shí),控制8259A送出中斷類型號,使CPU轉(zhuǎn)入中斷服務(wù)子程序。如果方式控制字ICW4的中斷自動(dòng)結(jié)束位為‘1’,則第二個(gè)脈沖結(jié)束時(shí),將8259A中斷服務(wù)寄存器ISR的相應(yīng)位清‘0’。三、8259A的中斷管理方式

8259A有多種工作方式,這些工作方式都是通過編程方法來設(shè)置的,使用十分靈活。首先我們來看一下8259A的編程結(jié)構(gòu),然后再介紹8259A的中斷工作方式。1.8259A的編程結(jié)構(gòu) 從圖7-128259A編程結(jié)構(gòu)中可以看到,中斷管理方式是通過8259A初始化時(shí)寫入初始化命令字和操作命令字來設(shè)置的。初始化命令字寫入寄存器ICW1~I(xiàn)CW4,它是由初始化程序設(shè)置的,初始化命令字一經(jīng)設(shè)定,在系統(tǒng)工作過程中就不再改變。操作命令字寫入寄存器OCW1~OCW3,它是由應(yīng)用程序設(shè)定的,用來對中斷處理過程進(jìn)行控制,在系統(tǒng)運(yùn)行過程中,操作命令字可以重新設(shè)置。

8259A的中斷優(yōu)先級的管理采用多種方式,優(yōu)先級既可以固定設(shè)置,又可以循環(huán)設(shè)置,給用戶極大的方便。中斷優(yōu)先級設(shè)定后,允許中斷嵌套,通常允許高級中斷打斷低級中斷,不允許低級或同級中斷打斷高級中斷。特殊情況下與中斷結(jié)束方式有關(guān),也可以低級中斷打斷高級中斷,稱為重復(fù)中斷。2.優(yōu)先級設(shè)置方式(1)完全嵌套方式 若8259A初始化后沒有設(shè)置其他優(yōu)先級方式,就自動(dòng)進(jìn)入完全嵌套方式。在這種方式下,中斷優(yōu)先級分配固定級別0~7級,IR0具有最高優(yōu)先級,IR7優(yōu)先級最低。也可用初始化命令字ICW4中SFNM=0,將8259A置成完全嵌套優(yōu)先級方式。 在完全嵌套工作方式下,當(dāng)一個(gè)中斷請求被響應(yīng)后,中斷服務(wù)寄存器ISR中的對應(yīng)位置‘1’,中斷類型號被放到數(shù)據(jù)總線上,CPU轉(zhuǎn)入中斷服務(wù)程序。一般情況下(除自動(dòng)中斷結(jié)束方式外),在CPU發(fā)出中斷結(jié)束命令EOI前,ISR寄存器中對應(yīng)位一直保持‘1’。當(dāng)新的中斷請求中斷請求進(jìn)入時(shí),中斷優(yōu)先級裁決器將新的中斷請求和當(dāng)前ISR寄存器中置‘1’比較,判斷哪一個(gè)優(yōu)先級更高。允許打斷正在處理的中斷,優(yōu)先處理更高級的中斷,實(shí)現(xiàn)中斷嵌套,但禁止同級與低級中斷請求進(jìn)入。中斷嵌套時(shí),ISR寄存器中內(nèi)容發(fā)生變化,又有一個(gè)對應(yīng)位置‘1’,當(dāng)實(shí)現(xiàn)8級中斷嵌套時(shí),ISR寄存器內(nèi)容為FFH。

在完全嵌套方式中有兩種中斷結(jié)束方式:普通EOI結(jié)束方式和自動(dòng)AEOI結(jié)束方式。(2)特殊全嵌套工作方式 在級聯(lián)時(shí),還有一種特殊全嵌套工作方式,它與完全嵌套工作方式基本相同。區(qū)別在于當(dāng)處理某級中斷時(shí),有同級中斷請求進(jìn)入,8259A也會(huì)響應(yīng),從而實(shí)現(xiàn)了對同級中斷請求的特殊嵌套。 在級聯(lián)方式中,主片編程為特殊全嵌套工作方式,從片為其他優(yōu)先級方式。當(dāng)從片上有中斷請求進(jìn)入并正在處理時(shí),同一從片上又進(jìn)入更高級別的中斷請求,從片能響應(yīng)更高優(yōu)先級中斷請求,并向主片申請中斷,但對主片來說是同級中斷請求。當(dāng)主片處于特殊全嵌套工作方式時(shí),主片就能允許對相同級別的中斷請求開放。所以特殊全嵌套工作方式是專門為多片8259A系統(tǒng)提供的,可以用來確定從片內(nèi)部優(yōu)先級的工作方式。 特殊全嵌套工作方式的設(shè)置是主片初始化時(shí)ICW4中的SFNM=1,同時(shí)應(yīng)將主片ICW4中AEOI位置‘0’,設(shè)成非自動(dòng)結(jié)束方式,通常用特殊EOI結(jié)束方式。(3)優(yōu)先級自動(dòng)循環(huán)方式 在優(yōu)先級自動(dòng)循環(huán)方式中,優(yōu)先級別可以改變。初始優(yōu)先級次序規(guī)定為IR0、IR1、┅、IR7,當(dāng)任何一級中斷被處理完后,它的優(yōu)先級別變?yōu)樽畹停瑢⒆罡邇?yōu)先級賦給原來比它低一級的中斷請求,其他依次類推。例當(dāng)前IR3中斷請求,則處理IR3,處理完IR3后,IR4變成最高優(yōu)先級,優(yōu)先級依次為IR4、IR5、IR6、┅、IR2、IR3。所以,優(yōu)先級自動(dòng)循環(huán)方式適合用在多個(gè)中斷源優(yōu)先級相等的場合。 用操作命令字OCW2中R、SL=10就可設(shè)置優(yōu)先級自動(dòng)循環(huán)方式。根據(jù)結(jié)束方式不同,有兩種自動(dòng)循環(huán)方式:普通EOI循環(huán)方式和自動(dòng)EOI循環(huán)方式。(4)優(yōu)先級特殊循環(huán)方式 優(yōu)先級特殊循環(huán)方式和優(yōu)先級自動(dòng)循環(huán)方式相比,不同之處在于優(yōu)先級特殊循環(huán)方式中,初始時(shí)最低優(yōu)先級由程序規(guī)定,最高先級就確定了。例如初始時(shí)指定IR1為最低優(yōu)先級,則IR2為最高優(yōu)先級,其他依次類推。而優(yōu)先級自動(dòng)循環(huán)方式初始時(shí)最高優(yōu)先級一定是IR0。用操作命令字OCW2中R、SL=11就可以設(shè)置優(yōu)先級特殊循環(huán)方式,根據(jù)結(jié)束方式不同,通常用特殊EOI循環(huán)方式。

3.中斷結(jié)束方式 在固定優(yōu)先級方式中,對中斷結(jié)束的處理有自動(dòng)AEOI結(jié)束方式和非自動(dòng)結(jié)束方式,非自動(dòng)結(jié)束方式又分普通EOI結(jié)束方式和特殊SEOI結(jié)束方式。

中斷結(jié)束處理實(shí)際上就是對中斷服務(wù)寄存器ISR中對應(yīng)位的處理。當(dāng)一個(gè)中斷得到響應(yīng)時(shí),8259A使ISR寄存器中對應(yīng)位置‘1’,表明此對應(yīng)外設(shè)正在服務(wù),并為中斷優(yōu)先判別器提供判別依據(jù)。中斷結(jié)束時(shí),必須使ISR寄存器中對應(yīng)位置‘0’,否則中斷優(yōu)先級判別會(huì)不正常。什么時(shí)刻使ISR中對應(yīng)位置‘0’,就產(chǎn)生不同的中斷結(jié)束方式。(1)普通EOI結(jié)束方式 在完全嵌套工作方式下,任何一級中斷處理結(jié)束返回上一級程序前,CPU向8259A傳送EOI結(jié)束命令字,8259A收到EOI結(jié)束命令后,自動(dòng)將ISR寄存器中級別最高的置‘1’位清成‘0’(此位對應(yīng)當(dāng)前正在處理的中斷)。EOI結(jié)束命令字必須放在返回指令I(lǐng)RET前,沒有EOI結(jié)束命令,ISR寄存器中對應(yīng)位仍為‘1’,繼續(xù)屏蔽同級或低級的中斷請求。若EOI結(jié)束命令字放在中斷服務(wù)程序中其他位置,會(huì)引起同級或低級中斷在本級未處理完前進(jìn)入,容易產(chǎn)生錯(cuò)誤。普通EOI結(jié)束命令字是設(shè)置OCW2中EOI位為1,即OCW2中R、SL、EOI組合為001。對IBMPC/XT機(jī),發(fā)EOI結(jié)束命令字指令為:

MOV AL,20H OUT 20H,AL;8259A端口為20H,21H(2)特殊EOI結(jié)束方式 在非完全嵌套工作方式下,中斷服務(wù)寄存器無法確定哪一級中斷為最后響應(yīng)和處理的,這時(shí)要采用特殊SEOI結(jié)束方式。CPU向8259A發(fā)特殊EOI結(jié)束命令字,命令字中將當(dāng)前要清除的中斷級別也傳給8259A。此時(shí),8259A將ISR寄存器中指定級別的對應(yīng)位清‘0’,它在任何情況下均可使用。

特殊EOI結(jié)束命令字是將OCW2中R、SL、EOI設(shè)置成011,而L2~L0三位指明了中斷結(jié)束的對應(yīng)位。

(3)自動(dòng)EOI結(jié)束方式 在自動(dòng)AEOI方式中,任何一級中斷被響應(yīng)后,ISR寄存器對應(yīng)位置‘1’,但在CPU進(jìn)入中斷響應(yīng)周期,發(fā)第二個(gè)脈沖后,8259A自動(dòng)將ISR寄存器中對應(yīng)位清‘0’。此時(shí),盡管對某個(gè)外設(shè)正在進(jìn)行中斷服務(wù),但對8259A來說,ISR寄存器中沒有指示,好象已結(jié)束了中斷處理一樣。這種方式雖然簡單,但因?yàn)镮SR寄存器中沒有標(biāo)志,低級中斷申請時(shí),可以打斷高級中斷,產(chǎn)生重復(fù)嵌套,嵌套深度也無法控制,容易產(chǎn)生錯(cuò)誤,使用時(shí)要特別小心。通常在只有一片8259A,多個(gè)中斷不會(huì)嵌套情況下使用。 自動(dòng)AEOI方式設(shè)置是在8259A初始化時(shí),用初始化命令字ICW4中AEOI=1的方法實(shí)現(xiàn)的。

在級聯(lián)方式下,一般用非自動(dòng)結(jié)束方式,無論用普通EOI結(jié)束方式,還是用特殊EOI結(jié)束方式,中斷處理結(jié)束時(shí),要發(fā)兩次中斷結(jié)束命令,一次是對主片發(fā)的,一次是對從片發(fā)的。

4.循環(huán)優(yōu)先級的循環(huán)方法 在循環(huán)優(yōu)先級方式中,與中斷結(jié)束方式有關(guān),有三種循環(huán)方式。(1)普通EOI循環(huán)方式

在主程序或中斷服務(wù)程序中設(shè)置操作命令字,當(dāng)任何一級中斷被處理完后,使CPU給8259A回送普通EOI循環(huán)命令,8259A收到循環(huán)命令后,將ISR寄存器中,最高優(yōu)先級的Iri置‘1’位清‘0’,并賦給它最低優(yōu)先級,將最高優(yōu)先級賦給它的下一級IRi+1,其它依次類推。表7-3是普通EOI循環(huán)的例子。

例7-10

某中斷系統(tǒng)IR0為最高優(yōu)先級,IR7為最低優(yōu)先級。有IR2、IR5兩個(gè)中斷請求。設(shè)置為普通EOI循環(huán)方式,要求給出IR2及IR5中斷處理完后中斷優(yōu)先級的變化情況。表7-3普通EOI循環(huán)方式(2)特殊EOI循環(huán)方式 特殊EOI循環(huán)方式即指定最低級循環(huán)方式,最低優(yōu)先級由編程確定,最高優(yōu)先級也相應(yīng)而定,例指定IR5為最低優(yōu)先級,則IR6就為最高優(yōu)先級,其他各級依次類推。這樣在當(dāng)前中斷服務(wù)程序結(jié)束前,使CPU給8259A回送特殊EOI結(jié)束命令,8259A收到此命令字后,指定最低優(yōu)先級,并重新排列優(yōu)先級級別。例7-11

某一時(shí)刻8259A中IR2,IR6有中斷嵌套服務(wù)。在IR2中斷服務(wù)程序中安排了最低優(yōu)先級賦給IR3指令,指令執(zhí)行后,中斷優(yōu)先級變化情況如表7-4。

表7-4特殊EOI循環(huán)方式(3)自動(dòng)EOI循環(huán)方式 在自動(dòng)EOI循環(huán)方式中,任何一級中斷被響應(yīng)后,中斷響應(yīng)總線周期中第二個(gè)信號的后沿自動(dòng)將ISR寄存器中相應(yīng)位清0,并立即改變各級中斷的優(yōu)先級別,改變方式與普通EOI循環(huán)方式相同。使用這種方式要小心,防止重復(fù)嵌套產(chǎn)生。

自動(dòng)EOI循環(huán)方式設(shè)置是OCW2中R、SL、EOI=100。

5.中斷屏蔽方式

CPU由CLI指令禁止所有可屏蔽中斷進(jìn)入,中斷優(yōu)先級管理也可以對中斷請求單獨(dú)屏蔽,通過對中斷屏蔽寄存器的操作可以實(shí)現(xiàn)對某幾位的屏蔽。有兩種屏蔽方式:(1)普通屏蔽方式 將中斷屏蔽寄存器IMR中某一位或某幾位置‘1’,即可將對應(yīng)位的中斷請求屏蔽掉。普通屏蔽方式的設(shè)置通過設(shè)置操作命令字OCW1來實(shí)現(xiàn)。例7-12

屏蔽第2、3、5、6位進(jìn)入的中斷請求,假設(shè)8259A的端口地址為20H,21H。

MOV AL,01101100B OUT 21H,AL

對OCW1的設(shè)置可以在主程序中,也可放在中斷服務(wù)程序中,具體根據(jù)中斷處理要求而定。

(2)特殊屏蔽方式

某些場合,希望一個(gè)中斷服務(wù)程序能動(dòng)態(tài)地改變系統(tǒng)的優(yōu)先級結(jié)構(gòu)。例如當(dāng)CPU正在處理中斷程序的某一部分時(shí),希望禁止低級中斷請求,但在執(zhí)行中斷處理程序的另一部分時(shí),希望開放較低級中斷請求,此時(shí)可采用特殊屏蔽方式。此方式能對本級中斷進(jìn)行屏蔽,而允許優(yōu)先級比它高或低的中斷進(jìn)入,特殊屏蔽方式總是在中斷處理程序中使用,特殊屏蔽方式的設(shè)置是通過設(shè)置操作命令字OCW3中的ESMM,SMM=11來實(shí)現(xiàn)的,例如當(dāng)前正在執(zhí)行IR3的中斷服務(wù)程序,設(shè)置了特殊屏蔽方式后,再用OCW1對中斷屏蔽寄存器中第3位置‘1’時(shí),就會(huì)同時(shí)使當(dāng)前中斷服務(wù)寄存器中對應(yīng)位自動(dòng)清‘0’,這樣可以既屏蔽了當(dāng)前正在處理的中斷,又開放了較低級別的中斷。待中斷服務(wù)程序結(jié)束時(shí),應(yīng)將IMR寄存器的第3位復(fù)位,并將SMM位復(fù)位,標(biāo)志退出特殊屏蔽方式。

6.中斷請求引入方式 中斷請求引入有三種方式:(1)邊沿觸發(fā)方式 在邊沿觸發(fā)方式下,8259A將中斷請求輸入端出現(xiàn)的上升沿作為中斷請求信號。中斷請求輸入端出現(xiàn)上升沿觸發(fā)信號后,可以一直保持高電平。(2)電平觸發(fā)方式

在電平觸發(fā)方式下,8259A將中斷請求輸入端出現(xiàn)的高電平作為中斷請求信號。但當(dāng)中斷得到響應(yīng)后,中斷輸入端必須及時(shí)撤除高電平,否則在CPU進(jìn)入中斷處理過程,并且開中斷的情況下,原輸入端的高電平會(huì)引起第二次中斷的錯(cuò)誤。 初始化命令字ICW1中的LTIM位可用來設(shè)置這兩種觸發(fā)方式,LTIM=1,設(shè)置為電平觸發(fā)方式;LTIM=0,設(shè)置為邊沿觸發(fā)方式。(3)中斷查詢方式

在中斷查詢方式下,外部設(shè)備向8259A發(fā)中斷請求信號,中斷請求可以是邊沿觸發(fā),也可以是電平觸發(fā)。但8259A不通過INT信號向CPU發(fā)中斷請求信號,因?yàn)镃PU內(nèi)部的中斷允許觸發(fā)器復(fù)位,所以禁止了8259A對CPU的中斷請求。CPU要使用軟件查詢來確定中斷源,才能實(shí)現(xiàn)對外設(shè)的中斷服務(wù)。因此,中斷查詢方式既有中斷的特點(diǎn),又有查詢的特點(diǎn)。

CPU執(zhí)行的查詢軟件中必須有查詢命令,才能實(shí)現(xiàn)查詢功能。CPU通過操作命令字OCW3的設(shè)置來發(fā)出查詢命令的。若外設(shè)發(fā)出中斷請求,8259A的中斷服務(wù)寄存器相應(yīng)位置‘1’,CPU就可以在查詢命令之后的下一個(gè)讀操作,讀取中斷服務(wù)寄存器中的優(yōu)先級。所以,CPU所執(zhí)行的查詢程序應(yīng)包括以下過程:

①系統(tǒng)關(guān)中斷;②用OUT指令使CPU向8259A端口(偶地址端口)送OCW3命令字;③若外設(shè)已發(fā)出過中斷請求,8259A在當(dāng)前中斷服務(wù)寄存器中使對應(yīng)位置‘1’,且立即組成查詢字。④CPU用IN指令從端口(偶地址)讀取8259A的查詢字。

OCW3命令字構(gòu)成的查詢命令格式為:

其中D2位為1,使OCW3具有查詢性質(zhì)。8259A得到查詢命令后,立即組成查詢字,等待CPU讀取。CPU從8259A中讀取的查詢字格式為: 其中IR=1,表示有設(shè)備請求中斷服務(wù);IR=0,表示,沒有設(shè)備請求中斷服務(wù)。W2、W1、W0組成的代碼表示當(dāng)前中斷請求的最高優(yōu)先級。

四、8259A的編程方法 對8259A的編程有兩類命令字:初始化命令字ICW和操作命令字OCW。系統(tǒng)復(fù)位后,初始化程序?qū)?259A置入初始化命令字。初始化后可通過發(fā)出操作命令字OCW來定義8259A的操作方式,實(shí)現(xiàn)對8259A的狀態(tài)、中斷方式和優(yōu)先級管理的控制。初始化命令字只發(fā)一次,操作命令字允許重置,以動(dòng)態(tài)改變8259A的操作與控制方式。1.初始化命令字 初始化命令字完成的功能:①設(shè)定中斷請求信號觸發(fā)方式②設(shè)定8259A工作方式,單片或級聯(lián)。③設(shè)定8259A中斷類型號基值,即IR0對應(yīng)的中斷類型號。④設(shè)定優(yōu)先級設(shè)置方式。⑤設(shè)定中斷處理結(jié)束時(shí)的結(jié)束操作方式。 對8259A編程初始化命令字,共預(yù)置4個(gè)命令字:ICW1、ICW2、ICW3、ICW4。初始化命令字必須順序填寫,但并不是任何情況下都要預(yù)置4個(gè)命令字,用戶根據(jù)具體使用情況而定。8259A有兩個(gè)端口地址,一個(gè)為偶地址,一個(gè)為奇地址。(1)ICW1——芯片控制初始化命令字格式:例7-13IBMPC/XT系統(tǒng)初始化中,設(shè)ICW1=13H,表示8259A為單片方式,上升沿觸發(fā),要求設(shè)置ICW4。指令為:

MOV AL,13H OUT 20H,AL(2)ICW2——設(shè)置中斷類型號初始化命令字格式:A0:A0=1,ICW2必須寫到8259A的奇地址端口中。8259A中IR0端對應(yīng)的中斷類型號為中斷類型號基值,它是可以被8整除的正整數(shù),ICW2用來設(shè)置這個(gè)中斷類型號基值,由此提供外部中斷的中斷類型號。ICW2低3位為0,高5位由用戶設(shè)定。當(dāng)8259A收到CPU發(fā)來的第二個(gè)信號,它向CPU發(fā)送中斷類型號,其中高5位ICW2的高5位,低3位根據(jù)IR0~I(xiàn)R7中斷響應(yīng)哪級中斷來確定。例7-14

在IBMPC/XT系統(tǒng)中,T7~T3=00001,所以8個(gè)中斷的類型號為08H~0FH。A0=1,I/O端口地址位21H。設(shè)置ICW2的指令為:

MOV AL,00001000B OUT 21H,AL(3)ICW3——標(biāo)識主片/從片初始化命令字

ICW3命令字在級聯(lián)時(shí)(即ICW1中SNGL=0)才設(shè)置。8259A主片格式:

8259A從片格式: 對于從片8259A來說,ID2~I(xiàn)D0=000~111表示從片接在主片的哪個(gè)中斷請求輸入端上,例ID2~DI0=010,表示從片接在主片8259A的IR2端。例7-15

某8259A主片的IR3、IR7端連接兩個(gè)8259A從片,編寫初始化命令字。 主片:

MOV AL,10001000B OUT 21H,AL;主片端口地址20H,21H

從片1:

MOV AL,00000011B OUT 61H,AL;從片1端口地址60H,61H

從片2:

MOV AL,00000111B OUT 71H,AL;從片2端口地址70H,71H(4)ICW4——方式控制初始化命令字

ICW1中IC4為1時(shí),要求預(yù)置ICW4命令字,對8086/8088系統(tǒng)必須預(yù)置ICW4。格式:※初始化命令字的設(shè)置有固定次序,端口地址也有明確規(guī)定,并不會(huì)因?yàn)橹挥袃蓚€(gè)端口輸出指令而混淆,設(shè)置次序如圖7-13所示。初始化命令字必須從ICW1開始設(shè)置,依下順序進(jìn)行設(shè)置,并分別根據(jù)ICW1中的SNGL位和IC4位決定是否設(shè)置ICW3和ICW4。級聯(lián)時(shí)要設(shè)置ICW3,并且從片與主片的ICW3的設(shè)置不同。 在初始化命令字設(shè)置完成前,對A0=1的輸出指令不可能是操作命令字。而初始化命令序列設(shè)置完成后,在操作命令字的設(shè)置中,不可能出現(xiàn)第二次初始化,因此不會(huì)混淆。

圖7-13初始化命令字設(shè)置次序2.操作命令字 操作命令字決定中斷屏蔽,中斷優(yōu)先級次序,中斷結(jié)束方式等。中斷管理較復(fù)雜,包括有:完全嵌套優(yōu)先方式、特殊嵌套優(yōu)先方式、自動(dòng)循環(huán)優(yōu)先方式、特殊循環(huán)優(yōu)先方式、特殊屏蔽方式、查詢方式等。它是由操作命令字的設(shè)置來實(shí)現(xiàn)的,設(shè)置時(shí),次序上沒有嚴(yán)格要求,但端口地址有嚴(yán)格規(guī)定,OCW1必須寫入奇地址端口,OCW2和OCW3必須寫入偶地址端口。(1)OCW1——中斷屏蔽操作命令字格式:

例7-18

設(shè)某中斷系統(tǒng)要求屏蔽IR3,IR5,8259A編程指令為:

MOV AL,00101000B OUT 21H,AL(2)OCW2——優(yōu)先級循環(huán)方式和中斷結(jié)束方式操作字格式:A0:A0=0,OCW2命令字必須寫入8259A偶地址端口;標(biāo)志位:OCW2的D4、D3位等于00,是標(biāo)志位。以區(qū)別ICW1

和OCW3控制字的設(shè)置;L2~L0:SL=1時(shí),L2~L0有效。L2~L0有兩個(gè)用途,一個(gè)是當(dāng)OCW2設(shè)置為特殊EOI結(jié)束方式時(shí),L2~L0指出清除中斷服務(wù)寄存器中的哪一位,第二個(gè)當(dāng)OCW2

設(shè)置為特殊優(yōu)先級循環(huán)方式時(shí),L2~L0指出循環(huán)開始時(shí)設(shè)置的最低優(yōu)先級;R、SL、EOI:這三位組合起來才能指明優(yōu)先級設(shè)置方式和中 斷結(jié)束控制方式,但每位也有自己的意義;R(Rotate):R=1,中斷優(yōu)先級是按循環(huán)方式設(shè)置的,即每個(gè)中斷級輪流成為最高優(yōu)先級。當(dāng)前最高優(yōu)先級服務(wù)后 就變成最低級,它相鄰的下一級變成最高級,其他依次類推。R=0,設(shè)置為固定優(yōu)先級,IR0級最高,IR7

級最低;SL(SpecificLevel):指明L2~L0是否有效。SL=1,有效。EOI(EndofInterrupt):指定中斷結(jié)束。EOI=1,用作中斷 結(jié)束命令,使中斷服務(wù)寄存器中對應(yīng)位清0,在非 自動(dòng)結(jié)束方式中使用。EOI=0,不執(zhí)行結(jié)束操作 命令。如果初始化時(shí),ICW4的AEOI=1,設(shè)置為 自動(dòng)結(jié)束方式,此時(shí)OCW2中的EOI位應(yīng)為0。

OCW2功能包括兩個(gè)方面,一個(gè)是決定8259A是否采用優(yōu)先級循環(huán)方式,另一個(gè)是中斷結(jié)束采用普通的還是特殊的EOI結(jié)束方式。表7-6給出了R、SL、EOI三

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論