微型計(jì)算機(jī)原理及應(yīng)用:第8章 中斷_第1頁
微型計(jì)算機(jī)原理及應(yīng)用:第8章 中斷_第2頁
微型計(jì)算機(jī)原理及應(yīng)用:第8章 中斷_第3頁
微型計(jì)算機(jī)原理及應(yīng)用:第8章 中斷_第4頁
微型計(jì)算機(jī)原理及應(yīng)用:第8章 中斷_第5頁
已閱讀5頁,還剩112頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第 8 章 中斷 8.1 引言8.2 最簡單的中斷情況8.3 中斷優(yōu)先權(quán)8.4 8086微處理器的中斷方式8.5 中斷控制器Intel8259A12內(nèi)容重點(diǎn)中斷的基本概念中斷、中斷源中斷處理過程中斷優(yōu)先權(quán)8086/8088中斷系統(tǒng)中斷指令中斷分類中斷向量表中斷處理過程中斷控制器8259A主要功能工作過程/工作方式寄存器功能8259A編程 8.1 引言8.1.1 為什么要用中斷 當(dāng)CPU與外設(shè)交換信息時(shí),若用查詢的方式,則CPU就要浪費(fèi)很多時(shí)間去等待外設(shè)。這樣就存在快速CPU與慢速外設(shè)之間的矛盾,這也是計(jì)算機(jī)在發(fā)展過程中遇到的嚴(yán)重問題之一。為了解決這個(gè)問題,一方面要提高外設(shè)的工作速度;另一方面發(fā)

2、展了中斷的概念。實(shí)現(xiàn)了中斷,就有以下好處: 1.同步操作有了中斷功能,就可以使CPU和外設(shè)同時(shí)工作。CPU在啟動(dòng)外設(shè)工作后,就繼續(xù)執(zhí)行主程序,同時(shí)外設(shè)也在工作,當(dāng)外設(shè)把數(shù)據(jù)準(zhǔn)備好后,發(fā)出中斷申請(qǐng),請(qǐng)求CPU中斷它的程序,執(zhí)行輸入或輸出(中斷處理),處理完以后,CPU恢復(fù)執(zhí)行主程序,外設(shè)也繼續(xù)工作。而且有了中斷功能,CPU可命令多個(gè)外設(shè)同時(shí)工作。這樣大大提高了CPU的利用率,也提高了輸入輸出的速度。32.實(shí)現(xiàn)實(shí)時(shí)處理當(dāng)計(jì)算機(jī)用于實(shí)時(shí)控制時(shí),中斷是一個(gè)十分重要的功能?,F(xiàn)場的各個(gè)參數(shù)、信息,可在任何時(shí)間發(fā)出中斷申請(qǐng),要求CPU處理;CPU則可以馬上響應(yīng)(若中斷是開放的話)并加以處理。這樣的及時(shí)處理在

3、查詢的工作方式下是做不到的。3.故障處理計(jì)算機(jī)在運(yùn)行過程中,往往會(huì)出現(xiàn)事先預(yù)料不到的情況,或者出現(xiàn)一些故障如電源突跳、存儲(chǔ)出錯(cuò)、運(yùn)算溢出等。計(jì)算機(jī)就可以利用中斷系統(tǒng)自行處理,而不必停機(jī)或報(bào)告工作人員。45中斷的概念輪詢方式:CPU查詢中斷方式:CPU檢測到某種服務(wù)請(qǐng)求時(shí)暫時(shí)中止當(dāng)前程序,轉(zhuǎn)而執(zhí)行特定的中斷服務(wù)程序,完成后,返回到原來程序中斷處繼續(xù)執(zhí)行。8.1.2 中斷源引起中斷的原因,或能發(fā)出中斷申請(qǐng)的來源,稱為中斷源。通常中斷源有以下幾種: (1) 一般的輸入輸出設(shè)備。如鍵盤、行打印機(jī)等。(2) 數(shù)據(jù)通道中斷源。如磁盤、磁帶等。(3) 實(shí)時(shí)時(shí)鐘。在控制中,常要遇到時(shí)間控制,若用前面介紹的用C

4、PU執(zhí)行一段程序來實(shí)現(xiàn)延時(shí)的方法,則在這段時(shí)間內(nèi),CPU不能干別的工作,降低了CPU的利用率,所以,常用外部時(shí)鐘電路,當(dāng)需要定時(shí)的時(shí)候,CPU發(fā)出命令,令時(shí)鐘電路(這樣的電路的定時(shí)時(shí)間通常是可編程的即可用程序來確定和改變的)開始工作,待規(guī)定的時(shí)間到了以后,時(shí)鐘電路發(fā)出中斷申請(qǐng),由CPU加以處理。 6(4) 故障源。例如電源掉電,就要求把正在執(zhí)行的程序的狀態(tài)PC(或IP)、各個(gè)寄存器的內(nèi)容和標(biāo)志位的狀態(tài)保留下來,以便重新供電后能從斷點(diǎn)處繼續(xù)運(yùn)行。另外,目前絕大部分微型計(jì)算機(jī),RAM是使用半導(dǎo)體存儲(chǔ)器,故電源掉電后,必須接入備用的電池供電電路,以保護(hù)存儲(chǔ)器中的信息。所以,在直流電源上并上大電容,使

5、其因掉電、電壓下降到一定值時(shí)就發(fā)出中斷申請(qǐng),由計(jì)算機(jī)的中斷系統(tǒng)執(zhí)行上述的各項(xiàng)操作。(5) 為調(diào)試程序而設(shè)置的中斷源。一個(gè)新的程序編制好以后,必須經(jīng)過反復(fù)調(diào)試才能正確可靠地工作。在程序調(diào)試時(shí),為了檢查中間結(jié)果,或者為了尋找毛病所在,往往要求在程序中設(shè)置斷點(diǎn),或進(jìn)行單步工作(一次只執(zhí)行一條指令),這些就要由中斷系統(tǒng)來實(shí)現(xiàn)。 78.1.3 中斷系統(tǒng)的功能為了滿足上述各種情況下的中斷要求,中斷系統(tǒng)應(yīng)該具有如下功能: 1.實(shí)現(xiàn)中斷及返回當(dāng)某一中斷源發(fā)出中斷申請(qǐng)時(shí),CPU能決定是否響應(yīng)這個(gè)中斷請(qǐng)求(當(dāng)CPU在執(zhí)行更緊急、更重要的工作時(shí),可以暫不響應(yīng)中斷),若允許響應(yīng)這個(gè)中斷請(qǐng)求,CPU必須在現(xiàn)行的指令執(zhí)行

6、完后,把斷點(diǎn)處的IP和CS值(即下一條應(yīng)執(zhí)行的指令的地址)、各個(gè)寄存器的內(nèi)容和標(biāo)志位的狀態(tài)推入堆棧保留下來稱為保護(hù)斷點(diǎn)和現(xiàn)場。然后轉(zhuǎn)到需要處理的中斷源的服務(wù)程序(Interrupt Service Routine)的入口,同時(shí)清除中斷請(qǐng)求觸發(fā)器。當(dāng)中斷處理完后,再恢復(fù)被保留下來的各個(gè)寄存器和標(biāo)志位的狀態(tài)(稱為恢復(fù)現(xiàn)場),恢復(fù)IP和CS值(稱為恢復(fù)斷點(diǎn)),使CPU返回?cái)帱c(diǎn),繼續(xù)執(zhí)行主程序。 82.實(shí)現(xiàn)優(yōu)先權(quán)排隊(duì)在系統(tǒng)中通常有多個(gè)中斷源,會(huì)出現(xiàn)兩個(gè)或更多個(gè)中斷源同時(shí)提出中斷請(qǐng)求的情況,這樣就必須要設(shè)計(jì)者事先根據(jù)輕重緩急,給每個(gè)中斷源確定一個(gè)中斷級(jí)別優(yōu)先權(quán)。當(dāng)多個(gè)中斷源同時(shí)發(fā)出中斷申請(qǐng)時(shí),CPU能找

