第八章 中斷和中斷_第1頁(yè)
第八章 中斷和中斷_第2頁(yè)
第八章 中斷和中斷_第3頁(yè)
第八章 中斷和中斷_第4頁(yè)
第八章 中斷和中斷_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第八章中斷和中斷控制器

【內(nèi)容提要]本章主要內(nèi)容有三個(gè):①中斷基拙,這是為理解中斷控制器和中斷系統(tǒng)的知識(shí)準(zhǔn)備;②中斷控制器的硬件和控制字,這是編程應(yīng)用的基礎(chǔ),既是難點(diǎn),也是重點(diǎn);③CPU中斷的管理。

【學(xué)習(xí)指導(dǎo)】本章的學(xué)習(xí)主要要抓住幾個(gè)問(wèn)題:①中斷的全過(guò)程,著重理清CPU-8259A一中斷源(I/0設(shè)備)之間的聯(lián)系;著重理清中斷向量表、堆棧、存儲(chǔ)器之間的聯(lián)系;著重理清主程序、中斷服務(wù)程序、中斷處理程序之間的聯(lián)系;也就是將I/O設(shè)備、中斷控制器、CPU、中斷響應(yīng)周期、中斷向量表、中斷服務(wù)程序等聯(lián)系起來(lái)綜合考慮。②82C59A級(jí)聯(lián),32位機(jī)的82C59A是在級(jí)聯(lián)方式下工作的。③實(shí)驗(yàn)和應(yīng)用8.1中斷基礎(chǔ)

(1)中斷中斷是指CPU在運(yùn)行程序時(shí),由于一個(gè)事件的出現(xiàn),致使CPU暫時(shí)中斷正在執(zhí)行的程序,而去為事件服務(wù)(即執(zhí)行中斷服務(wù)程序),服務(wù)完畢,再返回被中斷的程序繼續(xù)執(zhí)行。(2)中斷源這個(gè)事件可能是外部或內(nèi)部的隨機(jī)事件,也可能是由程序預(yù)先安排的事件。因?yàn)檫@個(gè)事件會(huì)引起中斷,所以又稱為中斷源。(3)中斷源的分類中斷源分成內(nèi)部(軟件)中斷和外部(硬件)中斷兩類,內(nèi)部中斷分成指令中斷(如INT21H等)和故障中斷兩個(gè)子類外部中斷分成不可屏蔽中斷(NMI)和可屏蔽中斷(INTR)兩個(gè)子類。注:指令中斷(INTN)是程序員安排的,它發(fā)生在程序中位置是可知的,而硬件中斷和內(nèi)部故障中斷是隨機(jī)的,不可以預(yù)知的。

INTR中斷是可以被CPU完全屏蔽的,這一類的中斷也可以被8259中斷控制器部分屏蔽的。

2.中斷系統(tǒng)一個(gè)完整的計(jì)算機(jī)中斷系統(tǒng)必須要有下面的幾個(gè)模塊。(1)硬件系統(tǒng)這一部分由外加的一片中斷控制器芯片和CPU中的中斷控制邏輯所組成,它們的主要功能如下所述?!裰袛嗫刂破魍瓿傻墓δ苤饕牵簩?shí)現(xiàn)中斷屏蔽,接受中斷請(qǐng)求,進(jìn)行中斷聯(lián)絡(luò),進(jìn)行中斷排序判優(yōu),傳送中斷類型碼,實(shí)現(xiàn)中斷嵌套,完成中斷結(jié)束等?!馛PU中斷控制邏輯在CPU功能中是隱含的。它的主要功能是:允許/禁止中斷請(qǐng)求,執(zhí)行中斷響應(yīng)周期,保護(hù)中斷斷點(diǎn),關(guān)中斷,轉(zhuǎn)向中斷服務(wù)程序執(zhí)行等。(2)軟件系統(tǒng)軟件系統(tǒng)主要包含中斷服務(wù)程序和中斷向量表這兩個(gè)部分。

●中斷服務(wù)程序是程序員事先寫(xiě)好的一個(gè)子程序,它為某個(gè)特定的中斷源服務(wù),其核心如右圖中的中斷處理部分,這一部分可以是對(duì)I/O進(jìn)行數(shù)據(jù)傳送和處理,也可以是對(duì)某些緊急事件進(jìn)行應(yīng)急處理,功能十分的豐富多變。(要對(duì)右邊流程圖中的各個(gè)細(xì)分框圖進(jìn)行說(shuō)明。)●中斷向量表位于內(nèi)存最低端1024個(gè)字節(jié)處,其中可存儲(chǔ)256個(gè)中斷服務(wù)子程序的入口地址,CPU響應(yīng)中斷時(shí),從數(shù)據(jù)總線上得到中斷向量號(hào),根據(jù)中斷向量號(hào),CPU可以很容易的從中斷向量表中得到中斷服務(wù)子程序的入口地址。8.1.2中斷類型前面已經(jīng)講過(guò),根據(jù)中斷源在計(jì)算機(jī)系統(tǒng)中的位置不同,我們把中斷分成外部中斷和內(nèi)部中斷兩類。.外部中斷由CPU外部事件引起的中斷就叫做外部中斷,因?yàn)檫@是硬件電路產(chǎn)生的中斷,因此又稱為硬件中斷。硬件中斷又分為可屏蔽中斷(INTR)與非屏蔽中斷(NMI)。

