第 7 章 中斷及應(yīng)用技術(shù)_第1頁
第 7 章 中斷及應(yīng)用技術(shù)_第2頁
第 7 章 中斷及應(yīng)用技術(shù)_第3頁
第 7 章 中斷及應(yīng)用技術(shù)_第4頁
第 7 章 中斷及應(yīng)用技術(shù)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

微機(jī)原理與應(yīng)用第7章中斷及應(yīng)用技術(shù)7.1中斷系統(tǒng)7.28259A中斷控制器及應(yīng)用7.3中斷程序設(shè)計(jì)及Proteus仿真示例7.1.1中斷源、中斷判優(yōu)及中斷響應(yīng)過程1.中斷的基本概念(1)中斷CPU在執(zhí)行主程序的過程中,如果外界或內(nèi)部發(fā)生了緊急事件,要求CPU暫停正在運(yùn)行的主程序,轉(zhuǎn)去執(zhí)行這個(gè)緊急事件的處理程序,執(zhí)行完后再回到被停止執(zhí)行的主程序的間斷點(diǎn),恢復(fù)運(yùn)行原主程序,這一過程稱為中斷(Interrupt)。中斷結(jié)構(gòu)示意如圖7-1所示。

(2)中斷源產(chǎn)生中斷請求的事件叫中斷源。中斷源可分為內(nèi)部中斷源和外部中斷源。內(nèi)部中斷源可以是程序運(yùn)行中的某種狀態(tài)或錯(cuò)誤現(xiàn)象、程序員設(shè)定的軟件中斷等。外部中斷源可以是操作人員發(fā)出的按鍵命令、計(jì)算機(jī)突然掉電、外部設(shè)備的I/O操作請求及信號(hào)報(bào)警等。(3)中斷請求中斷請求是指中斷源向CPU發(fā)出申請中斷的信號(hào)。中斷源只有在自身未被屏蔽的情況下才能發(fā)出中斷請求。(4)可屏蔽中斷與不可屏蔽中斷所謂“屏蔽”,是指CPU拒絕響應(yīng)中斷源的中斷請求信號(hào)。凡是CPU內(nèi)部能夠“屏蔽”的中斷,均可稱為可屏蔽中斷;否則,稱為不可屏蔽中斷。中斷通常是由內(nèi)部的中斷觸發(fā)器(或中斷允許觸發(fā)器)來控制的。(5)中斷優(yōu)先級(jí)當(dāng)幾個(gè)中斷源同時(shí)向CPU請求中斷,要求CPU響應(yīng)時(shí),就存在CPU優(yōu)先響應(yīng)哪一個(gè)中斷源的問題。一般CPU應(yīng)優(yōu)先響應(yīng)最需緊急處理的中斷源。為此,需要規(guī)定各個(gè)中斷源的優(yōu)先級(jí),使CPU在多個(gè)中斷源同時(shí)發(fā)出中斷請求時(shí)能找到優(yōu)先級(jí)最高的中斷源,響應(yīng)它的請求。各中斷源的優(yōu)先級(jí)可以通過軟件查詢方式設(shè)置,也可以通過硬件邏輯電路實(shí)現(xiàn)。(6)開中斷CPU接受中斷源的中斷請求稱為開中斷,可以通過軟件設(shè)置。(7)關(guān)中斷它指CPU中斷響應(yīng)被屏蔽,不接受中斷源的中斷請求。(8)中斷響應(yīng)CPU收到中斷源的中斷請求后,并不立即響應(yīng),而是在一定時(shí)刻滿足一定條件下,才響應(yīng)中斷源的請求。(9)中斷嵌套(10)中斷處理程序中斷處理程序是中斷源要求CPU執(zhí)行的功能操作。2.中斷源識(shí)別及中斷判優(yōu)在計(jì)算機(jī)系統(tǒng)中,大多數(shù)外部設(shè)備都是通過中斷操作方式與CPU進(jìn)行信息交換的。因此,CPU必須判斷、識(shí)別哪一個(gè)中斷源發(fā)出中斷請求,才能轉(zhuǎn)去執(zhí)行相應(yīng)的中斷處理程序。中斷源識(shí)別包括兩個(gè)方面:確定中斷源和找到中斷處理程序的首地址。下面給出解決問題的兩種方案。(1)查詢中斷查詢中斷采用硬件電路與軟件程序查詢相結(jié)合的方式,確定中斷源及中斷處理程序的入口地址。查詢中斷的硬件原理示意如圖7-3所示。查詢方式程序如下:INAL,IPORT;從輸入接口讀取D0~D3TESTAL,01H;是設(shè)備A請求嗎?JNZA;是,轉(zhuǎn)設(shè)備A中斷處理程序TESTAL,02H;否,是設(shè)備B請求嗎?JNZB;是,轉(zhuǎn)設(shè)備B中斷處理程序TESTAL,04H;否,是設(shè)備C請求嗎?JNZC;是,轉(zhuǎn)設(shè)備C中斷處理程序TESTAL,08H;否,是設(shè)備D請求嗎?JNZD;是,轉(zhuǎn)設(shè)備D中斷處理程序......A:...;設(shè)備A中斷處理程序入口...IRET;中斷返回B:...;設(shè)備B中斷處理程序入口...IRET;中斷返回C:...;設(shè)備C中斷處理程序入口...IRET;中斷返回D:...;設(shè)備D中斷處理程序入口IRET;中斷返回3.中斷過程中斷過程主要包括中斷請求、中斷判優(yōu)、中斷響應(yīng)、中斷處理(執(zhí)行中斷處理程序)、中斷返回5個(gè)過程。下面主要介紹中斷響應(yīng)和中斷處理。(1)CPU響應(yīng)中斷的條件CPU在接收到中斷請求信號(hào)后,并不是立即響應(yīng)中斷,CPU響應(yīng)中斷的條件如下。①有中斷請求信號(hào)。②中斷請求沒有被屏蔽。③中斷是開放的,即允許CPU響應(yīng)中斷。④CPU在現(xiàn)行指令執(zhí)行結(jié)束時(shí)響應(yīng)中斷。(2)中斷響應(yīng)過程中斷響應(yīng)過程是指在CPU響應(yīng)中斷后的處理過程。對(duì)于單級(jí)中斷系統(tǒng),其中斷響應(yīng)的過程如下。①關(guān)中斷,即CPU在中斷響應(yīng)過程中不再響應(yīng)其他中斷源的中斷(編程實(shí)現(xiàn))。②保存程序斷點(diǎn),即將被中斷的程序的斷點(diǎn)地址壓入堆棧(系統(tǒng)實(shí)現(xiàn))。③保護(hù)現(xiàn)場,即將斷點(diǎn)時(shí)的數(shù)據(jù)(如寄存器AX、BX等)壓入堆棧(編程實(shí)現(xiàn))。④給出中斷處理程序入口地址,并轉(zhuǎn)入該服務(wù)程序(編程實(shí)現(xiàn))。⑤恢復(fù)現(xiàn)場,即將堆棧數(shù)據(jù)彈出至原來位置(編程實(shí)現(xiàn))。⑥中斷返回,即返回?cái)帱c(diǎn)處繼續(xù)執(zhí)行原來程序(系統(tǒng)實(shí)現(xiàn))。7.1.280x86中斷系統(tǒng)1.中斷源8086中斷系統(tǒng)如圖7-6所示。其中斷源分為兩大類:內(nèi)部中斷和外部中斷(1)內(nèi)部中斷由CPU本身啟動(dòng)或執(zhí)行中斷指令而產(chǎn)生的中斷稱為內(nèi)部中斷。內(nèi)部中斷是不可屏蔽中斷,其中斷源有兩種情況:執(zhí)行軟件中斷指令(INTn)產(chǎn)生的中斷;由硬件自動(dòng)產(chǎn)生中斷請求,然后調(diào)用中斷指令產(chǎn)生的中斷。①溢出中斷(硬件中斷):當(dāng)運(yùn)算結(jié)果超出允許范圍置OF=1時(shí),由硬件自動(dòng)執(zhí)行溢出中斷指令(INT0),產(chǎn)生一個(gè)中斷類型號(hào)為4的中斷(中斷類型號(hào)在下文介紹)。②除法出錯(cuò)中斷(硬件中斷):當(dāng)進(jìn)行除法運(yùn)算時(shí),若除數(shù)為0稱作除法出錯(cuò)。該事件相當(dāng)于一個(gè)中斷源,由硬件自動(dòng)產(chǎn)生一個(gè)中斷類型號(hào)為0的中斷。③單步中斷(硬件中斷):當(dāng)標(biāo)志位TF置“1”時(shí),8086處于單步執(zhí)行指令工作方式,這時(shí)CPU在每條指令執(zhí)行后由硬件自動(dòng)產(chǎn)生一個(gè)中斷類型號(hào)為1的中斷,單步方式主要用于程序調(diào)試。8086沒有直接對(duì)標(biāo)志位TF進(jìn)行操作的指令,需要通過堆棧操作改變TF的狀態(tài)。標(biāo)志位TF置“1”(單步執(zhí)行中斷)的程序段如下:PUSHF;標(biāo)志寄存器FLAGS入棧POPAX;AX←FLAGS內(nèi)容ORAX,0100H;使AX(即標(biāo)志寄存器)的D8=1,其余位不變PUSHAX;AX入棧POPF;FLAGS寄存器←AX標(biāo)志位TF清“0”(禁止單步中斷)的程序段如下:PUSHF;標(biāo)志寄存器FLAGS入棧POPAX;AX←FLAGS內(nèi)容ANDAX,0FEFFH;使AX(即標(biāo)志寄存器)的D8=0,其余位不變PUSHAX;AX入棧POPF;FLAGS寄存器←AX④軟件中斷:由指令I(lǐng)NTn引起的中斷,在程序中可直接引用。軟件中斷進(jìn)一步分為BIOS中斷和DOS中斷