7、到優(yōu)先權(quán)級(jí)別最高的中斷源,響應(yīng)它的中斷請(qǐng)求;在優(yōu)先權(quán)級(jí)別最高的中斷源處理完了以后,再響應(yīng)級(jí)別較低的中斷源。 93.高級(jí)中斷源能中斷低級(jí)的中斷處理當(dāng)CPU響應(yīng)某一中斷源的請(qǐng)求,在進(jìn)行中斷處理時(shí),若有優(yōu)先權(quán)級(jí)別更高的中斷源發(fā)出中斷申請(qǐng),則CPU要能中斷正在進(jìn)行的中斷服務(wù)程序;一個(gè)中斷處理過程中又有一個(gè)中斷請(qǐng)求、并被響應(yīng)處理,被稱為中斷嵌套。必須在中斷服務(wù)程序中打開中斷,程序才會(huì)發(fā)生中斷嵌套。保留這個(gè)程序的斷點(diǎn)和現(xiàn)場(類似于子程序嵌套),響應(yīng)高級(jí)中斷,在高級(jí)中斷處理完以后,再繼續(xù)進(jìn)行被中斷的中斷服務(wù)程序。而當(dāng)發(fā)出新的中斷申請(qǐng)的中斷源的優(yōu)先權(quán)級(jí)別與正在處理的中斷源同級(jí)或更低時(shí),則CPU就先不響應(yīng)這個(gè)中

8、斷申請(qǐng),直至正在處理的中斷服務(wù)程序執(zhí)行完以后才去處理新的中斷申請(qǐng)。 108.2 最簡單的中斷情況CPU由于引腳的限制,它的中斷請(qǐng)求線的數(shù)量是有限的,例如8080只有一條中斷請(qǐng)求線。最簡單的情況當(dāng)然是只有一個(gè)中斷源,我們就從這個(gè)最簡單的情況分析起。118.2.1 CPU響應(yīng)中斷的條件 1.設(shè)置中斷請(qǐng)求觸發(fā)器每一個(gè)中斷源,要能發(fā)出中斷請(qǐng)求信號(hào),并且這個(gè)信號(hào)能保持著,直至CPU響應(yīng)這個(gè)中斷后,才可清除中斷請(qǐng)求。故要求每一個(gè)中斷源有一個(gè)中斷請(qǐng)求觸發(fā)器A,如圖8-1所示。 12中斷方式輸入的接口電路 地址譯碼器ABIO/MRDDBINTR輸入裝置 輸入鎖存器數(shù)據(jù) 三態(tài)緩沖器D中斷Q 請(qǐng)求中斷屏蔽觸發(fā)器中

9、斷矢量 三態(tài)緩沖器選通5vINTA(中斷響應(yīng)信號(hào))123CPU檢測45CPU執(zhí)行中斷服務(wù)子程序,讀入數(shù)據(jù),使中斷申請(qǐng)F(tuán)/F清0513中斷方式輸入接口電路的工作原理:1. 外設(shè)準(zhǔn)備好數(shù)據(jù),用選通脈沖將數(shù)據(jù)送往鎖存器,同時(shí),使中斷請(qǐng)求F/F置“1”。2. 在中斷允許的情況下,發(fā)INTR信號(hào)。3. CPU在IF1時(shí),每執(zhí)行完一條指令后,檢測INTR。4. CPU發(fā)出!INTA,同時(shí)外設(shè)提供中斷矢量。5. 執(zhí)行中斷服務(wù)子程序,讀入數(shù)據(jù),同時(shí)使中斷申請(qǐng) 觸發(fā)器F/F(flip-flop)清“0”。優(yōu)點(diǎn):時(shí)實(shí)性好,可帶多個(gè)外設(shè)。缺點(diǎn):不適用于高速外設(shè)的傳送。142.設(shè)置中斷屏蔽觸發(fā)器因?yàn)樵趯?shí)際系統(tǒng)中,往往

10、有多個(gè)中斷源。為了增加控制的靈活性,在每一個(gè)外設(shè)的接口電路中,增加一個(gè)中斷屏蔽觸發(fā)器,只有當(dāng)此觸發(fā)器為“1”時(shí),外設(shè)的中斷請(qǐng)求才能被送出至CPU,如圖8-2所示??砂?個(gè)外設(shè)的中斷屏蔽觸發(fā)器組成一個(gè)端口,用輸出指令來控制它們的狀態(tài)。 153.中斷是開放的在CPU內(nèi)部有一個(gè)中斷允許觸發(fā)器。只有當(dāng)其為“1”時(shí)(即中斷開放時(shí)),即若FLAG的IF1,則處理器處于開中斷狀態(tài),CPU才能響應(yīng)中斷;若其為“0”(IF0即中斷是關(guān)閉的),即使INTR線上有中斷請(qǐng)求,CPU也不響應(yīng)。而這個(gè)觸發(fā)器的狀態(tài)可由STI和CLI指令來改變。當(dāng)CPU復(fù)位時(shí),中斷允許觸發(fā)器為“0”,即關(guān)中斷,所以必須要用STI指令來開中斷

11、。當(dāng)中斷響應(yīng)后,CPU就自動(dòng)關(guān)中斷,所以必須在中斷服務(wù)程序中用STI指令來開中斷。4.現(xiàn)行指令執(zhí)行結(jié)束CPU在現(xiàn)行指令結(jié)束后響應(yīng)中斷,即運(yùn)行到最后一個(gè)機(jī)器周期的最后一個(gè)T狀態(tài)時(shí),CPU才采樣INTR線。若發(fā)現(xiàn)有中斷請(qǐng)求,則把內(nèi)部的中斷鎖存器置“1”,然后下一個(gè)機(jī)器周期(總線周期)不進(jìn)入取指周期,而進(jìn)入中斷周期。其響應(yīng)的流程如圖8-3所示。16178.2.2 CPU對(duì)中斷的響應(yīng)當(dāng)滿足上述條件后,CPU就響應(yīng)中斷,轉(zhuǎn)入中斷周期,CPU做以下幾種事: 1.關(guān)中斷8086在CPU響應(yīng)中斷后,發(fā)出中斷響應(yīng)信號(hào)INTA的同時(shí),內(nèi)部自動(dòng)地實(shí)現(xiàn)關(guān)中斷。2.保留斷點(diǎn)CPU響應(yīng)中斷,封鎖IP+1,并且把IP和CS

12、推入堆棧保留,以備中斷處理完畢后,能返回主程序。3.保護(hù)現(xiàn)場為了使中斷處理程序不影響主程序的運(yùn)行,故要把斷點(diǎn)處的有關(guān)的各個(gè)寄存器的內(nèi)容和標(biāo)志位的狀態(tài),推入堆棧保護(hù)起來。8086系統(tǒng)是由軟件(即在中斷服務(wù)程序中)把要用到的寄存器的內(nèi)容用PUSH指令推入堆棧。184.給出中斷入口,轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序8086是由中斷源提供的中斷矢量形成中斷入口地址(即中斷服務(wù)程序的起始地址)。在中斷服務(wù)程序完成后,還要做下述的5、6兩步。5.恢復(fù)現(xiàn)場把所保存的各個(gè)內(nèi)部寄存器的內(nèi)容和標(biāo)志位的狀態(tài)從堆棧彈出,送回CPU中的原來位置。這個(gè)操作在8086中也是由服務(wù)程序中用POP指令來完成的。6.開中斷與返回在中斷服務(wù)

13、程序的最后,要開中斷(以便CPU能響應(yīng)新的中斷請(qǐng)求)和安排一條返回指令,將堆棧內(nèi)保存的IP和CS值彈出,運(yùn)行就恢復(fù)到主程序。上述過程可用圖8-4的流程圖表示。19208.3 中斷優(yōu)先權(quán)如前所述,實(shí)際的系統(tǒng)中,是有多個(gè)中斷源的,但是,由于CPU引腳的限制,往往就只有一條中斷請(qǐng)求線。于是,當(dāng)有多個(gè)中斷源同時(shí)請(qǐng)求時(shí),CPU就要識(shí)別出是哪些中斷源有中斷請(qǐng)求,辨別和比較它們的優(yōu)先權(quán)(priority),先響應(yīng)優(yōu)先權(quán)級(jí)別最高的中斷申請(qǐng)。另外,當(dāng)CPU正在處理中斷時(shí),也要能響應(yīng)更高級(jí)的中斷申請(qǐng),而屏蔽掉同級(jí)或較低級(jí)的中斷申請(qǐng)。218.3.1 用軟件確定中斷優(yōu)先權(quán)要判別和確定各個(gè)中斷源的中斷優(yōu)先權(quán)可以用軟件和