(1)可屏蔽中斷這是經(jīng)由中斷控制器(82C59A)轉(zhuǎn)發(fā)的中斷。I/O設(shè)備的中斷請(qǐng)求信號(hào)經(jīng)82C59A用INTR線向CPU請(qǐng)求中斷。CPU可以用IF(=0)來(lái)屏蔽(禁止)它的中斷請(qǐng)求,因此這種中斷叫做可屏蔽中斷,用CLI指令可使IF=0。STI指令可使IF=1,CPU在執(zhí)行中斷響應(yīng)周期時(shí)發(fā)出兩次中斷應(yīng)答(INTA)信號(hào)予以響應(yīng),從而讀取從82C59A送來(lái)的中斷源的中斷類型碼。(2)非屏蔽中斷(不可屏蔽中斷)這是由非屏蔽中斷控制線路產(chǎn)生的中斷。當(dāng)協(xié)處理器工作異常或存儲(chǔ)器奇偶校驗(yàn)出錯(cuò)時(shí)會(huì)產(chǎn)生NMI中斷請(qǐng)求,此中斷請(qǐng)求通過(guò)非屏蔽中斷控制線路用NMI向CPU請(qǐng)求中斷。這種中斷不會(huì)被CPU的IF位所屏蔽(禁止),因此這種中斷叫做非屏蔽中斷。非屏蔽中斷一旦出現(xiàn),CPU就會(huì)立即響應(yīng)。2.內(nèi)部中斷由CPU內(nèi)部事件引起的中斷就叫做內(nèi)部中斷,因?yàn)檫@是軟件產(chǎn)生的中斷,因此又稱為軟件中斷。內(nèi)部中斷又可分為三類,即指令中斷、調(diào)試中斷和異常中斷。在32位微型計(jì)算機(jī)系統(tǒng)中,為了支持多任務(wù)和虛擬存儲(chǔ)功能又增加了異常中斷。內(nèi)部中斷又可分成如下三類:(1)指令中斷指令中斷有三種形式:①除數(shù)為零中斷,這是做除法的過(guò)程中出現(xiàn)除數(shù)為零,因而產(chǎn)生中斷,這是一種出錯(cuò)中斷;②溢出中斷,指令I(lǐng)NTO,若在指令執(zhí)行過(guò)程中出現(xiàn)溢出,結(jié)果OF被置1,此時(shí)只要執(zhí)行INTO指令,就會(huì)產(chǎn)生溢出中斷;③中斷指令I(lǐng)NTn。(2)調(diào)試中斷這是調(diào)試程序時(shí)所用的兩種方法,以幫助用戶查找、判斷程序的邏輯錯(cuò)誤。一種是斷點(diǎn)中斷,一種是單步中斷。(3)異常中斷異常中斷是80286以后才有的中斷類型。這是程序執(zhí)行中發(fā)生異常情況(錯(cuò)誤)而引起的,所謂異常情況,通常是指在指令執(zhí)行期間,由特權(quán)級(jí)檢查時(shí)檢測(cè)到的不正常操作或者非法操作等違規(guī)情況。異常中斷分為故障(Fault)、陷阱(Trap)和中止(Abort)三種。對(duì)異常中斷有相應(yīng)的處理程序,即故障處理程序、陷阱處理程序和中止處理程序等等。例如,要執(zhí)行一條訪存指令,若被訪問(wèn)的存儲(chǔ)段不在內(nèi)存中,則發(fā)生“段不存在”的異常情況,于是將由INT13中斷轉(zhuǎn)去執(zhí)行相應(yīng)的異常處理程序,以解決“段不存在”的問(wèn)題。因此,異常中斷可用在系統(tǒng)保護(hù)和虛擬存儲(chǔ)中。在32位機(jī)中,將除數(shù)為零中斷也歸為異常中斷。8.1.3中斷類型號(hào)簡(jiǎn)稱中斷號(hào),又稱中斷類型碼。中斷類型號(hào)是一個(gè)微型計(jì)算機(jī)系統(tǒng)對(duì)它的所有不同類型的中斷進(jìn)行的統(tǒng)一編碼。16位微型計(jì)算機(jī)和32位微型計(jì)算機(jī)都支持256種中斷類型(雖然有所不同,)其中斷類型號(hào)為00H一0FFH。當(dāng)中斷發(fā)生時(shí),CPU依中斷類型號(hào)來(lái)識(shí)別中斷,并由此轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序入口1.16位微處理器的中斷類型號(hào)16位微處理器的中斷類型號(hào)見(jiàn)表8-1。其大致分為:中斷類型號(hào)0,1,3,4為內(nèi)部中斷。中斷類型號(hào)2為非屏蔽中斷。中斷類型號(hào)08一OFH為可屏蔽中斷,分為8級(jí),中斷類型號(hào)08H優(yōu)先級(jí)最高,0FH最低。中斷類型號(hào)10H一IFH為指令中斷,大致為BIOS調(diào)用。中斷類型號(hào)20H一FFH為指令中斷,大致為DOS調(diào)用。8.2中斷管理8.2.1中斷優(yōu)先級(jí)管理