(2)外部中斷外部中斷是由外部設(shè)備作為中斷源發(fā)出請求信號(hào)而引起的中斷。①可屏蔽中斷。在80x86系統(tǒng)中,可屏蔽中斷由外部設(shè)備的中斷請求信號(hào)通過中斷控制器8259輸出高電平觸發(fā)CPU引腳INTR。當(dāng)中斷允許標(biāo)志位IF=1(即CPU開中斷)時(shí),CPU才能響應(yīng)INTR的中斷請求。如果IF=0(即關(guān)中斷),即使INTR端有中斷請求信號(hào),CPU也不會(huì)響應(yīng)。這種情況稱為中斷屏蔽。②不可屏蔽中斷。不可屏蔽中斷是CPU必須響應(yīng)的中斷,該中斷不受中斷允許標(biāo)志位IF限制,不可屏蔽中斷由中斷源的中斷請求信號(hào)以電壓正跳變(即邊沿觸發(fā))方式觸發(fā)CPU引腳NMI。這種中斷一旦產(chǎn)生,在CPU內(nèi)部直接產(chǎn)生中斷類型號(hào)為2的中斷。2.中斷向量表由以上內(nèi)容可知,計(jì)算機(jī)系統(tǒng)中的中斷源既有系統(tǒng)引起的中斷,也有外部設(shè)備引起的中斷;既有軟件中斷,也有硬件中斷;既有突發(fā)事件中斷,也有一般端口請求中斷;既有可屏蔽中斷,也有不可屏蔽中斷等。8086對(duì)中斷源的管理有如下內(nèi)容。(1)中斷類型號(hào)8086系統(tǒng)提供支持最多256(0~0FFH)種不同的中斷,為了便于管理和編程,256種中斷分別以0~255的序號(hào)表示中斷的類型號(hào)(如除法出錯(cuò)為0號(hào)中斷,NMI為2號(hào)中斷等)。(2)中斷向量對(duì)于每一個(gè)在用的中斷源,或者說每一種類型的中斷,都必須有相應(yīng)的中斷處理程序,中斷處理程序的入口地址稱為中斷向量。每個(gè)中斷向量占用存儲(chǔ)單元4字節(jié),前兩字節(jié)(低位在前,高位在后)存儲(chǔ)中斷處理程序入口地址的16位代碼段的段內(nèi)地址(即偏移量IP),后兩字節(jié)(低位在前,高位在后)存儲(chǔ)中斷處理程序入口地址的16位代碼段的段地址(即段地址CS)。(3)中斷向量表按照中斷類型號(hào)由小到大的順序,把256個(gè)中斷的中斷向量集中地存放在連續(xù)的存儲(chǔ)空間中,這個(gè)存儲(chǔ)空間稱為中斷向量表。中斷向量表(又稱中斷指針表或中斷地址表)是存放中斷處理程序入口地址的表格,它固定存放在存儲(chǔ)器的地址為0000:0000~0000:03FFH的低端空間,共256×4=1024字節(jié),8086系統(tǒng)中斷向量表如圖7-7所示。(4)中斷類型號(hào)n與中斷向量的關(guān)系中斷類型號(hào)n與中斷向量(起始地址)的關(guān)系式:中斷向量(起始地址)=n×4。(5)中斷向量送入CS:IP中斷源向CPU發(fā)出中斷請求并給出中斷類型號(hào)n,由于每個(gè)中斷向量占用4個(gè)字節(jié)單元,故中斷類型號(hào)為n的中斷向量在中斷向量表中存儲(chǔ)單元的起始地址為n×4,CPU找到該地址對(duì)應(yīng)連續(xù)的4個(gè)內(nèi)存字節(jié)單元,將前兩字節(jié)內(nèi)容送入指令指針寄存器IP,后兩字節(jié)單元內(nèi)容送入代碼段寄存器CS后,由此轉(zhuǎn)入中斷處理程序?!纠?-1】某計(jì)算機(jī)中,中斷類型號(hào)n=09H的中斷處理程序的入口地址為B8A8H:2000H,分析這個(gè)入口地址CPU是如何得到的。