14、硬件兩種方法。軟件采用查詢技術(shù)。當(dāng)CPU響應(yīng)中斷后,就用軟件查詢以確定是哪些外設(shè)申請(qǐng)中斷,并判斷它們的優(yōu)先權(quán)。把8個(gè)外設(shè)的中斷請(qǐng)求觸發(fā)器組合起來,作為一個(gè)端口,并賦以設(shè)備號(hào),如圖8-5所示。把各個(gè)外設(shè)的中斷請(qǐng)求信號(hào)相“或”后,作為INTR信號(hào),故任一個(gè)外設(shè)有中斷請(qǐng)求,都可以向CPU送出INTR信號(hào)。當(dāng)CPU響應(yīng)中斷后,把中斷寄存器的狀態(tài),作為一個(gè)外設(shè)讀入CPU,逐位檢測它們的狀態(tài),若有中斷請(qǐng)求就轉(zhuǎn)到相應(yīng)的服務(wù)程序的入口。用軟件查詢技術(shù)確定中斷優(yōu)先權(quán)的流程如圖8-6所示。2223軟件查詢法 Q Q Q D7 八 位 D6 三 態(tài) 緩 沖 器 D0 Q Q Q ABH DBDBINTR去CPU中斷

15、請(qǐng)求F /F中斷屏蔽F/F24查詢程序有兩種方式: (1) 屏蔽法INAL,20H;輸入中斷請(qǐng)求觸發(fā)器的狀態(tài)TESTAL,80H;檢查最高位(電源故障)是否有請(qǐng)求JNEPWF;有,則轉(zhuǎn)至電源故障處理程序TESTAL 40H;否,檢查磁盤是否有請(qǐng)求JNEDISS;有,轉(zhuǎn)至磁盤服務(wù)程序TESTAL 20H;否,檢查磁帶是否有請(qǐng)求JNEMT;有,轉(zhuǎn)至磁帶服務(wù)程序 25(2) 移位法XORAL,ALINAL,20HRCLAL,1JCPWFRCLAL,1JCDISS 26查詢方法的優(yōu)點(diǎn)是: (1) 詢問的次序即是優(yōu)先權(quán)的次序。顯然,最先詢問的,優(yōu)先權(quán)的級(jí)別最高。(2) 省硬件。不需要有判斷與確定優(yōu)先權(quán)的

16、硬件排隊(duì)電路。但隨之而來的缺點(diǎn)是: 由詢問轉(zhuǎn)至相應(yīng)的服務(wù)程序入口的時(shí)間長,尤其是在中斷源較多的情況下。 278.3.2 硬件優(yōu)先權(quán)排隊(duì)電路 1.中斷優(yōu)先權(quán)編碼電路用硬件編碼器和比較器的優(yōu)先權(quán)排隊(duì)電路,如圖8-7所示。若有8個(gè)中斷源,當(dāng)任一個(gè)有中斷請(qǐng)求時(shí),通過“或”門,即可有一個(gè)中斷請(qǐng)求信號(hào)產(chǎn)生,但它能否送至CPU的中斷請(qǐng)求線,還要受比較器的控制(若優(yōu)先權(quán)失效信號(hào)為低電平,則與門2關(guān)閉)。8條中斷輸入線的任一條,經(jīng)過編碼器可以產(chǎn)生三位二進(jìn)制優(yōu)先權(quán)編碼A2A1A0,優(yōu)先權(quán)最高的線的編碼為111,優(yōu)先權(quán)最低的線的編碼為000。而且若有多個(gè)輸入線同時(shí)輸入,則編碼器只輸出優(yōu)先權(quán)最高的編碼。 2829正在

17、進(jìn)行中斷處理的外設(shè)的優(yōu)先權(quán)編碼,通過CPU的數(shù)據(jù)總線,送至優(yōu)先權(quán)寄存器,然后輸出編碼B2B1B0至比較器,以上過程是由軟件實(shí)現(xiàn)的。比較器比較編碼A2A1A0與B2B1B0的大小,若AB,則“AB”端輸出低電平,封鎖與門1,就不向CPU發(fā)出新的中斷申請(qǐng)(即當(dāng)CPU正在處理中斷時(shí),當(dāng)有同級(jí)或低級(jí)的中斷源申請(qǐng)中斷時(shí),優(yōu)先權(quán)排隊(duì)線路就屏蔽它們的請(qǐng)求);只有當(dāng)AB時(shí),比較器輸出端才為高電平,打開與門1,將中斷請(qǐng)求信號(hào)送至CPU的INTR輸入端,CPU就中斷正在進(jìn)行的中斷處理程序,轉(zhuǎn)去響應(yīng)更高級(jí)的中斷。 30若CPU不在進(jìn)行中斷處理時(shí)(即在執(zhí)行主程序),則優(yōu)先權(quán)失效信號(hào)為高電平,當(dāng)有任一中斷源請(qǐng)求中斷時(shí),

18、都能通過與門2,發(fā)出INTR信號(hào)。這樣的優(yōu)先權(quán)電路,如何能做到轉(zhuǎn)入優(yōu)先權(quán)最高的外設(shè)的服務(wù)程序的入口呢?當(dāng)外設(shè)的個(gè)數(shù)8時(shí),則它們公用一個(gè)產(chǎn)生中斷矢量的電路,它有三位由比較器的編碼A2A1A0供給,就能做到不同的編碼轉(zhuǎn)入不同的入口地址。 312.雛菊花環(huán)(Daisy Chain)式或稱鏈?zhǔn)絻?yōu)先權(quán)排隊(duì)電路另一種常用的硬件排隊(duì)電路,如圖8-8所示。當(dāng)多個(gè)輸入有中斷請(qǐng)求,則由中斷輸入信號(hào)的“或”電路產(chǎn)生INTR信號(hào),送至CPU。當(dāng)CPU在現(xiàn)行指令執(zhí)行完后,響應(yīng)中斷,發(fā)出中斷響應(yīng)信號(hào)。但CPU轉(zhuǎn)向哪一個(gè)中斷服務(wù)程序的入口呢?這要由圖8-8所示的鏈?zhǔn)絻?yōu)先權(quán)排隊(duì)電路確定。當(dāng)中斷響應(yīng)為高電平,若F/F-A有中斷

19、請(qǐng)求,則它的輸出為高,于是與門A1輸出為高,由它控制轉(zhuǎn)至中斷1的服務(wù)程序的入口;且門A2輸出為低電平;因而使門B1、B2和C1、C2所有下面各級(jí)門的輸入和輸出全為低電平,即屏蔽了所有別的各級(jí)中斷。 3233若第一級(jí)沒有中斷請(qǐng)求,即F/F-A=“0”,則中斷輸出1為低電平,但門A2的輸出卻為高電平,起到了把中斷響應(yīng)傳遞至中斷請(qǐng)求2。若此時(shí)F/F-B=“1”,則與門B1輸出為高電平,控制轉(zhuǎn)去執(zhí)行中斷2的服務(wù)程序;此時(shí)與門B2的輸出為低,因而屏蔽了以下各級(jí)。而若F/F-B=“0”,則與門B1輸出為低,而與門B2輸出為高,把中斷響應(yīng)傳遞至中斷請(qǐng)求3綜上所述,在鍵式優(yōu)先權(quán)排隊(duì)電路中,若上級(jí)的輸出信號(hào)為“