1.中斷優(yōu)先級(jí)當(dāng)多個(gè)不同類型的中斷源同時(shí)請(qǐng)求中斷時(shí),CPU優(yōu)先響應(yīng)哪個(gè)中斷源的請(qǐng)求,這就是中斷優(yōu)先問(wèn)題。常用的方法是,按照系統(tǒng)的要求預(yù)先將不同類型的中斷源劃分成不同的優(yōu)先級(jí)別,CPU在中斷響應(yīng)時(shí)按照中斷優(yōu)先級(jí)別進(jìn)行響應(yīng),優(yōu)先級(jí)高者先響應(yīng),優(yōu)先級(jí)低者后響應(yīng)。在一個(gè)微型計(jì)算機(jī)系統(tǒng)中,優(yōu)先級(jí)常采用分層優(yōu)先的方法。以16位機(jī)為例,第一層優(yōu)先是系統(tǒng)層的優(yōu)先級(jí),中斷系統(tǒng)的優(yōu)先次序依次為:●指令中斷●不可屏蔽中斷●可屏蔽中斷●調(diào)試中斷(斷點(diǎn)中斷和單步中斷)指令中斷優(yōu)先級(jí)最高。對(duì)32位機(jī)而言,優(yōu)先級(jí)最高的是異常中斷,其余和16位機(jī)相同。第二層優(yōu)先是中斷類型層的優(yōu)先級(jí),即中斷源的優(yōu)先級(jí)。以可屏蔽中斷為例,默認(rèn)的情況下,它將IR0~I(xiàn)R7定為8級(jí),優(yōu)先級(jí)次序依次為IR0,IR1、…、IR6,IR7IR0最高,IR7最低。注:INTA、INTR全部高電平有效,而中斷響應(yīng)輸出為低電平有效進(jìn)行分析。

(2)軟件查詢法軟件查詢法通常是用于系統(tǒng)層的優(yōu)先級(jí)排隊(duì),也可用于可屏蔽中斷。軟件查詢法也需要簡(jiǎn)單電路支持,但主要是一個(gè)查詢程序。這個(gè)查詢線路由8級(jí)分支程序段組成,每一個(gè)分支程序段相當(dāng)于一級(jí)鏈路。每一級(jí)鏈路對(duì)應(yīng)一級(jí)中斷請(qǐng)求。任一個(gè)分支程序段都要查詢是否有本級(jí)中斷請(qǐng)求,如果有則轉(zhuǎn)移至相關(guān)中斷服務(wù)程序去處理;如果沒(méi)有則進(jìn)人下一級(jí)查詢。8分支程序是按優(yōu)先級(jí)順序連接的,CPU查詢的次序就是優(yōu)先級(jí)的次序,最先查詢的一定是優(yōu)先級(jí)最高的中斷。如圖8-4所示。優(yōu)先級(jí)的幾個(gè)不同的管理方式

(注意:這一部分的內(nèi)容是將教材P180的“3.優(yōu)先級(jí)(權(quán))分類”和P181的”8.2.3中斷嵌套”綜合起來(lái)講解的)80X86系列微機(jī)通過(guò)8259A管理中斷,它對(duì)優(yōu)先級(jí)的管理有幾種不同的管理方式,下面對(duì)它們進(jìn)行展開(kāi)。(1)完全嵌套方式(固定優(yōu)先級(jí))

(2)特殊的完全嵌套方式

(3)自動(dòng)循環(huán)方式