中斷向量地址應(yīng)為n×4=09H×4=24H,以該地址開始的連續(xù)4個(gè)存儲(chǔ)單元(0024H~0027H)的內(nèi)容為中斷向量,如圖7-8所示。CPU找到該地址對(duì)應(yīng)的4個(gè)內(nèi)存字節(jié)單元,將前兩字節(jié)單元0025H~0024H的內(nèi)容2000H送入指令指針寄存器IP、后兩字節(jié)單元0027H~0026H的內(nèi)容B8A8H送入代碼段寄存器CS,CPU由此轉(zhuǎn)入中斷處理程序。

3.80x86中斷描述符80386~80586系統(tǒng)是采用中斷描述符來管理各級(jí)中斷的。中斷描述符最多有256個(gè),對(duì)應(yīng)256個(gè)中斷源。若CPU工作在實(shí)地址模式,中斷描述符表就是8086系統(tǒng)的中斷向量表,其結(jié)構(gòu)、內(nèi)存位置及操作與前述基本相同。若CPU工作在保護(hù)模式,中斷描述符表可位于內(nèi)存的任何空間,它的起始地址可寫入CPU內(nèi)部的中斷描述符寄存器IDIR。IDIR的內(nèi)容包括起始基址及范圍,有了它和中斷向量,即可獲取相應(yīng)的中斷描述符。