20、0”,則屏蔽了本級(jí)和所有的低級(jí)中斷,若上級(jí)輸出為“1”,在本級(jí)有中斷請(qǐng)求時(shí),則轉(zhuǎn)去執(zhí)行本級(jí)的處理程序,且使本級(jí)輸至下級(jí)的輸出為“0”,屏蔽所有低級(jí)中斷;若本級(jí)沒有中斷請(qǐng)求,則輸至下級(jí)的為“1”,允許下一級(jí)中斷。故在鏈?zhǔn)诫娐分?,排在鏈的最前面的中斷其?yōu)先權(quán)最高。 348.4 8086微處理器的中斷方式8086有兩類中斷: 軟件中斷由指令的執(zhí)行所引起的;硬件中斷由外部(主要是外設(shè))的請(qǐng)求所引起的。358.4.1 外部中斷8086有兩條外部中斷請(qǐng)求線: 非屏蔽中斷NMI(Non Maskable Interrupt)和可屏蔽中斷INTR。1.可屏蔽中斷出現(xiàn)在INTR線上的請(qǐng)求信號(hào)是電平觸發(fā)的,它的出

21、現(xiàn)是異步的,在CPU內(nèi)部是由CLK的上升沿來同步的。在INTR線上的中斷請(qǐng)求信號(hào)(即有效的高電平)必須保持到當(dāng)前指令的結(jié)束。在這條線上出現(xiàn)的中斷請(qǐng)求,CPU是否響應(yīng)要取決于標(biāo)志位I的狀態(tài),若IF=1,則CPU就響應(yīng),可以認(rèn)為此時(shí)CPU是處在開中斷狀態(tài);若IF=0,則CPU就不響應(yīng),可以認(rèn)為此時(shí)CPU是處在關(guān)中斷狀態(tài)。而I位的狀態(tài),可以用指令STI使其置位開中斷;也可以用CLI指令來使其復(fù)位關(guān)中斷。 36注意: 在系統(tǒng)復(fù)位以后,標(biāo)志位I=0;另外任一種中斷(內(nèi)部中斷、NMI、INTR)被響應(yīng)后,I=0。所以必須在一定的時(shí)候用STI指令來開放中斷。CPU是在當(dāng)前指令周期的最后一個(gè)T狀態(tài)采樣中斷請(qǐng)求

22、線,若發(fā)現(xiàn)有可屏蔽中斷請(qǐng)求,且中斷是開放的(I標(biāo)志為“1”),則CPU轉(zhuǎn)入中斷響應(yīng)周期。8086進(jìn)入兩個(gè)連續(xù)的中斷響應(yīng)周期,每個(gè)響應(yīng)周期都是由4個(gè)T狀態(tài)組成,而且都發(fā)出有效的中斷響應(yīng)信號(hào)。請(qǐng)求中斷的外設(shè),必須在第二個(gè)中斷響應(yīng)周期的T3狀態(tài)前,把反映中斷的向量(類型)號(hào)輸至CPU的數(shù)據(jù)總線(通常通過8259A傳送)。CPU在T4狀態(tài)的前沿采樣數(shù)據(jù)總線,獲取中斷向量號(hào),接著就進(jìn)入了中斷處理序列。 372.非屏蔽中斷出現(xiàn)在NMI線上的中斷請(qǐng)求,不受標(biāo)志位I的影響,在當(dāng)前指令執(zhí)行完以后,CPU就響應(yīng)。在NMI線上的請(qǐng)求信號(hào)是邊沿觸發(fā)的,它的出現(xiàn)是異步的,由內(nèi)部把它鎖存。8086要求NMI上的請(qǐng)求脈沖的

23、有效寬度(高電平的持續(xù)時(shí)間)要大于兩個(gè)時(shí)鐘周期。通常非屏蔽中斷用于電源故障。非屏蔽中斷的優(yōu)先權(quán)高于屏蔽中斷。CPU采樣到有非屏蔽中斷請(qǐng)求時(shí),自動(dòng)給出中斷向量號(hào)2,而不經(jīng)過上述的可屏蔽中斷那樣的中斷響應(yīng)周期。 388.4.2 內(nèi)部中斷8086可以有幾種產(chǎn)生內(nèi)部中斷的情況: (1) DIV或IDIV指令在執(zhí)行除法指令時(shí),若發(fā)現(xiàn)除數(shù)為0或商超過了寄存器所能表達(dá)的范圍,則立即產(chǎn)生一個(gè)類型為0的內(nèi)部中斷。(2) INT指令如前所述,在8086的指令系統(tǒng)中有一條中斷指令即INT n指令。這種指令的執(zhí)行引起中斷,而且中斷的類型可由指令中的n加以指定。(3) INTO指令若上一條指令執(zhí)行的結(jié)果,使溢出標(biāo)志位O

24、=1,則INTO指令引起類型為4的內(nèi)部中斷。否則,此指令不起作用,程序執(zhí)行下一條指令。39(4) 單步執(zhí)行(TF中斷)若標(biāo)志位TF=1,則CPU在每一條指令執(zhí)行完以后,引起一個(gè)類型為1的中斷,這可以做到單步執(zhí)行,是一種強(qiáng)有力的調(diào)試手段。8086規(guī)定這些中斷的優(yōu)先權(quán)次序?yàn)椋?內(nèi)部中斷、NMI、INTR,優(yōu)先權(quán)最低的是單步執(zhí)行(TF中斷) 。 401. 中斷矢量 2. 中斷矢量表 中斷矢量就是中斷處理子程序的入口地址,每個(gè)中斷類型對(duì)應(yīng)一個(gè)中斷矢量。中斷矢量表就是將256種中斷類型的中斷處理子程序的入口地址組成一個(gè)有序的表。8086/8088的中斷系統(tǒng)是以位于內(nèi)存0段的0 3FFH區(qū)域的中斷矢量表為

25、基礎(chǔ)的。418.4.3 中斷向量表8.4.3 中斷向量表8086有一個(gè)簡便的而又多功能的中斷系統(tǒng)。上述的任何一種中斷,CPU響應(yīng)以后,都是要保護(hù)現(xiàn)場(主要是標(biāo)志位)和保護(hù)斷點(diǎn)(現(xiàn)行的碼段寄存器CS和指令指針I(yè)P),然后轉(zhuǎn)入各自的中斷服務(wù)程序。8086在內(nèi)存的前1KB(地址00000H003FFH)建立了一個(gè)中斷向量表,可以容納256個(gè)中斷向量(或256個(gè)中斷類型)。每個(gè)中斷向量占用4個(gè)字節(jié)。在這4個(gè)字節(jié)中,包含著這個(gè)中斷向量(或這種中斷類型)的服務(wù)程序的入口地址前兩個(gè)字節(jié)為服務(wù)程序的IP,后兩個(gè)字節(jié)為服務(wù)程序的CS。如圖8-22所示。 42中斷矢量表外部中斷源,只要在第二個(gè)中斷響應(yīng)周期,向數(shù)據(jù)

26、總線送出一個(gè)字節(jié)的中斷類型碼,即可以轉(zhuǎn)至相應(yīng)的中斷矢量。中斷類型碼0 除數(shù)為0中斷1 單步中斷2 非屏蔽中斷3 斷點(diǎn)中斷4 溢出中斷31 2550000H0004H0008H000CH0010H0014H007CH0080H03FCH0段8086系統(tǒng)專用 (5)備用 (27)用戶(224) IP CS IP CS IP CS IP CS IP CS IP CS IP CSM在響應(yīng)中斷時(shí),CPU將中斷類型號(hào)乘4得到中斷矢量地址,從地址中取出中斷矢量,轉(zhuǎn)入中斷處理程序。434432個(gè)其中前32個(gè)中斷向量(或中斷類型)由Intel和操作系統(tǒng)使用,余下的就可以由用戶使用,可以作為外部中斷源的向量。外部

27、中斷源,只要在第二個(gè)中斷響應(yīng)周期,向數(shù)據(jù)總線送出一個(gè)字節(jié)的中斷類型號(hào),即可以轉(zhuǎn)至相應(yīng)的中斷處理程序。458.4.4 8086中的中斷響應(yīng)和處理過程8086中的各種中斷的響應(yīng)和處理過程是不相同的,但主要區(qū)別在于如何獲取相應(yīng)的中斷類型碼(向量號(hào))。對(duì)于硬件(外部)中斷,CPU是在當(dāng)前指令周期的T狀態(tài)采樣中斷請(qǐng)求輸入信號(hào),如果有可屏蔽中斷請(qǐng)求,且CPU處在開中斷狀態(tài)(I標(biāo)志為1),則CPU轉(zhuǎn)入兩個(gè)連續(xù)的中斷響應(yīng)周期,在第二個(gè)中斷響應(yīng)周期的T4狀態(tài)前沿,采樣數(shù)據(jù)線獲取由外設(shè)輸入的中斷類型碼;若是采樣到非屏蔽中斷請(qǐng)求,則CPU不經(jīng)過上述的兩個(gè)中斷響應(yīng)周期,而在內(nèi)部自動(dòng)產(chǎn)生中斷類型碼2。對(duì)于軟件中斷,中斷