(4)特殊循環(huán)方式(1)完全嵌套方式(固定優(yōu)先級(jí))這是單片8259A中斷系統(tǒng)中最常見(jiàn)的優(yōu)先級(jí)管理方式,IR0的優(yōu)先級(jí)最高,IR1次之,……IR7最低,同時(shí)若有多個(gè)中斷源提出中斷請(qǐng)求,級(jí)別高的先響應(yīng),若已有一個(gè)中斷服務(wù)子程序正在執(zhí)行中,這時(shí)若有其它的中斷源提出中斷請(qǐng)求,只有級(jí)別高的可以打斷級(jí)別低的從而實(shí)現(xiàn)中斷嵌套,級(jí)別低的不能打斷級(jí)別高的,同級(jí)的也不能相互打斷。優(yōu)先級(jí)一經(jīng)設(shè)定,就不能更改。(除非你重新對(duì)8259A初始化)在2片以上的8259A組成級(jí)聯(lián)的情況下,完全嵌套方式顯然不適用的,在這種情況下應(yīng)當(dāng)使用特殊完全嵌套方式。(2)特殊完全嵌套方式在完全嵌套方式的基礎(chǔ)上作了一點(diǎn)點(diǎn)的修改,這個(gè)修改同學(xué)們可能已經(jīng)猜到了,即:允許同級(jí)中斷相互打斷。例如在圖8-20的情況下,我們應(yīng)當(dāng)將主8259A的優(yōu)先級(jí)方式設(shè)置成特殊完全嵌套方式,而將從8259A的優(yōu)先級(jí)設(shè)置成完全嵌套方式。

(3)優(yōu)先級(jí)自動(dòng)循環(huán)方式上面的兩種方式的優(yōu)先級(jí)是固定不變的,即IR0最高,IR7最低,有的時(shí)候,我們認(rèn)為這不太公平,比如在一個(gè)智能搶答系統(tǒng)中,這個(gè)時(shí)候我們可以采用優(yōu)先級(jí)自動(dòng)循環(huán)方式。在這個(gè)方式中,初始的優(yōu)先級(jí)設(shè)置與完全嵌套方式一樣,即IR0最高,IR7最低,但在使用過(guò)程中這個(gè)優(yōu)先級(jí)是會(huì)變化的,如某一個(gè)中斷源的中斷請(qǐng)求被響應(yīng),那么下一次排隊(duì)時(shí),這個(gè)中斷源的級(jí)別就是最低的。而原先排在它后面一個(gè)的中斷源的優(yōu)先級(jí)就是最高的。每一次都是這樣操作的。(4)特殊優(yōu)先級(jí)自動(dòng)循環(huán)方式在上面的優(yōu)先級(jí)自動(dòng)循環(huán)方式中,初始的優(yōu)先級(jí)與完全嵌套方式完全一樣,即IR0最高,IR7最低。而在特殊優(yōu)先級(jí)自動(dòng)循環(huán)方式中,初始的優(yōu)先級(jí)可以由程序員在對(duì)中斷系統(tǒng)初始化時(shí)指定。8.2.2CPU對(duì)可屏蔽中斷的響應(yīng)這一部分的討論僅限于通過(guò)INTR引腳向CPU提出中斷請(qǐng)求的硬件可屏蔽中斷。

CPU總是在當(dāng)前正在被執(zhí)行指令的功能執(zhí)行完畢時(shí)采樣INTR引腳,若INTR引腳為高電平,則說(shuō)明有可屏蔽中斷請(qǐng)求發(fā)生,(相對(duì)于80X86計(jì)算機(jī)來(lái)說(shuō))這時(shí)若CPU的標(biāo)志寄存器的IF位被置1,則CPU必須響應(yīng)該中斷請(qǐng)求,CPU執(zhí)行一個(gè)中斷響應(yīng)周期。在這里,我們已經(jīng)得出了CPU響應(yīng)可屏蔽中斷的條件。CPU響應(yīng)可屏蔽中斷的條件得有一個(gè)中斷請(qǐng)求信號(hào)到達(dá)INTR引腳;CPU的標(biāo)志寄存器中的IF位被置1(允許中斷);當(dāng)前指令執(zhí)行完畢。2.中斷響應(yīng)時(shí)間和中斷響應(yīng)周期從CPU發(fā)出第一個(gè)中斷應(yīng)答信號(hào)INTA

,到CPU開(kāi)始執(zhí)行中斷服務(wù)程序的第一條指令前的這一段時(shí)間稱做中斷響應(yīng)時(shí)間。

●CPU從發(fā)出第一個(gè)中斷應(yīng)答信號(hào)INTA開(kāi)始直到從數(shù)據(jù)總線上獲得中斷類型碼為止的這一段時(shí)間稱做中斷響應(yīng)周期。

從CPU得到中斷類型碼開(kāi)始,到CPU執(zhí)行中斷服務(wù)程序第一條指令前的這一時(shí)刻稱中斷響應(yīng)過(guò)程。(P181)

