最初,中斷技術(shù)引入計(jì)算機(jī)系統(tǒng),只是為了解決快速的CPU與慢速外設(shè)之間傳送數(shù)據(jù)的矛盾,隨著計(jì)算機(jī)技術(shù)的發(fā)展,越來越多的功能通過中斷技術(shù)來實(shí)現(xiàn),如計(jì)算機(jī)的故障檢測與自動(dòng)處理,實(shí)時(shí)信息處理,多道程序分時(shí)操作和人機(jī)交互等。中斷承載越來越多的功能,具體實(shí)現(xiàn)相對復(fù)雜,能熟練掌握中斷控制器的工作方式就尤為重要。
中斷是指CPU在執(zhí)行程序過程中,由于某種外設(shè)請求或內(nèi)部事件的作用,強(qiáng)迫CPU停止當(dāng)前正在執(zhí)行的程序,專去為該事件服務(wù),待事件服務(wù)結(jié)束后,能自動(dòng)的返回到被中斷的程序繼續(xù)執(zhí)行。中斷的智慧來源于生活,如我們在看DVD時(shí),熱水燒開了,我們便暫停去處理開水,回來繼續(xù)。中斷需要硬件和軟件協(xié)同工作,構(gòu)成中斷系統(tǒng)。中斷一般分為外部中斷和內(nèi)部中斷,外部中斷亦稱硬件中斷,又分為不可屏蔽和可屏蔽中斷,分別通過CPU的NMI和INTR引腳提出請求;內(nèi)部中斷又稱軟件中斷,是內(nèi)部程序調(diào)試、程序異常和程序設(shè)計(jì)需要主動(dòng)設(shè)置的必要中斷,但對CPU來說,中斷只有一種,處理過程都是去執(zhí)行一個(gè)中斷服務(wù)程序。
為了幫助CPU管理中斷,Intel公司為80X86CPU專門設(shè)計(jì)了可編程中斷控制器,該芯片有很強(qiáng)的中斷管理功能,單片8259A可以管理8級外部中斷,并對中斷可以有效屏蔽、多個(gè)中斷進(jìn)行判優(yōu)、嵌套、多種結(jié)束方式的管理,該芯片還提供級聯(lián),并且與CPU相連不需要任何額外電路。
中斷處理過程通常由中斷請求、中斷應(yīng)答、判優(yōu),執(zhí)行中斷及返回多個(gè)環(huán)節(jié)構(gòu)成,下面結(jié)合8259A的內(nèi)部結(jié)構(gòu)圖來描述該過程:
8259A內(nèi)部結(jié)構(gòu)圖如圖1所示。
中斷請求:外部中斷請求通過電平或跳變觸發(fā)時(shí),通過IRi引腳記錄,再通過IMR寄存器過濾,有允許的中斷時(shí)通過INT引腳向CPU發(fā)出請求;
中斷應(yīng)答:當(dāng)IF=1,且CPU執(zhí)行完當(dāng)前指令時(shí)檢測INT引腳,如果有請求,給出請求應(yīng)答信號;
判優(yōu):8259A收到應(yīng)答信號之后,對IRi進(jìn)行優(yōu)先級的判斷,將優(yōu)先級最高的請求送ISR,8259A的優(yōu)先級管理是眾多工作方式的一種,通過OCW2進(jìn)行設(shè)置;
執(zhí)行中斷:所有過程都為了執(zhí)行中斷做準(zhǔn)備,中斷服務(wù)程序可以是系統(tǒng)的,也可以是用戶編寫的,都需要妥善安排中斷向量,這個(gè)過程也體現(xiàn)8259A管理中斷的靈活性;
返回:中斷服務(wù)程序執(zhí)行完畢,返回原先被中斷的程序上繼續(xù)執(zhí)行。
以上過程是連續(xù)的,需要軟硬件協(xié)作完成,硬件依賴電路,軟件依賴程序。
圖1 8259A內(nèi)部結(jié)構(gòu)圖
8259A的工作方式設(shè)定及運(yùn)行中的控制,均由8086發(fā)來的命令字(1byte代碼)決定。命令字分初始化命令字和操作命令字兩種,系統(tǒng)向8259A兩個(gè)端口之一寫入,由于8259A受端口選擇線A0的限制,片內(nèi)寄存器只能使用兩個(gè)端口地址,因此多個(gè)寄存器使用相同端口,為了區(qū)別不同寄存器,一些寄存器的設(shè)置了特征位,8259A根據(jù)接收命令字的端口號特征位及順序決定命令字的屬性,具體說來,ICW(Initialization Command Word)有嚴(yán)格的接收順序的要求,OCW(Operation Command Word)有端口號的要求。
初始化命令字有四個(gè):ICW1~I(xiàn)CW4,有接收順序要求,關(guān)于每一個(gè)初始化命令字的具體含義本文不再贅述,以流程圖的形式給出初始化過程:
8259A初始化過程如圖2所示。
圖2 8259A初始化過程
首先對芯片本身進(jìn)行初始化,即觸發(fā)方式,是否級聯(lián)等,因涉及硬件設(shè)置需要提前安排,在第一步ICW1中完成設(shè)置,之后更換成奇地址,在ICW2中預(yù)置中斷類型碼,這里只給出高5位,D2~D0位取決于IR0~I(xiàn)R7中哪一個(gè)中斷,組合以后的ICW2送CPU;ICW3用來設(shè)置多片級聯(lián),如果沒有直接進(jìn)入ICW4,如果有級聯(lián),需要在主從片初始化過程中分別寫ICW3,并將二者級聯(lián)位置對應(yīng);ICW4主要用來設(shè)置中斷結(jié)束方式。
初始化過程涉及到中斷系統(tǒng)的軟硬件的諸多問題,一旦完成初始化,相應(yīng)硬件和中斷服務(wù)程序也會(huì)受其制約,所以需要對中斷系統(tǒng)的全局有控制能力的程序員完成初始化工作,在80X86系統(tǒng)中,對系統(tǒng)的8259A的初始化編程在系統(tǒng)啟動(dòng)以后BIOS自動(dòng)完成,用戶在使用過程中不能對再對其進(jìn)行初始化操作。
操作命令字有三個(gè),OCW1用于設(shè)置中斷屏蔽,OCW2用于設(shè)置中斷優(yōu)先級和中斷結(jié)束方式字,OCW3用于設(shè)置和清除特殊屏蔽方式和讀取寄存器狀態(tài)。
OCW1比較容易理解,用來設(shè)置中斷屏蔽,寫入IMR中,完成對外部中斷信號屏蔽的作用;
OCW2相對復(fù)雜,具體格式如下:
該命令字涉及判優(yōu)和結(jié)束中斷兩種工作方式,而且在特殊方式下需要和D2~D0位配合,情形相對復(fù)雜,大多數(shù)程序員需要參看R,SL,EOI的組合功能表來確定工作方式,我們從優(yōu)先級和中斷結(jié)束方式本身來看設(shè)計(jì)者在OCW2中體現(xiàn)出的智慧,深刻理解該命令字。
該控制字R位表示優(yōu)先級的“循環(huán)”控制,EOI表示結(jié)束方式,單從控制的角度,只需要這兩位配合有4種組合:00、01、10、11,分別表示優(yōu)先級不循環(huán)且自動(dòng)結(jié)束、優(yōu)先級不循環(huán)但發(fā)結(jié)束命令、設(shè)置優(yōu)先級循環(huán)但不發(fā)結(jié)束命令、優(yōu)先級循環(huán)且發(fā)結(jié)束命令。從工作方式的角度,8259A優(yōu)先級分為固定優(yōu)先級和循環(huán)優(yōu)先級,固定優(yōu)先級還分為普通全嵌套方式和特殊全嵌套方式,循環(huán)優(yōu)先級也分為自動(dòng)循環(huán)和特殊循環(huán),這樣我們發(fā)現(xiàn)僅用一位R來設(shè)置只能表示兩種情況,所以根據(jù)具體含義,設(shè)計(jì)者引入SL,即set level,凡是涉及“特殊方式”的都需要將SL位置1與D2~D0位配合,這樣來表述這四種優(yōu)先級方式;另外關(guān)于結(jié)束方式,分成兩類:中斷自動(dòng)結(jié)束和中斷非自動(dòng)結(jié)束,其中非自動(dòng)結(jié)束還包括普通和特殊兩種,同前,特殊的含義是需要額外指定某一級中斷的,這三種方式也不能用EOI一位就表示清楚,所以也需要SL配合,這里的SL就成了身兼二職,如果SL不生效,那么R和EOI都是常規(guī)方式,所以SL一旦生效,程序員一定要清楚和R配合還是和EOI配合,為了不混淆,R|SL|EOI為全1的狀態(tài)被固定成“特殊優(yōu)先級循環(huán)方式的初始隊(duì)列最低優(yōu)先級”,即SL指定的D2~D0位配合的是R,而不是EOI。
OCW3的ESMM是SMM的“使能”位,所以ESMM位為0,SMM無效;ESMM為1,SMM分兩種情況,為0取消特殊屏蔽,為1設(shè)置特殊屏蔽。另外CPU可以通過讀內(nèi)部寄存器來了解8259的工作狀態(tài),RR為1表示讀寄存器,具體讀哪一個(gè)寄存器,由RIS指定,RIS取1,讀ISR,RIS為0時(shí),讀IRR。
通過以上對初始化過程和操作命令字的解析,將8259A的編程過程進(jìn)行有效梳理,并且在程序設(shè)計(jì)中將中斷的各個(gè)環(huán)節(jié)固化下來,通過深刻透徹的理解8259A的各種工作方式來了解如何通過程序來完成中斷的軟硬件的有效配合。
[1]馬群生,溫冬嬋.微計(jì)算機(jī)技術(shù)[M].清華大學(xué)出版社,2011.
[2]張凡,盛珣華.微機(jī)原理與接口技術(shù)[M].清華大學(xué)出版社,2010.
[3]李相儉.淺談可編程中斷控制器[J].科技信息,2010,10:219.
[4]司海峰.中斷控制器8259A操作命令字OCW2高三位組合細(xì)探[J].科技創(chuàng)新導(dǎo)報(bào),2008(02):17-18.