28、類型碼也是自動(dòng)形成的。被零除為0、單步為1、斷點(diǎn)為2和溢出為4對(duì)于INT n指令,則類型碼即為指令中給定的n。 468086在取得了類型碼后的處理過程是一樣的,其順序?yàn)椋?(1) 將類型碼乘4,作為中斷向量表的指針;(2) 把CPU的標(biāo)志寄存器入棧,保護(hù)各個(gè)標(biāo)志位,此操作類似于PUSHF指令;(3) 復(fù)制追蹤標(biāo)志TF(P40)的狀態(tài),接著清除IF和TF標(biāo)志,屏蔽新的INTR中斷和單步中斷;(4) 保存主程序中的斷點(diǎn),即把主程序斷點(diǎn)處的IP和CS值推入堆棧保護(hù),先推入CS值,再推入IP值;(5) 從中斷向量表中取中斷服務(wù)程序的入口地址,分別送至CS和IP中,先取CS值;47(6) 按新地址執(zhí)行中

29、斷服務(wù)程序。在中斷服務(wù)程序中,通常要保護(hù)CPU內(nèi)部寄存器的值(保護(hù)現(xiàn)場),開中斷(若允許中斷嵌套的話)。在中斷服務(wù)程序執(zhí)行完后,要恢復(fù)現(xiàn)狀,最后執(zhí)行中斷返回指令I(lǐng)RET,IRET指令按次序恢復(fù)斷點(diǎn)處的IP和CS值,恢復(fù)標(biāo)志寄存器(相當(dāng)于POP F)。于是程序就恢復(fù)到斷點(diǎn)處繼續(xù)執(zhí)行。8086的中斷響應(yīng)和處理過程可用圖8-23的流程圖來表示。 48498.5.1 8259A的功能 Intel 8259A是與8080/8085系列以及8088/8086系列兼容的可編程的中斷控制器。它的主要功能為: (1) 具有8級(jí)優(yōu)先權(quán)控制,通過級(jí)連可擴(kuò)展至64級(jí)優(yōu)先權(quán)控制。(2) 每一級(jí)中斷都可以屏蔽或允許。(3

30、) 在中斷響應(yīng)周期,8259A可提供相應(yīng)的中斷向量,從而能迅速地轉(zhuǎn)至中斷服務(wù)程序。(4) Intel 8259A有多種工作方式,可以通過編程來進(jìn)行選擇。 508.5 中斷控制器Intel 8259A8.5.2 8259A的結(jié)構(gòu)Intel 8259A的方框圖如圖8-9所示。一片8259A有8條外界中斷請(qǐng)求線IR0IR7,每一條請(qǐng)求線有一個(gè)相應(yīng)的觸發(fā)器來保存請(qǐng)求信號(hào),從而形成了中斷請(qǐng)求寄存器IRR(Interrupt Request Register)。正在服務(wù)的中斷,由中斷服務(wù)寄存器ISR(Interrupt Service Register)保存。中斷屏蔽寄存器IMR(Interrupt Ma

31、sk Register)的每一位可以對(duì)IRR中的相應(yīng)的中斷源進(jìn)行屏蔽。優(yōu)先權(quán)電路對(duì)保存在IRR中的各個(gè)中斷請(qǐng)求,經(jīng)過判斷確定最高的優(yōu)先權(quán),并在中斷響應(yīng)周期把它選通至中斷服務(wù)寄存器ISR。 5152中斷屏蔽寄存器IMR(Interrupt Mask Register)的每一位可以對(duì)IRR中的相應(yīng)的中斷源進(jìn)行屏蔽。但對(duì)于較高優(yōu)先權(quán)的輸入線實(shí)現(xiàn)屏蔽并不影響較低優(yōu)先權(quán)的輸入。數(shù)據(jù)總線緩沖器是8259A與系統(tǒng)數(shù)據(jù)總線的接口,它是8位的雙向三態(tài)緩沖器。凡是CPU對(duì)8259A編程時(shí)的控制字,都是通過它寫入8259A的;8259A的狀態(tài)信息,也是通過它讀入CPU的;在中斷響應(yīng)周期,8259A送至數(shù)據(jù)總線的中斷

32、矢量也是通過它傳送的。讀/寫控制邏輯,CPU能通過讀/寫控制邏輯實(shí)現(xiàn)對(duì)8259A的讀出(狀態(tài)信號(hào))和寫入(初始化編程)。級(jí)連緩沖器能實(shí)現(xiàn)8259A芯片之間的級(jí)連,使得中斷源可由8級(jí)擴(kuò)展至64級(jí)??刂七壿嫴糠?,對(duì)芯片內(nèi)部的工作進(jìn)行控制,使它按編程的規(guī)定工作。535455568.5.3 8259A的引線Intel 8259A是28個(gè)引腳的雙列直插式芯片,其引線如圖8-10所示。D7D0是雙向三態(tài)數(shù)據(jù)線,它可直接與系統(tǒng)的數(shù)據(jù)總線相連。IR0IR7是8條外界中斷請(qǐng)求輸入線。!RD是讀命令信號(hào)線,當(dāng)其有效時(shí),控制信息由8259A至CPU。!WR是寫命令信號(hào)線,當(dāng)其有效時(shí),控制信息由CPU寫入至8259A

33、。 5758CS是選片信號(hào)線,由地址高位控制。A0用以選擇8259A內(nèi)部的不同寄存器,通常直接連至地址總線的A0。CAS2CAS0是級(jí)連信號(hào)線,當(dāng)8259作為主片時(shí),這三條為輸出線;作為從片時(shí),則此三條線為輸入線。這三條線與SP/EN線相配合,實(shí)現(xiàn)8259A的級(jí)連(詳見后面有關(guān)級(jí)連部分的敘述)。8259A與Intel系列的標(biāo)準(zhǔn)系統(tǒng)總線的連接,如圖8-11所示。59608259A的A0通常與地址總線的A0相連,A7A1經(jīng)過譯碼與CS相連(全譯碼方式);或與某一條高位地址線相連(線選方式)。RD與系統(tǒng)的控制信號(hào)線IOR相連,WR線與IOW相連。其他與系統(tǒng)的同名信號(hào)端相連就可以了。 618.5.4

34、8259A的中斷順序(1) 當(dāng)有一條或若干條中斷請(qǐng)求輸入線(IR7IR0)變高,則使中斷請(qǐng)求寄存器IRR的相應(yīng)位置位。(2) 若中斷請(qǐng)求線中至少有一條是中斷允許的,則8259A由INT引腳向CPU送出中斷請(qǐng)求信號(hào)。(3) 若CPU是處在開中斷狀態(tài),則在當(dāng)前指令執(zhí)行完以后,用INTA信號(hào)作為響應(yīng)。(4) 8259A在接收到CPU的INTA信號(hào)后,使最高優(yōu)先權(quán)的ISR位置位,而相應(yīng)的IRR位復(fù)位。但在此周期中,8259A并不向系統(tǒng)數(shù)據(jù)總線送任何內(nèi)容。 62(5) 8088/8086 CPU將啟動(dòng)另一個(gè)中斷響應(yīng)周期,輸出另一個(gè)INTA脈沖。在這個(gè)周期8259A向數(shù)據(jù)總線輸送一個(gè)8位的指針(向量)。C