●后面給出的中斷響應(yīng)周期圖說(shuō)明一次中斷響應(yīng)要經(jīng)歷二個(gè)總線周期,圖中的ALE信號(hào)在任何一個(gè)總線周期的第一個(gè)時(shí)鐘狀態(tài)一定是有效的高電平,但這里并不存在要鎖存的地址信息,ALE時(shí)序線在這里的作用是標(biāo)示總線周期的起止位置。在中斷響應(yīng)周期中,CPU和中斷控制器互動(dòng)過(guò)程如下:1)CPU發(fā)出第一個(gè)INTA信號(hào)在第一個(gè)INTA到達(dá)8259A相應(yīng)引腳時(shí),8259A對(duì)提出申請(qǐng)的若干個(gè)中斷源進(jìn)行判優(yōu)排序,確定優(yōu)先級(jí)最高的那一個(gè),將符合條件的中斷源的中斷類型號(hào)置入中斷類型碼寄存器。2)過(guò)一個(gè)總線周期之后,CPU發(fā)出第二個(gè)INTA信號(hào),這個(gè)信號(hào)到達(dá)8259A的相應(yīng)引腳之后,8259A將其內(nèi)部的中斷類型號(hào)寄存器中保存的中斷號(hào)通過(guò)數(shù)據(jù)總線緩沖器送到系統(tǒng)數(shù)據(jù)總線由CPU接收。中斷響應(yīng)過(guò)程中CPU完成如下工作:1)將中斷類型碼乘以4,得到中斷向量在中斷向量表的位置。2)將FLAGS寄存器內(nèi)容入棧保護(hù)。3)將FLAGS中的IF和TF清0,禁止單步中斷和任何可屏蔽中斷得到響應(yīng)。4)先后將斷點(diǎn)CS和斷點(diǎn)IP入棧5)將中斷向量表中的相應(yīng)位置的中斷服務(wù)程序的入口地址送入CS和IP寄存器,實(shí)現(xiàn)中斷服務(wù)程序的調(diào)用。這里要提請(qǐng)大家注意的是:不管是中斷響應(yīng)過(guò)程中CPU完成的工作,還是在中斷響應(yīng)周期中CPU和中斷控制器的互動(dòng)過(guò)程,這些工作與任何指令無(wú)關(guān),全是由硬件自動(dòng)完成的。8.2.4中斷向量表及其編程使用

1.中斷向量表結(jié)構(gòu)中斷向量表結(jié)構(gòu)如圖8-7所示。中斷向量表的位置在主存的前1KB,地址為00000H~003FFH,或者用0000:0000H一0000:03FFH表示。中斷向量表共存放256個(gè)中斷向量,所謂中斷向量即中斷服務(wù)程序入口地址。每個(gè)中斷向量有4個(gè)字節(jié),用來(lái)存放中斷服務(wù)程序入口地址的CS和IP。IP在低16位,IP低8位占低字節(jié),IP高8位占高字節(jié);CS在高16位,CS低8位占低字節(jié),CS高8位占高字節(jié)。中斷向量表的地址是由中斷類型碼×4得到的。這樣就建立了中斷類型碼和中斷向量表的對(duì)應(yīng)。通過(guò)中斷向量表又建立了中斷類型和中斷服務(wù)程序的關(guān)系。

2.寫(xiě)入中斷向量如何將中斷向量寫(xiě)入中斷向量表,這是最常見(jiàn)的問(wèn)題。例如,假設(shè)某用戶程序使用可屏蔽中斷IR3作為中斷請(qǐng)求通道(則相應(yīng)的中斷類型號(hào)為0BH),其中斷服務(wù)程序入口(標(biāo)號(hào))為INTR0B,寫(xiě)入中斷向量方法如下所述。(1)使用DOS調(diào)用寫(xiě)人中斷向量需要用INT21H功能中的25H子程序調(diào)用,其要求是:

①AH←25H,25H是子程序號(hào)。②AL←中斷類型號(hào)。③DS←中斷服務(wù)程序入口地址的段地址。

④DX←中斷服務(wù)程序入口地址的偏移地址。⑤INT21H.寫(xiě)入中斷向量的具體程序段為:

PUSHDS;原DS入棧保護(hù)

MOVDX,OFFSETINTR0B;

DX←入口偏移地址

MOVAX,SEGINTROBMOVDS,AX;DS←入口地址的段地址

MOVAX,250BH;AH←25H,AL←中斷類型號(hào)

INT21HPOPDS;DS出棧,恢復(fù)(2)也可以不用INT21H調(diào)用,而采用下列程序段:

CLI;關(guān)中斷MOVAX,00HMOVES,AXMOVDI,4×0BHMOVAX,OFFSETINTR0BCLDSTOSWMOVAX,SECINTROBSTOSWSTI;開(kāi)中斷(3)也可以使用傳統(tǒng)的數(shù)據(jù)傳送指令實(shí)現(xiàn):