4.中斷類型號(hào)的獲取8086在響應(yīng)中斷后,必須獲取該中斷的中斷類型號(hào),然后在中斷向量表中得到中斷處理程序的入口地址并送入CS:IP。(1)發(fā)生內(nèi)部中斷和異常處理及非屏蔽中斷時(shí),系統(tǒng)自動(dòng)產(chǎn)生中斷類型號(hào)并轉(zhuǎn)入相應(yīng)的中斷處理程序入口。(2)對(duì)于軟件中斷INTn指令,指令中n即為中斷類型號(hào)。(3)可屏蔽中斷由CPU的引腳INTR引入,其中斷類型號(hào)由中斷控制器芯片8259(下節(jié)介紹)在初始化編程時(shí)確定。8086系統(tǒng)中斷類型的優(yōu)先級(jí)按從高到低可分為:內(nèi)部中斷和異?!浖袛唷瞧帘沃袛唷獠靠善帘沃袛唷!纠?-3】某中斷源使用類型號(hào)n=10H,其中斷處理程序的地址(中斷向量)為20A0H:1234H,指出該中斷向量在中斷向量表中應(yīng)如何存放并編寫程序段。由于10H×4=40H,在中斷向量表地址為0040H~0043H存儲(chǔ)單元中,前兩個(gè)單元0040H和0041H應(yīng)存放地址偏移量1234H,后兩個(gè)單元0042H和0043H應(yīng)存放段地址20A0H,如圖7-9所示。CLI;關(guān)中斷MOVAX,0MOVES,AX;置附加段基址為0MOVDI,10H*4;置附加段偏移地址到DIMOVAX,1234H;置中斷程序首地址的偏移量到AXCLDSTOSW;填偏移量存放到中斷地址表MOVAX,20A0H;置中斷程序的段基址到AXSTOSW;填段基址存放到中斷地址表STI;開中斷7.28259A中斷控制器及應(yīng)用一般情況下,外部設(shè)備中斷請求必須通過8086僅有的可屏蔽的中斷請求輸入端INTR引入。為了使多個(gè)外部設(shè)備能以中斷方式與CPU進(jìn)行數(shù)據(jù)交換,需要判斷各個(gè)外部設(shè)備的優(yōu)先級(jí)、設(shè)定其中斷類型號(hào)等。因而,必須設(shè)計(jì)硬件中斷控制接口電路。80x86系統(tǒng)采用專用的中斷控制器芯片8259A實(shí)現(xiàn)外部中斷與CPU的接口功能。7.2.18259A中斷控制器邏輯功能8259A是一種可編程的中斷控制器芯片,它的主要功能如下。①1片8259A可管理8個(gè)中斷請求,具有8級(jí)優(yōu)先級(jí)控制??梢酝ㄟ^對(duì)8259A編程進(jìn)行指定,并把當(dāng)前優(yōu)先級(jí)最高的中斷請求送到CPU的INTR端。②通過多個(gè)8259A的級(jí)聯(lián),最高可擴(kuò)展到允許9片8259級(jí)聯(lián)、64級(jí)中斷請求優(yōu)先級(jí)管理。③對(duì)任何一級(jí)中斷可實(shí)現(xiàn)單獨(dú)屏蔽。④當(dāng)CPU響應(yīng)中斷時(shí),向CPU提供相應(yīng)中斷源的中斷向量。⑤具有多種優(yōu)先級(jí)管理模式,且這些管理模式大多能動(dòng)態(tài)改變。7.2.28259A內(nèi)部結(jié)構(gòu)及引腳功能8259A由控制邏輯電路、中斷請求寄存器IRR、優(yōu)先級(jí)分析器PR、中斷服務(wù)寄存器ISR、中斷屏蔽寄存器IMR、數(shù)據(jù)總線緩沖器、讀/寫控制邏輯電路和級(jí)聯(lián)緩沖器/比較器組成,如圖7-10所示。1.數(shù)據(jù)總線緩沖器及相關(guān)引腳數(shù)據(jù)總線緩沖器為8位三態(tài)緩沖器,相關(guān)引腳D0~D7為雙向數(shù)據(jù)線,與CPU的數(shù)據(jù)總線連接,用作8259A與CPU交換數(shù)據(jù)信息的通道。與8259A相關(guān)的數(shù)據(jù)信息主要有:編程實(shí)現(xiàn)輸入給8259A的初始化控制字、操作命令字及讀出中斷類型號(hào)等的8259A狀態(tài)信息。2.讀/寫控制邏輯電路及相關(guān)引腳CS:片選輸入信號(hào),低電平有效。一般由CPU地址線經(jīng)譯碼輸出作為片選控制信號(hào)。A0:片內(nèi)端口選擇。RD:讀信號(hào)線,輸入、低電平有效。