35、PU在此周期中,讀取此向量把它乘以4,就可以從中斷服務(wù)程序入口地址表中取出中斷服務(wù)程序的入口地址(包括段地址和段內(nèi)偏移量)。(6) 這樣中斷響應(yīng)周期就完成了,CPU就可以轉(zhuǎn)至中斷服務(wù)程序。若8259A工作在AEOI模式,在第二個(gè)INTA脈沖結(jié)束時(shí),使中斷源在ISR中的相應(yīng)位復(fù)位;否則,直至中斷服務(wù)程序結(jié)束,發(fā)出EOI命令,才使ISR中的相應(yīng)位復(fù)位。在第一個(gè)中斷響應(yīng)周期,8259A并不向CPU輸送任何內(nèi)容。在第二個(gè)中斷響應(yīng)周期,8259A將向CPU輸送如表8-2所示的中斷向量。其中的T7T3是由用戶在8259A的初始化編程中規(guī)定,而低3位則是由8259A自動(dòng)插入的。638259A輸送的中斷向量中

36、斷寄存器編號(hào)D7 D6 D5 D4 D3 D2 D1 D0IR7T7 T6 T5 T4 T3 111IR6T7 T6 T5 T4 T3 110IR5T7 T6 T5 T4 T3 101IR4T7 T6 T5 T4 T3 100IR3T7 T6 T5 T4 T3 011IR2T7 T6 T5 T4 T3 010IR1T7 T6 T5 T4 T3 001IR0T7 T6 T5 T4 T3 000648.5.5 8259A的編程 8259A的編程可以分為兩種: (1) 初始化編程: 由CPU向8259A送24個(gè)字節(jié)的初始化命令字ICW(Initialization Command Word)。在82

37、59A開始正常工作之前,必須由初始化命令字,使其處在開始點(diǎn)。(2) 工作方式編程: 由CPU向8259A送三個(gè)字節(jié)的工作命令字OCW(Operation Command Word),以規(guī)定8259A的工作方式。 65例如: 中斷屏蔽結(jié)束中斷優(yōu)先權(quán)旋轉(zhuǎn)中斷狀態(tài)工作命令字可在8259A已經(jīng)初始化以后的任何時(shí)間寫入。這些命令字的寫入,以及8259A的狀態(tài)的讀出是由A0、RD和WR信號(hào)以及命令字中的某些特定位所規(guī)定的。 6667通過往寄地址端口寫入IMR內(nèi)容實(shí)現(xiàn) 對(duì)應(yīng)位為0,允許該級(jí)中斷申請(qǐng)進(jìn)入 對(duì)應(yīng)位為1,禁止該級(jí)中斷申請(qǐng)進(jìn)入8.5.5 8259A的編程 IORIOW總線數(shù) 據(jù) 線D0D7INTAA

38、0片選譯碼A5A9CSA0RD INTAWRINTD0D7 ICW1 芯片控制 ICW2 中斷類型號(hào) ICW3 主從片關(guān)系 ICW4 方式控制000 0 0 0 0 0 ISR當(dāng)前中斷服務(wù)寄存器IR0IR1IR2IR3IR4IR5IR6IR7OCW1 中斷屏蔽寄存器 IMR 00 OCW2 優(yōu)先級(jí)、發(fā)EOI OCW3 特殊屏蔽設(shè)置PR優(yōu)先級(jí)裁決器IRR中斷申請(qǐng)寄存器100 0 0 0 0 1 10010100INTR1.8259A的初始化編程 若CPU用一條輸出指令向8259A寫入一個(gè)命令字,其D4=1,輸出指令地址中A0=0,則被解釋為初始化命令字1(ICW1)。ICW1啟動(dòng)了8259A中的

39、初始化順序,自動(dòng)發(fā)生下列事件:(1) 邊沿敏感電路復(fù)位,這意味著在初始化以后,中斷請(qǐng)求輸入線必須由低變高才產(chǎn)生中斷;(2) 中斷屏蔽寄存器清零;(3) IR7輸入被賦為優(yōu)先權(quán)7;(4) 從模式地址置為7;(5) 特殊屏蔽模式清除,狀態(tài)讀置為IRR;(6) 若IC4=0,則在ICW4中所選擇的所有功能全置為0(非緩沖方式,非自動(dòng)停止中斷方式,用于MCS-80/85系統(tǒng))。68對(duì)8259A的初始化編程是向它輸送24個(gè)字節(jié)的初始化命令字,其順序如圖8-12所示。ICW1和ICW2是必須送的,而ICW3和ICW4是由工作方式來選擇的。69級(jí)聯(lián)70級(jí)聯(lián)ICW1的功用可用圖8-13來說明。其D4必須為1。

40、D0確定是否送ICW4,若根據(jù)選擇ICW4的各位應(yīng)為0,則可令D0位(即IC4)為0,則不送ICW4。D1位SNGL,規(guī)定系統(tǒng)中是單片8259A工作還是多片8259A級(jí)連工作。D2位ADI,規(guī)定CALL地址的間隔,若D2=1,則間隔為4,這適用于建立一個(gè)轉(zhuǎn)移指令表;若D2=0,則間隔為8。D3位LTIM,規(guī)定中斷請(qǐng)求輸入線的觸發(fā)方式,D3=1為電平觸發(fā)方式,此時(shí)邊沿檢測邏輯斷開;D3=0則為邊沿觸發(fā)方式。 7172D7、D6、D5這三位當(dāng)應(yīng)用于MCS-80/85系統(tǒng)時(shí),即為入口地址低8位中的編程位(A7、A6、A5位)。若選擇間隔為4,則這三位全可編程;若選擇間隔為8,則只有D7(A7)、D6

41、(A6)位可編程,此時(shí)D5位不起作用。ICW2各位的功能如圖8-14所示。ICW2的D7D3用以確定中斷向量的T7T3,此時(shí)ICW2的D2D0位無用。 73ICW3用于8259A的級(jí)連,若系統(tǒng)中只有一片8259A,則不用ICW3;若有多片8259A級(jí)連,則主8259A和每一片從8259A都必須用ICW3。8259A最多允許有一片主8259A和8片從8259A,使中斷源擴(kuò)展至64個(gè)。主和從8259A的ICW3有所不同,其功用如圖8-15所示。7475(1)對(duì)于主8259A(由SP=1或由ICW4中的M/S=1規(guī)定在緩沖方式所決定),ICW3的每一位對(duì)應(yīng)于一片從8259A,即若有一片從8259A,

42、則可令I(lǐng)CW3的S0=1,別的位全為0;若有兩片從8259A,則可令S0=1,S1=1,別的位全為0。在中斷響應(yīng)周期,主8259A向數(shù)據(jù)總線輸送CALL指令的操作碼(在MCS-80/85系統(tǒng)中),然后由相應(yīng)的從8259A輸送入口地址的高8位(在8088/8086系統(tǒng)中,只輸送一字節(jié)的中斷向量)。(2) 若是從8259A,則ICW3中只有低三位(D2D1D0)作為這個(gè)從8259A的標(biāo)識(shí)符(ID),高5位全為0。在中斷響應(yīng)周期中,主8259A通過級(jí)連線輸送申請(qǐng)中斷源中優(yōu)先權(quán)最高的中斷源所在的從8259A的標(biāo)識(shí)符,每個(gè)從8259A拿這個(gè)標(biāo)識(shí)符與自己編程時(shí)ICW3中所規(guī)定的標(biāo)識(shí)符相比較,只有兩者相符合

43、的這片從8259A,能在下兩個(gè)中斷響應(yīng)周期輸送入口地址的低8位和高8位(對(duì)于8088/8086系統(tǒng),只送一個(gè)字節(jié)的中斷向量)。76ICW4的功用如圖8-16所示。D0位PM,用于規(guī)定所用的微處理器。若PM=0,則規(guī)定8259A用于MCS-80/85系統(tǒng)中;若PM=1,則規(guī)定用于MCS-86系統(tǒng)中。D1位AEOI,規(guī)定結(jié)束中斷的方式,若AEOI=1,則為自動(dòng)結(jié)束中斷方式。D2位M/S,它與D3位BUF配合使用,若BUF=1,選擇為緩沖模式,則M/S=1確定為主8259A;若M/S=0,則為從8259A。若BUF=0,則M/S位不起作用。D3位BUF,若BUF=1,則為緩沖模式,此時(shí)SP/EN變?yōu)?/p>