CLI;關(guān)中斷PUSHDSMOVAX,00H;中斷向量表的段地址MOVDS,AXMOVDI,4×0BHMOVAX,OFFSETINTR0B;取中斷服務(wù)子程序的偏移地址MOV[DI],AX;寫(xiě)入中斷向量表MOVAX,SEGINTROB;取中斷服務(wù)子程序的段地址ADDDI,2MOV[DI],AX;寫(xiě)入中斷向量表POPDSSTI;開(kāi)中斷3.修改中斷向量程序員可能需要使用系統(tǒng)已有的中斷類型號(hào)做自己的事情,這時(shí)可采用如下的方法實(shí)現(xiàn):1)編寫(xiě)自己的中斷服務(wù)子程序2)自中斷向量表中取出原有的中斷向量并保存在中斷向量表外的某個(gè)位置。3)將新中斷服務(wù)程序的入口地址寫(xiě)入中斷向表。4)所要做的工作完成后,恢復(fù)原中斷向量。具體實(shí)例如后面所述。

(1)取出中斷向量并保護(hù)設(shè)中斷類型號(hào)為0BH,取出中斷向量需要使用INT21H調(diào)用的35H子程序,使用方法見(jiàn)①②③;出口參數(shù)即中斷向量在ES:BX中,見(jiàn)④⑤。

①AH←35H,35H是子程序號(hào)(DOS中斷的子功能號(hào))。②AL←中斷類型號(hào)。③INT21H.

⑷BX←取出的中斷向量的偏移地址。⑤ES←取出的中斷向量的段地址。則取出中斷向量的程序段為:MOVAH,35H;取原中斷向量MOVAL,0BH;INT21HMOVOLD_SEG,ES;保存原中斷向量MOVOLD_FFSET,BX(2)寫(xiě)人新的中斷向量其方法用INT21H功能中的25H子程序調(diào)用,如前述,此處從略。(3)恢復(fù)原中斷向量此時(shí),直接將原中斷向量寫(xiě)回到原中斷向量表位置,恢復(fù)原狀。

CLIPUSHDSMOVDX,OLD_SEGMOVDS,DX;原中斷服務(wù)程序的段地址送DSMOVDX,OLD_OFFSET;原偏移地址送DXMOVAX,250BH;功能號(hào)為25H,中斷類型碼為0BHINT21H;DOS功能調(diào)用。POPDSSTI8.382C59A中斷控制器

82C59A芯片是可編程中斷控制器(ProgramableInterruptController,PIC)。它作為中斷系統(tǒng)的核心器件,協(xié)同CPU管理可屏蔽中斷。它的基本性能主要有下列幾點(diǎn):、

1)82C59A有多種工作方式,可由編程控制字選擇,以適應(yīng)不同的應(yīng)用場(chǎng)合。

2)它允許8級(jí)中斷輸入,必要時(shí)可由幾個(gè)82C59A用級(jí)聯(lián)的方式擴(kuò)展中斷輸入至15級(jí),22級(jí),……一直至64級(jí)。

3)每一級(jí)中斷輸入由82C59A控制,可以允許中斷,也可以屏蔽中斷。

4)它用中斷請(qǐng)求和中斷響應(yīng)的方法與CPU實(shí)現(xiàn)握手(聯(lián)絡(luò))。

5)在中斷響應(yīng)周期,82C59A向CPU提供可屏蔽中斷類型碼。

6)82C59A通用性強(qiáng),可和多種CPU匹配。8.3.18259A的組成與工作原理1.組成2.82C59A的引腳根據(jù)外部引腳示意圖,說(shuō)明各個(gè)引腳的功能及用法。表中的20H應(yīng)改成偶數(shù)端口,21H應(yīng)改成奇數(shù)端口較好。3.8259A的編程結(jié)構(gòu)與其它的各接口芯片一樣,8259A內(nèi)部有許多的寄存器,其中有10寄存器可供程序員對(duì)其進(jìn)行讀寫(xiě)操作。這些寄存器都是八位的二進(jìn)制位,其中初始化控制字寄存器有4個(gè)(ICW1、ICW2、ICW3、ICW4),工作命令寄存器有3個(gè)(OCW1、OCW2、OCW3),狀態(tài)寄存器有3個(gè)(IRR、ISR、IMR)程序員可訪問(wèn)的端口寄存器有10個(gè),端口號(hào)只有2個(gè),這個(gè)問(wèn)題怎么解決?4.由CPU和8259A為硬件構(gòu)成的中斷控制系統(tǒng)的工作過(guò)程

1)CPU執(zhí)行對(duì)82C59A初始化的程序,82C59A初始化以后才能工作。所謂初始化即CPU向82C59A送初始化控制字。初始化后82C59A等待中斷源發(fā)出中斷請(qǐng)求。

2)當(dāng)82C59A的IRi接收到中斷源的中斷請(qǐng)求,即向CPU請(qǐng)求中斷(INTR)。