WR:寫信號(hào)線,輸入、低電平有效,它與CPU的寫控制信號(hào)WR連接。3.級(jí)聯(lián)緩沖器/比較器及相關(guān)引腳CAS0~CAS2:級(jí)聯(lián)信號(hào)線,在主從式連接的多片8259A組成的中斷控制器中,該信號(hào)線在主片中作為輸出,在從片中作為輸入。SP/EN:主從片選擇/緩沖器允許信號(hào)線、雙向。作為輸入信號(hào)時(shí),若為高電平,則該片為主片,否則該片為從片;作為輸出信號(hào)時(shí),用于控制數(shù)據(jù)總線緩沖器的接收和發(fā)送的控制。4.中斷請求寄存器IRRIRR用來存放從外部設(shè)備發(fā)出的8個(gè)中斷請求信號(hào)IRQ0~I(xiàn)RQ7(或表示為IR0~I(xiàn)R7),輸入、高電平有效。5.中斷屏蔽寄存器IMRIMR用來存放CPU送來的各級(jí)中斷請求的屏蔽信號(hào),高電平為有效屏蔽信號(hào)。6.優(yōu)先級(jí)分析器PRPR用來管理和識(shí)別各個(gè)中斷源的優(yōu)先級(jí)7.控制邏輯電路及相關(guān)引腳控制邏輯電路的主要功能是根據(jù)IRR和PR的判定結(jié)果,發(fā)出控制命令。INT:8259A向CPU發(fā)出的中斷請求信號(hào),輸出、高電平有效。該信號(hào)與CPU的可屏蔽中斷輸入端INTR連接,以實(shí)現(xiàn)把IRQ0~I(xiàn)RQ7上的最高優(yōu)先級(jí)請求傳送到CPU的INTR引腳。INTA:接收CPU響應(yīng)中斷應(yīng)答信號(hào),輸入、低電平有效。與CPU輸出的中斷應(yīng)答信號(hào)INTA連接。該信號(hào)為連續(xù)的兩個(gè)負(fù)脈沖,在第二個(gè)負(fù)脈沖出現(xiàn)后,8259A自動(dòng)將所響應(yīng)的外部中斷源的中斷類型號(hào)送入數(shù)據(jù)線D0~D7,由CPU讀取后,執(zhí)行相應(yīng)的中斷處理程序??刂七壿嬰娐穬?nèi)部含有7個(gè)可以編程的寄存器,其中ICW1~I(xiàn)CW3用來存放8259A的工作方式字;OCW1~OCW3用來存放操作命令字。8.中斷服務(wù)寄存器ISRISR用來存放CPU正在處理的中斷的狀態(tài)。ISR中的D0~D7位分別對(duì)應(yīng)8級(jí)中斷請求輸入端IRQ0~I(xiàn)RQ7,若某一位為1,則表示當(dāng)前CPU正在處理相應(yīng)位的中斷請求;若有多位為1,則表示有多個(gè)中斷請求信號(hào)。CPU根據(jù)每個(gè)中斷源的優(yōu)先級(jí),進(jìn)入中斷嵌套狀態(tài)。7.2.38259A的工作過程①使用8259A之前,必須對(duì)8259A進(jìn)行初始化。由CPU向8259A寫入若干初始化命令,以規(guī)定8259A的工作狀態(tài)等。完成初始化后,8259A按完全嵌套方式工作(IRQ0優(yōu)先級(jí)最高,并依次遞減)。②外部的中斷請求由輸入端IRQ0~I(xiàn)RQ7進(jìn)入8259A,一個(gè)或多個(gè)中斷請求(IRQ0~I(xiàn)RQ7)變?yōu)楦唠娖?,使IRR相應(yīng)位置“1”,表示有中斷請求。③中斷請求鎖存在IRR中,并與IMR進(jìn)行“與”操作,即把有中斷請求信號(hào)并且未被屏蔽的輸入端送入判優(yōu)電路。④優(yōu)先級(jí)判定電路選出優(yōu)先級(jí)最高的中斷請求位,并對(duì)中斷服務(wù)寄存器ISR的相應(yīng)位置位。⑤控制電路接受該中斷請求,通過INT引腳向CPU發(fā)出中斷請求信號(hào)。⑥如果此時(shí)CPU中的IF=1,即CPU開中斷接受中斷請求,則在CPU完成當(dāng)前指令后進(jìn)入中斷響應(yīng)過程,CPU以連續(xù)兩個(gè)負(fù)脈沖(中斷響應(yīng)INTA周期)作為應(yīng)答。⑦若8259A是主控的中斷控制器,則在INTA周期的第一個(gè)負(fù)脈沖到來時(shí),把級(jí)聯(lián)地址從CAS2~CAS0輸出;若8259A單獨(dú)使用時(shí),或是由CAS2~CAS0選擇的從控制器,在第二個(gè)負(fù)脈沖到來時(shí),將被響應(yīng)中斷源的8位中斷類型號(hào)輸出給數(shù)據(jù)總線。⑧CPU讀取中斷類型號(hào),在中斷向量表中找到中斷向量,轉(zhuǎn)移到相應(yīng)的中斷處理程序入口執(zhí)行。如果要在8259A工作過程中改變它的操作方式,則必須在主程序或中斷處理程序中向8259A發(fā)出操作命令字。⑨中斷結(jié)束,CPU向8259A輸出中斷結(jié)束(EOI)指令,使IRR復(fù)位。7.2.48259A編程8259A有兩種寄存器可以通過編程實(shí)現(xiàn)對(duì)8259A的初始化設(shè)置和工作方式的選擇。(1)一種是初始化命令字寄存器(ICW1~I(xiàn)CW4),用于存放CPU通過指令送入8259A的初始化命令字。各寄存器的功能如下。ICW1:決定8259A的工作方式。ICW2:設(shè)定可屏蔽中斷的中斷類型號(hào)(高5位)。ICW3:僅用于級(jí)聯(lián)方式。ICW4:設(shè)定8259A的優(yōu)先級(jí)管理方式、中斷結(jié)束方式等。(2)另一種是操作控制字寄存器(OCW1~OCW3),用于在初始化編程后,存放CPU在系統(tǒng)運(yùn)行中通過指令送入8259A的工作命令字。各寄存器的功能如下。OCW1:用來設(shè)置中斷源的屏蔽狀態(tài)。OCW2:用來設(shè)置中斷結(jié)束的方式和修改為循環(huán)方式的中斷優(yōu)先級(jí)管理方式。OCW3:用來設(shè)置特殊屏蔽方式和查詢方式,并用來控制8259A內(nèi)部狀態(tài)字IRR、ISR的讀出。1.初始化命令字8259A在開始工作之前,必須進(jìn)行初始化編程。初始化編程主要包括以下內(nèi)容。①設(shè)置中斷請求的觸發(fā)方式(電平觸發(fā)或邊沿觸發(fā))。②設(shè)置8259A是單片工作方式還是多片級(jí)聯(lián)工作方式,是主片還是從片。③設(shè)置中斷源的中斷類型號(hào)(只需設(shè)置IRQ0的中斷類型號(hào))。初始化命令字由初始化程序填寫,在整個(gè)系統(tǒng)工作中保持不變。8259A共有4個(gè)初始化命令字,它們必須按順序填寫,且ICW1寫在8259A偶地址端口中,其余3個(gè)寫入8259A奇地址端口中。(1)ICW1——芯片控制初始化命令字ICW1寫在偶地址端口(8259A的A0=0時(shí)),在IBMPC/XT中,該寄存器的地址定義為20H。其格式和各位功能如下。D0位(IC4):用來表示后面是否要設(shè)置ICW4。該位為1時(shí),表示要寫入ICW4命令字;該位為0時(shí),則不設(shè)置ICW4。由于8086系統(tǒng)必須對(duì)ICW4進(jìn)行設(shè)置,故在8086系統(tǒng)中,D0=1。D1位(SNGL):用來表示本片8259A是否與其他片級(jí)聯(lián)。該位為1時(shí),表示系統(tǒng)僅用1片8259A;該位為0時(shí),表示系統(tǒng)用多片8259A組成級(jí)聯(lián)方式。D2位(ADI):在8086系統(tǒng)中,該位不起作用,可任意選擇為1或0。D3位(LTIM):用來設(shè)定中斷請求信號(hào)觸發(fā)方式。若LTIM=0,表示中斷請求信號(hào)為上升沿觸發(fā)有效;若LTIM=1,表示中斷請求信號(hào)為高電平觸發(fā)有效。D4位:命令字ICW1的標(biāo)志位。由于ICW1和下面將要介紹的OCW2和OCW3共用片內(nèi)偶地址(即8259片內(nèi)A0=0),因此D4位用來區(qū)分是寫入ICW1還是寫入OCW2和OCW3。若D4=1,表示將初始化命令字寫入ICW1。D7~D5位:系統(tǒng)中未使用,可任意選擇為1或0。(2)ICW2——中斷類型號(hào)初始化命令字ICW2用來設(shè)置與外部中斷源相應(yīng)的中斷類型號(hào),它寫入8259A的奇地址(8259A的A0=1)。在IBMPC/XT機(jī)中,該寄存器的地址定義為21H。其格式與各位功能如下。D7~D3位:用來存放由CPU通過編程送入的中斷類型號(hào)的高5位,對(duì)于IRQ0~I(xiàn)RQ7每一個(gè)中斷源的中斷類型號(hào)來說,高5位是相同的。D2~D0位:用來產(chǎn)生8種代碼,分別表示IRQ0~I(xiàn)RQ7,每一個(gè)中斷源的中斷類型號(hào)的低3位由中斷請求引腳決定,IRQ0~I(xiàn)RQ7各引腳分別對(duì)應(yīng)中斷類型號(hào)的低3位,為000~111。(3)ICW3——主/從片初始化命令字當(dāng)ICW1的D1=0,表示多片8259A級(jí)聯(lián)時(shí),初始化ICW3才有意義,它寫入8259A的奇地址(8259A的A0=1)。在IBMPC/XT機(jī)中,該寄存器的地址定義為21H。①8259A作為主片時(shí)ICW3的格式如下。②8259A作為從片時(shí)ICW3的格式如下。(4)ICW4——控制初始化命令字只有當(dāng)ICW1的D0位為1時(shí)才設(shè)置ICW4。ICW4寫入奇地址。ICW4格式如下。D7~D5位均為0,作為ICW4的標(biāo)志碼。D4位(SFNM):表示特殊完全嵌套方式,D4=1,表示8259A工作在特殊完全嵌套方式;D4=0,表示工作在正常完全嵌套方式。D3位(BUF):該位為1,表示采用緩沖器方式;為0表示采用非緩沖器方式。D2位(M/S):用于確定主從控制器,該位為1,表示8259A為主控制器;為0表示8259A為從控制器。單片8259A工作時(shí),該位不起作用。D1位(AEO/I):用于確定中斷結(jié)束方式,該位為1,表示8259A工作在自動(dòng)中斷結(jié)束(AEOI)方式;該位為0,表示工作在非自動(dòng)中斷結(jié)束方式。D0位(μPM):用于確定CPU類型。該位為1,表示8086/8088系統(tǒng);為0表示8080/8085系統(tǒng)。2.操作命令字CPU向8259A寫完初始化命令字后,8259A就可以開始工作,負(fù)責(zé)處理I/O設(shè)備向CPU提出的中斷請求。為了進(jìn)一步提高8259A的中斷處理能力,需要改變8259A的工作狀態(tài),CPU向8259A發(fā)出一些控制命令,這些控制命令稱為操作命令字,它們存放在寄存器OCW1、OCW2和OCW3中。(1)OCW1——中斷屏蔽操作命令字(8位D7~D0)OCW1寫入8259A奇地址端口,用來設(shè)置或清除IMR各位,D7~D0分別對(duì)應(yīng)IRQ7~I(xiàn)RQ0的中斷屏蔽位。若Di=1,則相應(yīng)的IRQi的中斷請求被屏蔽;若Di=0,則允許IRQi產(chǎn)生中斷。(2)OCW2——設(shè)置優(yōu)先級(jí)循環(huán)方式和中斷結(jié)束方式的操作命令字OCW2寫入偶地址端口,其格式如下(3)OCW3——對(duì)特殊屏蔽方式、中斷查詢方式和內(nèi)部寄存器的設(shè)置操作命令字OCW3寫入偶地址端口,其格式如下。8259A有兩種屏蔽方式:正常屏蔽方式和特殊屏蔽方式。正常屏蔽方式指當(dāng)CPU正在為某一優(yōu)先級(jí)的I/O設(shè)備服務(wù)時(shí),可接受優(yōu)先級(jí)比該I/O設(shè)備高的中斷請求;特殊屏蔽方式指8259A能否接受其他I/O設(shè)備的中斷請求,取決于IMR中相應(yīng)的值(為0時(shí),8259A才能接受相應(yīng)的中斷請求)。D6位(ESMM):特殊屏蔽方式允許位。D6=1時(shí),SMM位有效;D6=0時(shí),SMM無效。D5位(SMM):特殊屏蔽方式位。當(dāng)D5=1時(shí),任一中斷請求都可被響應(yīng);當(dāng)D5=0時(shí),低級(jí)或同級(jí)中斷請求被禁止。D2位(P):查詢命令位。D2=1時(shí),可使8259A與CPU的通信方式由中斷方式改為中斷查詢方式。在8259A初始化及對(duì)寄存器進(jìn)行讀寫操作時(shí)應(yīng)注意以下方面。①初始化命令字對(duì)ICW1、ICW2必須寫入,ICW3、ICW4根據(jù)需要確定是否寫入。寫入時(shí),ICW1~I(xiàn)CW4必須按順序設(shè)定,在寫入偶地址ICW1后,下一個(gè)寫入奇地址的命令字必然是ICW2,且在整個(gè)工作過程中保持不變。②A0=0(片內(nèi)偶地址):寫入的有ICW1(標(biāo)志碼D4=1)、OCW2(標(biāo)志碼D4D3=00)、OCW3(標(biāo)志碼D4D3=01),由于片內(nèi)地址相同,因此由標(biāo)志碼區(qū)別;讀出的有IRR、ISR(由OCW3的D1D0位區(qū)別)。③A0=1(片內(nèi)奇地址):寫入的有ICW2、ICW3、ICW4、OCW1(OCW1只能在初始化以后,程序運(yùn)行過程中寫入,以此區(qū)別);讀出的有IMR?!纠?-4】設(shè)8259A的偶地址端口為80H、奇地址端口為81H,單片使用、上升沿觸發(fā)。初始化程序如下。MOVAL,13H;設(shè)置ICW1OUT80H,ALMOVAL,60H;設(shè)置ICW2(中斷類型號(hào)為60H~67H)OUT81,AL7.2.58259A在IBMPC中的應(yīng)用實(shí)例1.8259A在IBMPC/XT中的應(yīng)用在IBMPC/XT中,使用1片8259A可管理外部8級(jí)可屏蔽中斷,參閱圖7-10中的8259A主片部分。系統(tǒng)分配給8259A的端口地址為20H和21H,普通中斷結(jié)束方式,采用固定優(yōu)先級(jí)。8級(jí)中斷源IRQ0~I(xiàn)RQ7對(duì)應(yīng)的中斷類型號(hào)為08H~0FH。IBMPC/XT外部中斷源見表7-2。8259A在IBMPC/XT的初始化程序如下。MOVAL,13HOUT20H,AL;寫入ICW1MOVAL,08HOUT21H,AL;寫入ICW2MOVAL,09HOUT21H,AL;寫入ICW48259A的IRQ2系統(tǒng)未使用,可留給用戶使用。當(dāng)系統(tǒng)有較多的中斷源時(shí),可利用IRQ2擴(kuò)展連接另一片8259A2.8259A在IBMPC/AT中的應(yīng)用在IBMPC/AT中,使用2片8259A可管理外部15級(jí)可屏蔽中斷,其中斷控制系統(tǒng)如圖7-11所示。系統(tǒng)分配給主片8259A的端口地址為20H和21H,分配給從片8259A的端口地址為A0H和A1H;主片8259A的IRQ0~I(xiàn)RQ7對(duì)應(yīng)的中斷類型號(hào)為08H~0FH,從片8259A的IRQ0~I(xiàn)RQ7對(duì)應(yīng)的中斷類型號(hào)為70H~77H;從片的INT接主片的IRQ2,主片和從片均采用邊沿觸發(fā);采用全嵌套優(yōu)先級(jí)排列方式,采用非緩沖器方式,主片SP接+5V電源,從片SP接地。;初始化8259A主片MOVAL,11H;ICW1級(jí)聯(lián),需設(shè)ICW3OUT20H,ALJMPSHORL$+2;I/O端口操作延時(shí)MOVAL,08H;ICW2設(shè)置起始中斷類型號(hào)08HOUT21H,ALJMPSHORL$+2MOVAL,04H;ICW3,主片IRQ2接從片INTOUT21H,ALJMPSHORL$+2MOVAL,11H;ICW4OUT21H,AL;初始化8259A從片MOVAL,11H;ICW1OUT0A0H,ALJMPSHORL$+2;I/O端口延時(shí)操作MOVAL,70H;ICW2設(shè)置起始中斷類型號(hào)為70HOUT0A1H,ALMOVAL,02H;ICW3從片INT接主片IRQ2OUT0A1H,ALJMPSHORL$+2MOVAL,01H;ICW4OUT0A1H,AL3.8259A應(yīng)用編程示例

已知主機(jī)啟動(dòng)時(shí)8259A中斷類型號(hào)的高5位已初始化為00001,故IRQ0的中斷類型號(hào)為08H(00001000B);8259A的中斷結(jié)束方式初始化為非自動(dòng)結(jié)束,即要在服務(wù)程序中發(fā)送中斷結(jié)束命令;8259A的端口地址為20H和21H。8259A的IRQ0來自定時(shí)器8253的通道0,每隔55ms產(chǎn)生一次中斷,實(shí)

溫馨提示

  • 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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論