44、允許輸出線,同時(shí)由M/S確定是主還是從8259A。D4位SFNM,若SFNM=1,則規(guī)定為特殊的全嵌套模式。 77782.8259A的工作命令字在對(duì)8259A進(jìn)行了初始化編程(輸送了適當(dāng)?shù)某跏蓟钭?之后,芯片已作好了接收中斷請(qǐng)求輸入的準(zhǔn)備。在8259A的工作期間可由工作命令字以規(guī)定其各種工作方式。8259A有三個(gè)工作命令字OCW(OCW1、OCW2和OCW3)。OCW1是中斷屏蔽命令字,如圖8-17所示。命令字的每一位,可以對(duì)相應(yīng)的中斷請(qǐng)求輸入線進(jìn)行屏蔽。OCW1的某一位為“1”,則相應(yīng)的輸入線被屏蔽;若某一位為“0”,則相應(yīng)的輸入線的中斷就允許。7980OCW2的功用如圖8-18所示。圖

45、中說明了R、SL、EOI三位的功用,它們的不同組合決定了幾種不同的工作方式。在其中的三種工作方式中要用到OCW2的最低三位即L2、L1、L0,這3位二進(jìn)制編碼決定了 8個(gè)中斷源的某一個(gè)被SEOI信號(hào)復(fù)位,或規(guī)定某一個(gè)的優(yōu)先權(quán)最低。D4、D3為00是寫入OCW2的標(biāo)志。 8182OCW3的功用如圖8-19所示。它的最低兩位決定下一個(gè)操作是否為讀操作(RR=1),以及是讀中斷請(qǐng)求寄存器IRR(若RIS=0),還是讀中斷服務(wù)寄存器ISR(若RIS=1)。D2位P,決定是查詢命令(P=1),還是非查詢命令(P=0)。D4、D3位為01為寫入OCW3的標(biāo)志。D6、D5這兩位決定是否工作于特殊屏蔽模式,當(dāng)

46、D6、D5為11時(shí),則允許特殊屏蔽模式;而D6、D5為10時(shí)則撤除特殊屏蔽模式返回正常的屏蔽模式。若D6位ESMM=0,則D5位SMM不起作用。 83848.5.6 8259A的工作方式 1.查詢方式當(dāng)系統(tǒng)的中斷源很多,超過了64個(gè)時(shí),則8259A芯片可以工作在查詢方式。此時(shí),在8259A的編程中,使OCW3的D2位P置為1。程序中令CPU關(guān)中斷,用查詢方式對(duì)外設(shè)進(jìn)行服務(wù)。在令OCW3的D2位P置為1后的下一個(gè)讀命令,被8259A看作是中斷響應(yīng)信號(hào),使最高優(yōu)先權(quán)的ISR的相應(yīng)位置位。讀命令從數(shù)據(jù)總線上讀取一個(gè)字節(jié),其內(nèi)容為: 其中I=1,表示此片8259A有中斷請(qǐng)求,I=0則無中斷,可查詢別的

47、芯片。在I=1時(shí),W2W0即為有中斷請(qǐng)求的最高優(yōu)先權(quán)源的編碼。 852.中斷屏蔽8259A的8個(gè)中斷請(qǐng)求線的每一條都可根據(jù)需要單獨(dú)屏蔽,OCW1寫入主屏蔽字寄存器,它的每一位可對(duì)相應(yīng)的請(qǐng)求線實(shí)現(xiàn)屏蔽。在某些應(yīng)用場合,可能要求能在軟件的控制下動(dòng)態(tài)地改變系統(tǒng)的優(yōu)先權(quán)結(jié)構(gòu)。也就是若CPU正處在中斷服務(wù)過程中,希望能屏蔽一些較低優(yōu)先權(quán)的中斷源的中斷,而允許一些優(yōu)先權(quán)更低的中斷源申請(qǐng)中斷。 86但是在通常的工作方式下,當(dāng)較高優(yōu)先權(quán)的中斷源正處在中斷服務(wù)的過程中,所有優(yōu)先權(quán)較低的中斷源的中斷全給屏蔽了,達(dá)不到上述的要求。為此,8259A中有一種特殊屏蔽模式。若在OCW3中的D6位ESMM=1,且D5位SM

48、M=1,則使8259A工作在特殊的屏蔽模式。此時(shí),由OCW1寫入的屏蔽字中為“1”的這些位的中斷被屏蔽,而為“0”的這些位的中斷不管其優(yōu)先權(quán)如何,在任何情況下都可以申請(qǐng)中斷。若OCW3中的ESMM=1而SMM=0,則恢復(fù)為正常的屏蔽方式。 873.緩沖模式當(dāng)8259A在一個(gè)大的系統(tǒng)中使用,且8259A要求級(jí)連,則要求數(shù)據(jù)總線有總線驅(qū)動(dòng)緩沖器,也就要求有一個(gè)緩沖器的允許信號(hào)。當(dāng)編程規(guī)定使8259A工作在緩沖模式,則8259A送出一個(gè)允許信號(hào)SP/EN,每當(dāng)8259A的數(shù)據(jù)總線輸出是允許的,SP/EN輸出變?yōu)橛行?。在緩沖器模式,必須在初始化編程時(shí)規(guī)定此片8259A是主還是從。以上的工作方式是由IC

49、W4決定的。 884.中斷嵌套模式在8259A中有兩種中斷嵌套模式: 全嵌套模式和特殊全嵌套模式。(1) 全嵌套模式當(dāng)工作在全嵌套模式時(shí),在初始化編程以后,中斷優(yōu)先權(quán)是固定的,且IR0優(yōu)先權(quán)最高,IR7優(yōu)先權(quán)最低(除非用優(yōu)先權(quán)旋轉(zhuǎn)的辦法來改變)。當(dāng)CPU響應(yīng)中斷時(shí),申請(qǐng)中斷的優(yōu)先權(quán)最高的源在ISR中的相應(yīng)位置位,而且把它的中斷矢量送至數(shù)據(jù)總線。在此中斷源的中斷服務(wù)程序完成之前,與它同級(jí)或優(yōu)先權(quán)更低的中斷源的申請(qǐng)就被屏蔽,只有優(yōu)先權(quán)比它高的源的中斷申請(qǐng)才是允許的(當(dāng)然CPU是否響應(yīng)取決于CPU是否處在開中斷狀態(tài))。89(2) 特殊全嵌套模式若在一個(gè)大的系統(tǒng)中,8259A用在級(jí)連情況下,就需要采用

50、特殊的全嵌套模式。在這種模式下與全嵌套模式的工作情況基本上是相同的,只有以下兩點(diǎn)不同。 當(dāng)某一個(gè)從8259A有中斷請(qǐng)求,CPU響應(yīng)以后,這個(gè)從8259A的中斷并沒有被屏蔽,即這個(gè)從8259A中優(yōu)先權(quán)高于正在處理的源的中斷申請(qǐng)仍可以產(chǎn)生(在全嵌套模式中這樣的中斷是被屏蔽的)。 當(dāng)某個(gè)中斷源要退出中斷服務(wù)程序前,用軟件檢查它是否是這個(gè)從8259A中的惟一的中斷源。檢查的辦法是送一個(gè)非特殊中斷結(jié)束(EOI)命令給這個(gè)從8259A,然后讀它的ISR,檢查它是否為0。若為0,則這個(gè)從8259A中的中斷源是惟一的;否則就不是惟一的。只有在讀回的ISR為0時(shí),再把另一個(gè)非特殊EOI命令送至主8259A,結(jié)束

51、此從8259A的中斷。 905.中斷優(yōu)先權(quán)旋轉(zhuǎn)在實(shí)際應(yīng)用中,中斷源的優(yōu)先權(quán)的情況是比較復(fù)雜的,不一定有明顯的等級(jí),而且優(yōu)先權(quán)還有可能改變。所以,不能總是規(guī)定IR0優(yōu)先權(quán)最高,而IR7優(yōu)先權(quán)最低,而要能根據(jù)情況來改變。在8259A中有兩種改變優(yōu)先權(quán)的辦法。(1)自動(dòng)旋轉(zhuǎn)在某些應(yīng)用情況下,若干個(gè)中斷源有相等的優(yōu)先權(quán)。因此,當(dāng)某一個(gè)中斷源服務(wù)完以后,它的優(yōu)先權(quán)應(yīng)該變成最低的。這樣,某個(gè)中斷源的請(qǐng)求必須等待,在最壞情況下,必須等待其他7個(gè)源都服務(wù)一次以后才能再服務(wù)。下面用圖8-20說明在這種工作模式下,優(yōu)先權(quán)是如何改變的。91在旋轉(zhuǎn)以前,若IR4和IR6同時(shí)有中斷請(qǐng)求,而當(dāng)時(shí)的優(yōu)先權(quán)次序?yàn)镮R0最高,