3)當(dāng)CPU允許INTR中斷時(shí)作出響應(yīng):中斷當(dāng)前程序執(zhí)行,執(zhí)行中斷響應(yīng)周期,發(fā)INTA信號(hào)給82C59A表示響應(yīng)中斷請(qǐng)求。

4)82C59A在INTA1的觸發(fā)下,對(duì)所有中斷源的請(qǐng)求按優(yōu)先級(jí)進(jìn)行排隊(duì),確定優(yōu)先級(jí)最高的中斷源,并使ISR的相應(yīng)位置位,表示已為該中斷請(qǐng)求服務(wù);使IRR相應(yīng)位清0,表明相應(yīng)的中斷請(qǐng)求已被響應(yīng)。當(dāng)INTA2到來(lái)時(shí),將中斷類型碼送給CPU。

5)CPU中斷控制邏輯接收82C59A送來(lái)的中斷類型碼后,一方面保護(hù)FLAG寄存器內(nèi)容和中斷斷點(diǎn),將它們壓入堆棧;另一方面將中斷類型碼左移2位得到相應(yīng)的中斷向量表的地址;(用中斷類型碼查中斷向量表,)得到中斷服務(wù)程序人口地址。

6)CPU執(zhí)行中斷服務(wù)程序,保護(hù)現(xiàn)場(chǎng),打開(kāi)中斷以允許中斷嵌套等。

7)CPU執(zhí)行中斷處理程序,處理中斷源的請(qǐng)求,如對(duì)I/O設(shè)備進(jìn)行輸入/輸出操作。

8)CPU執(zhí)行中斷服務(wù)程序,恢復(fù)現(xiàn)場(chǎng),關(guān)閉中斷以防止新的中斷,并返回?cái)帱c(diǎn)。

9)CPU繼續(xù)執(zhí)行被中斷的程序。8.3.28259A初始化控制字及其編程初始化編程

82C59A開(kāi)始工作前,用戶必須對(duì)82C59A進(jìn)行初始化編程。通過(guò)寫(xiě)入初始化命令字ICW對(duì)82C59A進(jìn)行初始化。工作編程在82C59A工作期間可以隨時(shí)向82C59A寫(xiě)入操作命令字OCW,使之按用戶設(shè)置的新的工作方式進(jìn)行工作,用戶還可以通過(guò)寫(xiě)操作命令字OCW通知8259A,下面的操作要讀取8259A中的狀態(tài)信息,以便了解其工作情況。8259初始化編程的主要任務(wù)有:①?gòu)?fù)位8259芯片(參考教材P190之82C59A的初始化工作,后面再講)。②設(shè)定中斷請(qǐng)求信號(hào)INT有效的形式,是高電平有效,還是上升沿有效。③設(shè)定8259工作在單片方式還是多片級(jí)聯(lián)方式。④設(shè)定8259管理的中斷類型號(hào)的基值,即0級(jí)IR0所對(duì)應(yīng)的中斷類型號(hào)。⑤設(shè)定各中斷優(yōu)先級(jí)的基本管理次序,(完全嵌套/特殊完全嵌套)⑥設(shè)定一次中斷處理結(jié)束時(shí)的結(jié)束方式。(1)初始化命令字ICW初始化命令字ICW最多有4個(gè)8259A在開(kāi)始工作前必須寫(xiě)入必須按照ICW1~I(xiàn)CW4順序?qū)懭隝CW1和ICW2是必須送的ICW3和ICW4由工作方式?jīng)Q定D7D6D5D4D3D2D1D0每個(gè)命令字都是8位的二進(jìn)制位。1.ICW1初始化命令字1A0=0

該命令字必須寫(xiě)入8259A的偶數(shù)端口,即寫(xiě)入時(shí)要求接到8259A地址線A0上的信號(hào)為低電平。ICW2初始化命令字2A0=1

該命令字用于設(shè)定8259A芯片各IR引腳引入的中斷源的中斷類型號(hào)。寫(xiě)入奇數(shù)端口的高5位被保存于芯片內(nèi)的中斷類型碼寄存器中的高5位,低3位總是在寫(xiě)入時(shí)被置0。中斷響應(yīng)發(fā)生時(shí),低3位由中斷控制邏輯產(chǎn)生。ICW3初化命令字3A0=1主片的格式:ICW3從片的格式A0=1ICW4初始化命令字4A0=15.8259A的初始化工作

8259A在初始化的過(guò)程中,除了按ICW各命令的要求對(duì)芯片進(jìn)行一些必要的設(shè)置以外,還自動(dòng)的將8259A芯片內(nèi)的OCW1、OCW2、OCW3等三個(gè)控制字寄存器和IRR、ISR等狀態(tài)寄存清空(8259A的復(fù)位)。這些復(fù)位操作包含有如下的一些默認(rèn)的設(shè)置:●清空IRR寄存器,使其全為0(本次初化之前所有的中斷請(qǐng)求全部無(wú)效)●清空IMR(OCW1)寄存器,使其全為0(可使用OCW1命令更改之。)●清空ISR寄存器,使其全為0,表示當(dāng)前中斷系統(tǒng)沒(méi)有為任何的中斷源服務(wù)?!袂蹇誒CW2寄存器,注意到其中的第7位為0,則為選擇固定優(yōu)先級(jí)(全嵌套)●清空OCW3寄存器,注意到其中的第5位為0,表示選擇一般屏蔽方式。*●注意到其第1位為0,如果要讀IRR或ISR要用OCW3命令設(shè)置。8259芯片的初始化流程

ICW4(A0=1)SNGL=0?ICW1的IC4=1?初始化完,準(zhǔn)備接受中斷請(qǐng)求輸入是是否ICW1(A0=0,D4=1)ICW2(A0=1)ICW3(A0=1)否例8-1有一個(gè)CPU為8088/8086的系統(tǒng)使用單個(gè)8259A作為中斷控制器,要求它工作在完全嵌套方式,非中斷自動(dòng)結(jié)束方式,非緩沖方式,使用IR2作為中斷請(qǐng)求信號(hào)輸入端,邊緣觸發(fā),設(shè)定從IR0引入的中斷源的中斷號(hào)為08H,假設(shè)8259A的兩個(gè)端口號(hào)分別為20H、21H,試編寫(xiě)其初始化程序。解:已知為單片8259A,所以初始化要寫(xiě)入的命令為ICW1、ICW2、ICW4,根據(jù)題意先給出三個(gè)ICW命令字如下:ICW1=00010011B=13H寫(xiě)入偶數(shù)端口20HICW2=00001000B=08H寫(xiě)入奇數(shù)端口21HICW4=00000001B=01H寫(xiě)入奇數(shù)端口21H初始化程序如下面所示:MOVAL,13H;寫(xiě)ICW1OUT20H,ALMOVAL,08H;寫(xiě)ICW2OUT21H,ALMOVAL,01H;寫(xiě)ICW4OUT21H,AL8.3.38259A的操作控制字及其編程操作控制字為OCW1、OCW2、OCW3三條命令,與初始化命令字不同的是,操作命令字可以在初始化命令執(zhí)行之后的任何時(shí)候使用。有的時(shí)候,我們需要?jiǎng)討B(tài)的改變8259A的一些工作設(shè)置,這個(gè)工作初始化命令無(wú)法做到,我們可以用操作命令字來(lái)實(shí)現(xiàn)。1.OCW1操作控制字(可以直觀的稱做中斷屏蔽命令字)A0=1例:某中斷系統(tǒng)中8259A的端口號(hào)為20H,21H,要求寫(xiě)一操作控制字將該8259A的中斷輸入端的低4位予以屏蔽而開(kāi)放其高4位.解:操作命令程序功能語(yǔ)句如下:MOVAL,0FHOUT21H,AL2.OCW2操作控制字A0=0注意OCW2和OCW3都使用偶數(shù)口,怎么區(qū)別?例:幾個(gè)應(yīng)用實(shí)例,設(shè)8259A的端口號(hào)為:20H,21H.MOVAL,20HOUT20H,AL中斷結(jié)束命令MOVAL,0E3H(01100011B)OUT20H,AL特殊中斷結(jié)束命令(特殊循環(huán)優(yōu)先級(jí))MOVAL,0C4HOUT20H,AL將系統(tǒng)設(shè)置為特殊循環(huán)優(yōu)級(jí),且指定最低級(jí)別為IR4引入的中斷,IR5最高.3.OCW3操作控制字A0=0應(yīng)用:例8-5將8259A設(shè)置成特殊屏蔽模式,程序段為:MOVAL,68H(01101000B)教材上的MOVAL,0CH是錯(cuò)誤的.OUT20H,AL注意:讀/寫(xiě)例8-6將82C59設(shè)置成中斷查詢方式,程序段為:MOVAL,0EH(00001110B);設(shè)置成查詢方式并允許讀IRROUT20H,AL;教材中的60H命令不對(duì),即使用0C也不對(duì)INAL,20H;讀IRR寄存器,以進(jìn)行查詢操作例8-7讀8255A的ISR的狀態(tài),程序段為:MOVAL,0FH(00001111B);教材中用0BH是錯(cuò)誤的,OUT20H,ALINAL,20H8.3.48259A的級(jí)聯(lián)使用如果一片的8259A的八級(jí)中斷不夠用,可以使用級(jí)聯(lián)的方法用多片的8259A級(jí)聯(lián)使用,最多可用9片的8259A構(gòu)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論