52、IR7最低,如圖8-20(a)所示。因此,就服務(wù)IR4的請(qǐng)求。而在IR4被服務(wù)以后,它的優(yōu)先權(quán)變?yōu)樽畹偷牧?優(yōu)先權(quán)的等級(jí)為7),而IR5就變?yōu)閮?yōu)先權(quán)等級(jí)最高的了(優(yōu)先權(quán)的等級(jí)為0),如圖8-20(b)所示。因而,接著就應(yīng)該響應(yīng)IR6的請(qǐng)求。這種工作模式,可由OCW2來規(guī)定。 9293(2)特殊旋轉(zhuǎn)方式上述的自動(dòng)旋轉(zhuǎn)方式,適用于設(shè)備的優(yōu)先權(quán)相等的情況下。特殊旋轉(zhuǎn)方式可用程序來改變優(yōu)先權(quán)??梢杂肙CW2來設(shè)置最低優(yōu)先權(quán)的源,則別的輸入線的優(yōu)先權(quán)也就相應(yīng)固定了。例如設(shè)置IR5為最低優(yōu)先權(quán),則IR6的優(yōu)先權(quán)就變?yōu)樽罡叩牧?。在這種工作模式下,優(yōu)先權(quán)的設(shè)置是由OCW2決定的,可以用設(shè)置優(yōu)先權(quán)命令,即R=1

53、,SL=1,EOI=0,此時(shí)L2L0規(guī)定為最低優(yōu)先權(quán)源的編碼。優(yōu)先權(quán)還可以在執(zhí)行EOI命令時(shí)予以改變,這就要使OCW2中的R=1,S=1,EOI=1,同樣L2L0為要改變?yōu)樽畹蛢?yōu)先權(quán)源的編碼。 946.中斷結(jié)束命令當(dāng)某一個(gè)中斷源的服務(wù)完成時(shí),必須給8259A一個(gè)中斷結(jié)束命令,使這個(gè)源在ISR中的相應(yīng)位復(fù)位。在不同的工作情況下,8259A可以有幾種不同的給出中斷結(jié)束命令的方法。(1) 自動(dòng)中斷結(jié)束模式(AEOI)可以在ICW4中規(guī)定工作在這種模式,則在最后一個(gè)中斷響應(yīng)周期(對(duì)于MCS-86為第二個(gè))的INTA信號(hào)的后沿8259A自動(dòng)地使中斷源在ISR中的相應(yīng)位復(fù)位。這種方式顯然只能用于不要求中斷

54、嵌套的情況下。 95(2) 非自動(dòng)中斷結(jié)束方式(EOI)在這種工作方式下,當(dāng)中斷服務(wù)完成從中斷服務(wù)程序返回之前,必須輸送中斷結(jié)束(EOI)命令。若是工作在8259A級(jí)連的情況下,則必須送兩個(gè)EOI命令,一個(gè)送給從8259A,另一個(gè)送給主8259A(若是在特殊嵌套模式下,在送了第一個(gè)EOI命令后,必須經(jīng)過檢查確定這一片從 8259A的所有申請(qǐng)中斷的源都已經(jīng)服務(wù)了,才向主8259A送出另一個(gè)EOI命令)。96EOI命令又有兩種形式: 特殊的和非特殊的。當(dāng)8259A是工作在全嵌套模式,則當(dāng)服務(wù)過的源就是中斷優(yōu)先權(quán)最高的源,可以用非特殊EOI命令使它在ISR中的相應(yīng)位復(fù)位。但是當(dāng)工作在特殊的全嵌套模式

55、時(shí),8259A可能不能確定剛服務(wù)的源的等級(jí),就要用特殊的EOI命令,此時(shí)OCW2中的L2L0就是在ISR中要復(fù)位的位的編碼。但若這一位在特殊的屏蔽模式中由IMR的位屏蔽,則不能由特殊的EOI命令復(fù)位。兩種EOI命令是由OCW2規(guī)定的。 977.讀8259A的狀態(tài)8259A內(nèi)部幾個(gè)寄存器的狀態(tài),可以讀至CPU中,以供用戶了解8259A的工作狀況。在讀命令之前,輸出一個(gè)OCW3,令其中RR=1,RIS=0,則用讀命令可以讀入中斷請(qǐng)求寄存器IRR的狀態(tài),其中包含著尚未被響應(yīng)的中斷源的情況。在一個(gè)讀命令之前,輸出一個(gè)OCW3,其中RR=1,RIS=1,則用讀命令可以讀入在服務(wù)的中斷寄存器ISR的狀態(tài),

56、其中包含著處在服務(wù)過程中的中斷源的情況,也可以看到是否處在中斷嵌套的情況下。當(dāng)用讀命令,而地址總線的A0為0,則可讀入中斷屏蔽寄存器IMR的狀態(tài),這中間包含著所設(shè)置的中斷屏蔽的情況。 988.8259A的級(jí)連在一個(gè)系統(tǒng)中,8259A可以級(jí)連,有一個(gè)主8259A,若干個(gè)從8259A,最多可以有8個(gè)從8259A,把中斷源擴(kuò)展到64個(gè)。8259A級(jí)連的典型情況如圖8-21所示。主8259A的三條級(jí)連線CAS0、CAS1、CAS2作為輸出線,連至每一個(gè)從8259A的CAS0、CAS1、CAS2。每個(gè)從8259A的中斷請(qǐng)求信號(hào)INT,連至主8259A的一個(gè)中斷請(qǐng)求輸入端。主8259A的INT線連至CPU

57、的中斷請(qǐng)求輸入端。主8259A和每一片從8259A必須分別初始化和設(shè)置必要的工作狀態(tài)。當(dāng)任一個(gè)從8259A有中斷請(qǐng)求時(shí),經(jīng)過主8259A向CPU發(fā)出請(qǐng)求,當(dāng)CPU響應(yīng)中斷時(shí),在每一個(gè)中斷響應(yīng)周期,主CPU通過三條級(jí)連線輸出被響應(yīng)中斷的從8259A的編碼。則由此編碼確定的從8259A在第二個(gè)中斷響應(yīng)周期輸出它的中斷向量(對(duì)于MCS-86系統(tǒng)) 。 991001018259A編程 初始化 中斷向量裝入示例102中斷程序流程1038259A初始化單片8259的系統(tǒng)需要初始化ICW1、ICW2、ICW4(可選)多片8259級(jí)聯(lián)的系統(tǒng)需要初始化ICW1、ICW2、ICW3、ICW4(可選)只有在需要特殊

58、全嵌套方式、緩沖方式、中斷自動(dòng)結(jié)束方式時(shí),才設(shè)置ICW4不設(shè)置ICW4時(shí),缺省為:非特殊全嵌套方式、非緩沖方式、一般中斷結(jié)束方式 104例:單片8259A,電平觸發(fā)方式、中斷號(hào)從40H開始,非緩沖模式、一般全嵌套,自動(dòng)結(jié)束中斷。 MOV AL, 1BH ; 8259A初始化,00011011OUTB0H,AL ;設(shè)置ICW1MOV AL,42H ; 01000010OUTB1H, AL ;設(shè)置ICW2MOV A, 03H ; 00000011OUTB1H, AL ;設(shè)置ICW4直接將中斷服務(wù)程序的入口地址裝入中斷矢量表中MOVAX, 0MOVES, AXMOVDI, n;中斷矢量號(hào)n DISHLDI, 1;n 2SHLDI, 1;n 4MOVAX, OFFSET INTser;中斷服務(wù)程序的偏移量AXMOVBX, SEG INTser;中斷服務(wù)程序的段基址BXMOVES: DI, AX;中斷服務(wù)程序的偏移量矢量表MOVES: DI+2, BX;中斷服務(wù)程序的段基址矢量表已知:某一中斷矢量

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論