版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
5.1接口技術(shù)
5.2中斷系統(tǒng)
5.3DMA系統(tǒng)
5.4定時(shí)/計(jì)數(shù)器
5.5本章小結(jié)
習(xí)題與思考題5.1.1接口技術(shù)的功能
1.接口的功能
1)?I/O設(shè)備選擇功能
計(jì)算機(jī)系統(tǒng)中一般帶有多種外設(shè),而CPU在同一時(shí)間里只能與一臺(tái)I/O設(shè)備交換信息,這就要借助于接口的地址譯碼來選定外設(shè),只有被選定的I/O設(shè)備才能與CPU進(jìn)行數(shù)據(jù)交換。接口電路的任務(wù)之一就是對I/O設(shè)備進(jìn)行地址譯碼。5.1接口技術(shù)
2)對輸入/輸出數(shù)據(jù)進(jìn)行緩沖、隔離和鎖存
由于外設(shè)的速度慢,CPU和總線又十分繁忙,因此在輸出環(huán)節(jié)中,一般都要安排鎖存環(huán)節(jié)(如鎖存器,稱為數(shù)據(jù)的輸出端口、輸出寄存器),以便鎖存CPU瞬間輸出數(shù)據(jù),同時(shí)也使較慢的外設(shè)有足夠的時(shí)間進(jìn)行處理,而CPU和總線可以處理其他工作。在輸入接口中,一般要安排緩沖隔離環(huán)節(jié)(如三態(tài)門,稱為數(shù)據(jù)的輸入端口、輸入三態(tài)緩沖器),只有當(dāng)CPU選通時(shí),才允許某個(gè)選定的輸入設(shè)備的數(shù)據(jù)線與系統(tǒng)總線的數(shù)據(jù)線連通,將選定輸入設(shè)備的數(shù)據(jù)送到系統(tǒng)總線上,其他輸入設(shè)備此時(shí)與數(shù)據(jù)總線隔離,這樣就不會(huì)造成總線的競爭。
3)對信號的形式和數(shù)據(jù)的格式進(jìn)行變換
由于計(jì)算機(jī)直接處理的信號為TTL電平或CMOS電平,I/O設(shè)備大多是復(fù)雜的機(jī)電設(shè)備,其電氣信號與CPU能處理的信號截然不同,因此在輸入/輸出時(shí),必須將它們轉(zhuǎn)變?yōu)檫m合對方的形式。例如,將電平信號變?yōu)殡娏餍盘?,將弱電信號變?yōu)閺?qiáng)電信號,將數(shù)字信號變?yōu)槟M信號,將并行數(shù)據(jù)格式變?yōu)榇袛?shù)據(jù)格式等。
4)與CPU和I/O設(shè)備進(jìn)行聯(lián)絡(luò)
I/O接口處在CPU和I/O設(shè)備的中間,在傳送數(shù)據(jù)時(shí)經(jīng)常要在兩個(gè)方向進(jìn)行聯(lián)絡(luò),即需把I/O設(shè)備的狀態(tài)傳遞給CPU,同時(shí)也需要把CPU產(chǎn)生的控制信號傳遞給I/O設(shè)備。換言之,通常I/O接口為了完成I/O設(shè)備的輸入/輸出,需設(shè)置數(shù)據(jù)端口以傳遞數(shù)據(jù)信息,還需設(shè)置狀態(tài)端口以傳遞狀態(tài)信息,設(shè)置控制端口以傳遞控制信息。
5)中斷管理功能
當(dāng)外設(shè)需要及時(shí)得到CPU服務(wù),特別是一些隨機(jī)需要與CPU交換信息的外設(shè),就要求接口中設(shè)置中斷控制器,為CPU處理有關(guān)中斷事務(wù)(中斷請求、中斷優(yōu)先級設(shè)置,提供中斷向量等)。這樣既增加了微機(jī)系統(tǒng)對外設(shè)隨機(jī)事件的處理能力,又使CPU與外設(shè)并行工作,提高了CPU的利用率。
6)可編程功能
目前,外設(shè)和接口芯片幾乎都是可編程的,這樣,在不改變接口硬件電路的情況下,只要更改接口驅(qū)動(dòng)程序就可以改變接口的工作方式,大大增加了接口的靈活性和可擴(kuò)展性,使接口向智能化方向發(fā)展。
2.?I/O尋址方式
在計(jì)算機(jī)中主要有兩種輸入/輸出尋址方式:存儲(chǔ)器對應(yīng)的I/O尋址方式和端口I/O尋址方式。
1)存儲(chǔ)器對應(yīng)的I/O尋址方式
在這種尋址方式中,外部設(shè)備的I/O端口是存儲(chǔ)器的某些存儲(chǔ)單元,每一個(gè)外部設(shè)備占用一個(gè)或幾個(gè)存儲(chǔ)器地址,從而處理器(CPU)對外部設(shè)備輸入/輸出一個(gè)數(shù)據(jù)相當(dāng)于做一次存儲(chǔ)器讀/寫操作。這種I/O尋址方式由于外部設(shè)備占用內(nèi)存單元地址(I/O與存儲(chǔ)器共用內(nèi)存分布空間),會(huì)使計(jì)算機(jī)的有效內(nèi)存容量減少,不便于計(jì)算機(jī)的并行操作(存儲(chǔ)器操作和I/O),在目前的計(jì)算機(jī)系統(tǒng)中已不再使用。
2)端口I/O尋址方式
在這種尋址方式中,處理器(CPU)有專門的I/O指令,在計(jì)算機(jī)系統(tǒng)中使用不同的端口地址來區(qū)分不同的外部設(shè)備,操作時(shí)以端口(PORT)作為尋址單元。接口中的不同信息(數(shù)據(jù)、狀態(tài)和控制信息)均通過不同的端口地址來區(qū)分。一般來說,一個(gè)外部設(shè)備往往需要多個(gè)端口地址。這種端口I/O尋址方式是目前IBMPC系列計(jì)算機(jī)以及其他類型的微型計(jì)算機(jī)系統(tǒng)普遍采用的I/O尋址方式。
3.?I/O地址譯碼方法
可以說,掌握了存儲(chǔ)器的地址譯碼方法,就掌握了存儲(chǔ)器芯片應(yīng)用的精髓。存儲(chǔ)器的地址譯碼方式可以分為兩種,一種稱為全地址譯碼,另一種稱為部分地址譯碼。
1)全地址譯碼方式
所謂全地址譯碼,就是構(gòu)成存儲(chǔ)器時(shí)要使用全部地址總線(對于8088CPU,地址總線為20位)信號,即所有的高位地址信號用來作為譯碼器的輸入,低位地址信號接存儲(chǔ)芯片的地址輸入線,從而使得存儲(chǔ)器芯片上的每一個(gè)單元在整個(gè)內(nèi)存空間中具有唯一的一個(gè)地址。
對6264芯片來講,就是用低13位地址信號(A0~A12)決定每個(gè)單元的片內(nèi)地址,即片內(nèi)尋址;而用高7位地址信號(A19~A13)決定芯片在內(nèi)存中的地址范圍,即做片選地址譯碼,如圖5.1所示。圖5.16264的全地址譯碼連接圖5.1所示是一片SRAM6264與8086/8088系統(tǒng)的連接圖。它用地址總線的高7位地址信號(A19~A13)作為地址譯碼器的輸入,地址總線的低13位地址信號A12~A0接到芯片的A12~A0端,故這是一個(gè)全地址譯碼方式的連接??梢钥闯觯灰狝19~A13為以下二進(jìn)制位時(shí),就可訪問6264存儲(chǔ)單元(具體哪一個(gè)存儲(chǔ)單元由低13位(A12~A0)決定):
1011101
低13位(A12~A0)可為0000000000000~1111111111111之間的任何一個(gè)數(shù),所以該片6264的地址范圍為
10111010000000000000=BA000H
到85
10111011111111111111=BBFFFH
若將圖5.1中的“與非”門改為“或”門,如圖5.2所示,則6264的地址范圍就變成44000H~45FFFH。由此可以看出,使用不同的譯碼電路,可將存儲(chǔ)器芯片映射到內(nèi)存空間中的任意一個(gè)范圍中。圖5.2或門譯碼
2)部分地址譯碼方式
顧名思義,部分地址譯碼就是僅把地址總線的一部分地址信號線與存儲(chǔ)器連接,通常是用高位地址信號的一部分(而不是全部)為片選譯碼信號。圖5.3所示就是一個(gè)部分地址譯碼的例子。
從圖5.3可以看出,A19~A0為以下二進(jìn)制位時(shí),就可訪問6264存儲(chǔ)單元:
11111
低13位可取0000000000000~1111111111111,所以該片的地址范圍為
11111
0000000000000~11111
1111111111111圖5.3部分地址譯碼連接圖從圖5.3可以看出,A14、A13為任何值,只要其余地址線的信號在上面的范圍內(nèi),都可訪問該6264的某一存儲(chǔ)單元。例如,當(dāng)A14、A13分別為00、01、10、11時(shí),該6264芯片的地址范圍為
11111000000000000000=F8000H
到當(dāng)A14A13=00
11111001111111111111=F9FFFH
FA000H~FBFFFH當(dāng)A14A13=01
FC000H~FDFFFH當(dāng)A14A13=10
FE000H~FFFFFH當(dāng)A14A13=11即該6264芯片共占據(jù)了四個(gè)8KB的內(nèi)存空間,而6264芯片本身只有8KB的存儲(chǔ)容量。為什么會(huì)出現(xiàn)這種情況呢?其原因就在于圖中的高位地址譯碼并沒有利用地址總線上的全部地址信號,而只利用了其中的一部分。按這種地址譯碼方式,芯片占用的這四個(gè)8KB的區(qū)域決不可再分配給其他芯片。否則,會(huì)造成總線競爭而使微機(jī)無法正常工作。另外,在對這個(gè)6264芯片進(jìn)行存取時(shí),可以使用以上四個(gè)地址范圍的任意一個(gè)。部分地址譯碼使地址出現(xiàn)重疊區(qū),而重疊的部分必須空著不準(zhǔn)使用,這就破壞了地址空間的連續(xù)性,實(shí)際上就是減小了總的可用存儲(chǔ)地址空間。部分地址譯碼方式的優(yōu)點(diǎn)是其譯碼器的構(gòu)成比較簡單,成本較低。圖5.3中就少用了兩條譯碼輸入線,但這點(diǎn)是以犧牲可用內(nèi)存空間為代價(jià)換來的。可以想象,參加譯碼的高位地址越少,譯碼器就越簡單,而同時(shí)所構(gòu)成的存儲(chǔ)器所占用的內(nèi)存地址空間就越多。若只用一條高位地址線做選片信號,如在圖5.3中,若只將Al9接在上,則這片6264芯片將占據(jù)00000H~7FFFFH共512KB的地址空間。這種只用一條高位地址線進(jìn)行選片的連接方法稱為線性選擇,這種地址譯碼方法一般僅在系統(tǒng)中只使用1~2個(gè)存儲(chǔ)芯片時(shí)考慮使用。
在實(shí)際中,采用全地址譯碼還是部分地址譯碼,應(yīng)根據(jù)具體情況來定。如果地址資源很富裕,為使電路簡單可考慮用部分地址譯碼方式;如果要充分利用地址空間,則應(yīng)采用全地址譯碼方式。
4.接口的典型結(jié)構(gòu)
1)內(nèi)部結(jié)構(gòu)
圖5.4所示為I/O接口的典型結(jié)構(gòu),其內(nèi)部一般由數(shù)據(jù)、狀態(tài)、控制三類寄存器組成,用來保存和交換不同的信息??赏ㄟ^數(shù)據(jù)、狀態(tài)、控制三種端口的地址來訪問其中的數(shù)據(jù)。這三種端口簡稱為數(shù)據(jù)口、狀態(tài)口、控制口。對于數(shù)據(jù)口,在I/O設(shè)備輸入時(shí),保存I/O設(shè)備輸入的數(shù)據(jù);在I/O設(shè)備輸出時(shí),保存向I/O設(shè)備輸出的數(shù)據(jù)。有些數(shù)據(jù)寄存器同時(shí)支持輸入/輸出,那是因?yàn)槠鋬?nèi)部具有輸入和輸出兩套設(shè)備,但共用一個(gè)端口地址,隨讀/寫控制的不同分別訪問其中的輸入或輸出寄存器。I/O接口中的狀態(tài)和控制寄存器分別用來保存狀態(tài)和命令。通過數(shù)據(jù)總線,CPU從狀態(tài)口中讀取當(dāng)前的狀態(tài),也可向控制口寫入命令,以控制I/O設(shè)備的工作。圖5.4I/O接口的典型結(jié)構(gòu)
2)外部特性
接口電路的外部特性由其對外的引腳體現(xiàn)。接口引腳根據(jù)其連接的特性又分為面向CPU一側(cè)的信號和面向外設(shè)一側(cè)的信號。對于面向CPU一側(cè)的信號,一般都引出了數(shù)據(jù)線、地址線和控制線。在眾多的I/O電路中,其數(shù)據(jù)線、地址線及讀/寫控制線比較規(guī)整。面向外設(shè)的信號比較復(fù)雜,因?yàn)橥庠O(shè)種類繁多,型號不一,所提供的信號五花八門,其功能定義、時(shí)序及有效電平等差異較大,要在清楚外設(shè)工作原理與工作特點(diǎn)的基礎(chǔ)上才能真正理解某些信號的含義。
因?yàn)镮/O接口是連接CPU系統(tǒng)和外設(shè)的橋梁,所以對其外部特性的掌握是實(shí)現(xiàn)I/O接口物理連接的基礎(chǔ),是接口技術(shù)的一個(gè)重點(diǎn)。5.1.2輸入/輸出傳送方式
CPU與外設(shè)之間傳輸數(shù)據(jù)的控制方式通常有三種:程序方式、中斷方式和DMA方式。
1.直接程序控制方式
程序方式就是由用戶進(jìn)程來直接控制內(nèi)存或CPU和外圍設(shè)備之間的數(shù)據(jù)傳送。根據(jù)程序控制的方法不同,又可以分為無條件輸入/輸出方式和條件輸入/輸出方式
1)無條件輸入/輸出方式
該方式在傳送前,CPU不需要了解端口的狀態(tài),直接進(jìn)行數(shù)據(jù)傳送,如圖5.5所示。這就要求CPU與外設(shè)交換信息時(shí),對于任意的輸入/輸出時(shí)刻,都能保證外設(shè)總是處于“準(zhǔn)備好”狀態(tài)。圖5.5無條件輸入/輸出(a)無條件輸入;(b)無條件輸出假設(shè),地址譯碼器的譯碼為200H,我們可用指令:
MOV DX,200H
IN AL,DX
把外設(shè)的數(shù)據(jù)輸入到AL寄存器。
同樣,我們可用指令:
MOV DX,200H
OUT DX,AL
把AL的值通過鎖存器輸出外設(shè)。
無條件輸入/輸出方式的優(yōu)點(diǎn)是涉及的軟、硬件都比較簡單,其缺點(diǎn)是局限性較大。因?yàn)楹茈y保證外設(shè)在每次信息傳送時(shí)都處于“準(zhǔn)備好”狀態(tài)。
2)條件輸入/輸出方式
該方式又稱查詢方式,即通過程序查詢相應(yīng)設(shè)備的狀態(tài)。傳送前,CPU先查詢端口狀態(tài),在端口就緒時(shí)進(jìn)行數(shù)據(jù)傳送。
一般外設(shè)均可以提供一些反映其狀態(tài)的信號。對于輸入設(shè)備來數(shù),它能夠提供“準(zhǔn)備好”(READY)信號,READY?=?1則表示輸入數(shù)據(jù)已準(zhǔn)備好。輸出設(shè)備則提供“忙”(BUSY)信號,BUSY?=?1表示當(dāng)前時(shí)刻不能接收來自CPU的輸出數(shù)據(jù),只有當(dāng)BUSY?=?0時(shí),才表示當(dāng)前時(shí)刻可以接收來自CPU的輸出數(shù)據(jù)。
圖5.6所示為條件輸出方式示意圖。圖5.6條件輸出方式示意圖條件輸入/輸出方式的優(yōu)點(diǎn)是能夠保證輸入/輸出數(shù)據(jù)的可靠性,其缺點(diǎn)是在這種方式下,CPU要不斷查詢外設(shè)的狀態(tài),當(dāng)外設(shè)未準(zhǔn)備好時(shí),CPU只能循環(huán)等待,不能執(zhí)行其他程序,這樣就浪費(fèi)了CPU的大量時(shí)間,降低了CPU的利用率。
2.中斷方式
在查詢方式中,CPU要不斷地讀取狀態(tài)字以檢測狀態(tài)信息,因此傳送速率慢,CPU利用率低。特別是在有多個(gè)外設(shè)的系統(tǒng)中,多個(gè)外設(shè)要求CPU為它服務(wù)是隨機(jī)的,若采用查詢方式工作,就不能保證系統(tǒng)實(shí)時(shí)地對外設(shè)的請求做出響應(yīng)。為了提高CPU的效率,使系統(tǒng)有實(shí)時(shí)性能,于是產(chǎn)生了中斷處理技術(shù)。采用中斷方式傳送信息時(shí),在外設(shè)沒有做好數(shù)據(jù)傳送準(zhǔn)備時(shí),CPU可執(zhí)行與傳送數(shù)據(jù)無關(guān)的其他指令。當(dāng)外設(shè)做好傳送準(zhǔn)備后,主動(dòng)向CPU請求中斷,若CPU響應(yīng)這一請求,則暫停正在運(yùn)行的程序,轉(zhuǎn)入中斷服務(wù)程序,完成數(shù)據(jù)傳送,待服務(wù)完畢后,自動(dòng)返回原來運(yùn)行的程序。整個(gè)過程如圖5.7所示。圖5.7中斷方式程序示意圖
3.?DMA方式
利用中斷進(jìn)行信息傳送可以大大提高CPU的利用率,但是其傳送過程必須由CPU進(jìn)行監(jiān)控。每次中斷,CPU都必須進(jìn)行斷點(diǎn)及現(xiàn)場信息的保護(hù)和恢復(fù)操作,這些都是一些額外的,但又必須要做的操作,會(huì)占用一定的CPU時(shí)間。如果需要在內(nèi)存的不同區(qū)域之間,或者在內(nèi)存與外設(shè)端口之間進(jìn)行數(shù)據(jù)塊的高速傳送,則用查詢或中斷方式就不能滿足速度上的要求,這時(shí)應(yīng)采用直接數(shù)據(jù)傳送(DirectMemoryAccess,DMA),即DMA數(shù)據(jù)傳送方式。
DMA數(shù)據(jù)傳送是在內(nèi)存的不同區(qū)域之間,或者在內(nèi)存與外設(shè)端口之間直接進(jìn)行的數(shù)據(jù)傳送,它不經(jīng)過CPU中轉(zhuǎn),是由硬件直接控制的一種數(shù)據(jù)傳送方式,可以大大提高數(shù)據(jù)的傳送速度。
有關(guān)DMA的詳細(xì)論述請見5.3節(jié)。DMA方式的接口示意圖如圖5.8所示。圖5.8DMA方式的接口示意圖當(dāng)CPU與外設(shè)用查詢方式傳送數(shù)據(jù)時(shí),外設(shè)完全處于被動(dòng)狀態(tài),只有被CPU查詢到并且具備傳送數(shù)據(jù)的條件時(shí)才有可能工作,因此在查詢方式下,CPU將大量時(shí)間花在等待上,降低了工作效率,因此在計(jì)算機(jī)技術(shù)中引入了中斷的概念。中斷是現(xiàn)代計(jì)算機(jī)必須具備的重要功能,也是計(jì)算機(jī)發(fā)展史上的一個(gè)重要里程碑,它的出現(xiàn)給計(jì)算機(jī)結(jié)構(gòu)與應(yīng)用帶來了新的突破。建立準(zhǔn)確的中斷概念和靈活掌握中斷技術(shù)是學(xué)好本門課程的關(guān)鍵之一。5.2中斷系統(tǒng)5.2.1中斷的基本原理
1.中斷的概念及分類
中斷是指計(jì)算機(jī)的CPU在正常運(yùn)行程序時(shí),由于內(nèi)部或外部某個(gè)緊急事件的發(fā)生,使CPU暫停正在運(yùn)行的程序,而轉(zhuǎn)去執(zhí)行請求中斷的那個(gè)外設(shè)或事件的中斷服務(wù)(處理)程序,待處理完后再返回被中斷的程序,繼續(xù)執(zhí)行的過程。例如,某個(gè)外設(shè)向CPU提出交換數(shù)據(jù)的中斷請求,此時(shí)CPU的主程序執(zhí)行到第N條指令,CPU接收到這個(gè)中斷請求并給予響應(yīng),將斷點(diǎn)即第N?+?1條指令的內(nèi)存地址保護(hù)入棧,后轉(zhuǎn)入中斷服務(wù)程序去執(zhí)行。當(dāng)完成中斷服務(wù)程序后,再返回到主程序的斷點(diǎn)繼續(xù)執(zhí)行。這樣,便產(chǎn)生了保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場的要求,即保護(hù)斷點(diǎn)和CPU中一些寄存器的內(nèi)容(在主程序中用到的可能在中斷服務(wù)程序中仍被使用的寄存器),當(dāng)數(shù)據(jù)交換完畢,即中斷返回時(shí),再恢復(fù)斷點(diǎn)和寄存器的內(nèi)容,以便繼續(xù)執(zhí)行主程序并且不會(huì)丟失中斷前的數(shù)據(jù)。早期中斷概念的引入是為了解決快速CPU與慢速外設(shè)間的速度匹配問題,以提高CPU的工作效率,因此中斷源主要是由外部硬件產(chǎn)生的。隨著計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的不斷改進(jìn)以及應(yīng)用技術(shù)的日益提高,中斷的適用范圍也隨之?dāng)U大,不再限于外部硬件產(chǎn)生中斷(稱硬件中斷或外中斷),還可由CPU內(nèi)部產(chǎn)生,即出現(xiàn)了所謂的內(nèi)部中斷。內(nèi)部中斷是為解決機(jī)器運(yùn)行時(shí)所出現(xiàn)的某些隨機(jī)事件及編程方便而出現(xiàn)的。把因內(nèi)部意外條件而改變程序執(zhí)行的流程,以報(bào)告出錯(cuò)情況和非正常狀態(tài)的過程或者由程序預(yù)先安排,即由指令I(lǐng)NTn調(diào)用中斷服務(wù)程序產(chǎn)生的中斷,稱為內(nèi)部中斷或軟件中斷。80286以上CPU稱內(nèi)部中斷為異常。如上所述,按產(chǎn)生中斷來源的不同,可將中斷分為外部中斷和內(nèi)部中斷,如圖5.9所示。
1)外部中斷
外部中斷是由CPU的外部中斷請求引腳NMI和INTR引起的中斷過程,可分為非屏蔽中斷和可屏蔽中斷兩種。
(1)非屏蔽中斷:若CPU的NMI引腳接收到一個(gè)有效高電平持續(xù)兩個(gè)時(shí)鐘周期以上的正跳變信號(上升沿)時(shí),則可能會(huì)產(chǎn)生一次中斷,由于這種中斷的響應(yīng)不受中斷允許標(biāo)志IF的控制,因此稱為非屏蔽中斷。圖5.9中斷源的種類
1)外部中斷
外部中斷是由CPU的外部中斷請求引腳NMI和INTR引起的中斷過程,可分為非屏蔽中斷和可屏蔽中斷兩種。
(1)非屏蔽中斷:若CPU的NMI引腳接收到一個(gè)有效高電平持續(xù)兩個(gè)時(shí)鐘周期以上的正跳變信號(上升沿)時(shí),則可能會(huì)產(chǎn)生一次中斷,由于這種中斷的響應(yīng)不受中斷允許標(biāo)志IF的控制,因此稱為非屏蔽中斷。非屏蔽中斷主要用于處理系統(tǒng)的意外或故障,如電源斷電、存儲(chǔ)器讀/寫錯(cuò)誤或受到嚴(yán)重的干擾。在IBMPC/XT中的非屏蔽中斷源有三種:浮點(diǎn)運(yùn)算協(xié)處理器8087的中斷請求、系統(tǒng)板上RAM的奇偶校驗(yàn)錯(cuò)和擴(kuò)展槽中的I/O通道錯(cuò)。以上三者中的任何一個(gè)都可以單獨(dú)提出中斷請求,但是否真正形成NMI信號,還要受NMI屏蔽寄存器的控制。當(dāng)這個(gè)屏蔽寄存器的D7?=?1時(shí)才允許向CPU發(fā)送NMI請求,否則即使有中斷請求,也不能發(fā)出NMI信號。NMI屏蔽寄存器的端口地址為A0H,可以用OUT指令對這一位寫入1或0,達(dá)到允許或禁止NMI的效果。Intel公司在設(shè)計(jì)8086/8088芯片時(shí),已將非屏蔽中斷NMI的中斷類型號預(yù)先定義為類型2。因此,當(dāng)NMI請求被響應(yīng)時(shí),不要求外部向CPU提供中斷類型號,CPU在總線上也不發(fā)送中斷應(yīng)答信號,而是CPU自動(dòng)轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序。
(2)可屏蔽中斷:可屏蔽中斷是由用戶定義的外部硬件中斷。當(dāng)外部中斷源向8086/8088CPU的INTR引腳發(fā)送一個(gè)高電平中斷請求信號時(shí),該信號必須保持到當(dāng)前指令的結(jié)束。這是因?yàn)镃PU只在每條指令的最后一個(gè)時(shí)鐘周期才對INTR引腳的狀態(tài)進(jìn)行采樣,如果CPU采樣到有可屏蔽中斷請求產(chǎn)生,它是否響應(yīng)還要取決于中斷允許標(biāo)志IF的狀態(tài)。當(dāng)中斷允許標(biāo)志IF?=?0時(shí),INTR的中斷請求被屏蔽;當(dāng)IF=1時(shí),產(chǎn)生一次可屏蔽中斷,并通過引腳向產(chǎn)生中斷請求的中斷源發(fā)送兩個(gè)中斷應(yīng)答信號的負(fù)脈沖。在接收到第二個(gè)負(fù)脈沖時(shí),外部中斷源接口電路自動(dòng)將中斷類型號送至數(shù)據(jù)總線,而CPU將自動(dòng)從數(shù)據(jù)總線上讀取被響應(yīng)中斷源的中斷類型號,由中斷類型號就可找到中斷服務(wù)程序的入口地址。在IBMPC/XT中,所有8個(gè)可屏蔽中斷的中斷源都先經(jīng)過中斷控制器8259A管理之后再向CPU發(fā)出INTR請求。而在IBMPC/AT中,使用兩片8259A,用來管理15級外部中斷。即IBMPC/AT在IBMPC/XT的基礎(chǔ)上,增加了一個(gè)從片8259A,形成主從式結(jié)構(gòu)。外部中斷源主要包括:
(1)一般的I/O設(shè)備。如鍵盤、顯示器、打印機(jī)等在完成自身的操作后,向CPU發(fā)出中斷請求,要求CPU為其服務(wù)。
(2)數(shù)據(jù)通道。如磁盤、磁帶等也可以向CPU發(fā)出中斷請求,要求CPU為其傳送數(shù)據(jù)。
(3)實(shí)時(shí)時(shí)鐘。在控制系統(tǒng)中,常需要定時(shí)檢測與控制,這時(shí)可采用外部時(shí)鐘電路,并編程控制其定時(shí)間隔。當(dāng)需要定時(shí)時(shí),CPU發(fā)出命令,啟動(dòng)時(shí)鐘電路開始計(jì)時(shí),待定時(shí)時(shí)間到,時(shí)鐘電路就發(fā)出中斷請求。
(4)故障源。計(jì)算機(jī)內(nèi)設(shè)有故障自動(dòng)檢測裝置,如電源斷電、存儲(chǔ)器出錯(cuò)、外設(shè)故障以及越限報(bào)警等意外事件都能使CPU產(chǎn)生中斷,進(jìn)行相應(yīng)的中斷處理。
2)內(nèi)部中斷
8086/8088有相當(dāng)豐富的內(nèi)部中斷功能。它們可以由CPU內(nèi)部硬件產(chǎn)生,也可由軟件的中斷指令I(lǐng)NTn引起,其中,n稱為中斷類型號。一部分已定義的中斷類型號用于CPU的特殊功能處理。
內(nèi)部中斷源主要包括:
(1)由于CPU的錯(cuò)誤產(chǎn)生異常。CPU在運(yùn)行過程中所發(fā)生的各種錯(cuò)誤都會(huì)引起中斷,如除法運(yùn)算出錯(cuò)、算術(shù)運(yùn)算溢出、邊界檢測出錯(cuò)、協(xié)處理器出錯(cuò)以及無效代碼故障等。
(2)程序執(zhí)行INT軟件中斷指令。用戶在調(diào)試外部中斷服務(wù)程序時(shí)可以用INTn指令來調(diào)用并檢查。另外,INTn中已有不少被微機(jī)系統(tǒng)的BIOS和DOS功能調(diào)用所定義,它們的操作大多涉及外設(shè)的I/O操作。
(3)為調(diào)試程序(DEBUG)設(shè)置的中斷。在程序調(diào)試時(shí),為了檢查中間結(jié)果,或者為了尋找程序問題所在,往往要求在程序中設(shè)置斷點(diǎn)或進(jìn)行單步操作,這些就要由中斷系統(tǒng)來實(shí)現(xiàn)。
2.中斷系統(tǒng)及其功能和組成
發(fā)現(xiàn)中斷源并能實(shí)現(xiàn)中斷服務(wù)的手段,包括所需要的硬件和軟件,稱為中斷系統(tǒng)。高效率的中斷系統(tǒng)能以最少的響應(yīng)時(shí)間和內(nèi)部操作去處理所有外設(shè)的中斷請求,使整個(gè)計(jì)算機(jī)系統(tǒng)的性能達(dá)到最佳狀態(tài)。
1)中斷系統(tǒng)所具有的功能
為了滿足上述要求,中斷系統(tǒng)應(yīng)具有如下功能:
(1)多中斷源請求,軟件可禁止和允許每個(gè)中斷源的中斷請求。通常,在系統(tǒng)中會(huì)有多個(gè)中斷源,如果在某段時(shí)間內(nèi),CPU不想為某個(gè)或某幾個(gè)中斷源服務(wù),這就要求系統(tǒng)能夠通過軟件暫時(shí)屏蔽對應(yīng)的中斷源,而對其他中斷源仍保持開放狀態(tài)。當(dāng)在另外的時(shí)間段,系統(tǒng)還可通過軟件開放前面被屏蔽的中斷源。8086/8088系統(tǒng)可處理256種不同類型的中斷,每個(gè)中斷對應(yīng)一個(gè)中斷類型號,所以256種中斷對應(yīng)的中斷類型號為0~255,這256種不同類型的中斷可以來自外部,即由硬件產(chǎn)生,也可以來自內(nèi)部,即由軟件(中斷指令)產(chǎn)生,或者滿足某些特定條件后引發(fā)CPU中斷。
(2)中斷優(yōu)先級判別功能。
當(dāng)系統(tǒng)中的多個(gè)中斷源同時(shí)申請中斷時(shí),就必須要求用戶事先根據(jù)各中斷源的輕重緩急規(guī)定一個(gè)中斷級別,即優(yōu)先級。CPU可根據(jù)優(yōu)先級找到中斷級別最高的中斷源,并響應(yīng)它的中斷請求。當(dāng)中斷處理完后,再響應(yīng)級別較低的中斷源。
(3)中斷嵌套功能。
中斷嵌套即級別高的中斷可中斷級別較低的中斷。當(dāng)CPU正在執(zhí)行某個(gè)中斷源中斷服務(wù)程序時(shí),若有級別更高的中斷源向CPU申請中斷,則CPU應(yīng)能暫停正在執(zhí)行的中斷服務(wù)程序而響應(yīng)級別高的中斷,在處理完級別高的中斷后,再繼續(xù)執(zhí)行被暫停的中斷服務(wù)程序。
(4)中斷實(shí)現(xiàn)。
當(dāng)某一中斷源向CPU申請中斷后,CPU能決定是否給予響應(yīng),當(dāng)響應(yīng)中斷后,能自動(dòng)轉(zhuǎn)向中斷處理程序去執(zhí)行,中斷處理結(jié)束后能自動(dòng)返回主程序繼續(xù)執(zhí)行。
(5)禁止中斷和中斷屏蔽。
在某種情況下,CPU可能不允許響應(yīng)可屏蔽中斷INTR,此時(shí)若中斷源向CPU申請中斷,CPU就不能終止當(dāng)前正在運(yùn)行的程序并轉(zhuǎn)到中斷服務(wù)程序,這種情況稱之為禁止中斷。一般在CPU內(nèi)部有一個(gè)中斷允許觸發(fā)器,只有當(dāng)該觸發(fā)器的狀態(tài)為運(yùn)行狀態(tài)時(shí),CPU才能響應(yīng)外部中斷,否則CPU不能響應(yīng)中斷。中斷允許觸發(fā)器可以通過指令STI進(jìn)行置位,或通過指令CLI進(jìn)行復(fù)位。
在另一種情況下,比如當(dāng)CPU正在進(jìn)行中斷處理時(shí),CPU可能不需要響應(yīng)幾種特殊類型的中斷,而其余的中斷則可以響應(yīng),這就叫中斷屏蔽。
中斷屏蔽可以通過中斷屏蔽觸發(fā)器來實(shí)現(xiàn)。將中斷源對應(yīng)的中斷屏蔽觸發(fā)器置1時(shí),該中斷源的中斷請求被屏蔽,否則該中斷源的中斷請求被允許。
2)中斷系統(tǒng)的組成
為實(shí)現(xiàn)上述功能,完整的中斷系統(tǒng)應(yīng)包括以下三方面:
(1)微處理器應(yīng)有處理中斷請求的機(jī)制與相關(guān)硬件電路。即接收請求、響應(yīng)請求、保護(hù)現(xiàn)場、轉(zhuǎn)向中斷服務(wù)程序以及中斷處理完返回。
(2)外圍應(yīng)有一個(gè)與處理器匹配的中斷控制器,能管理多個(gè)中斷源,進(jìn)行優(yōu)先級裁決及中斷源屏蔽等功能。
(3)根據(jù)處理器的結(jié)構(gòu)編寫中斷處理程序,安排相關(guān)的系統(tǒng)初始化。
3.中斷的基本過程
當(dāng)外設(shè)準(zhǔn)備好與CPU傳送數(shù)據(jù),或者有某些緊急情況需要處理時(shí),外設(shè)向CPU發(fā)出中斷請求,CPU接收到請求并在一定情況下,暫停執(zhí)行原來的程序而轉(zhuǎn)去中斷處理,完成中斷服務(wù)后再返回繼續(xù)執(zhí)行原來的程序,這就是一個(gè)中斷過程。下面將中斷過程分成5個(gè)階段來討論。
1)中斷請求
凡是能引起中斷的設(shè)備或事件都稱為中斷源。外部硬件中斷源產(chǎn)生了中斷請求信號或內(nèi)部發(fā)生了某種異常,都通知CPU,這就是中斷請求。
2)中斷判優(yōu)
由于中斷是隨機(jī)的,可能出現(xiàn)兩個(gè)或兩個(gè)以上的中斷源同時(shí)請求中斷服務(wù),在這種情況下,就必須對申請中斷的中斷源進(jìn)行優(yōu)先級判別,這稱為中斷判優(yōu)。CPU首先響應(yīng)當(dāng)前優(yōu)先級最高的中斷源的中斷請求,處理完后再響應(yīng)優(yōu)先級次高的中斷源的中斷請求。
3)中斷響應(yīng)
CPU在沒有接到中斷請求信號時(shí),一直執(zhí)行原來的程序(稱為主程序)。由于外設(shè)的中斷申請隨機(jī)發(fā)生,有中斷申請后CPU能否立即服務(wù)要看中斷的類型,若為非屏蔽中斷申請,則CPU執(zhí)行完現(xiàn)行指令后,做好保護(hù)現(xiàn)場工作即可去處理中斷服務(wù);若為可屏蔽中斷申請,則CPU只有得到允許后才能去服務(wù)。把從CPU接收到中斷請求到進(jìn)入中斷服務(wù)程序之前的這一段時(shí)間稱為中斷響應(yīng)周期。這期間CPU還要自動(dòng)將標(biāo)志寄存器內(nèi)容及斷點(diǎn)地址入棧保護(hù),并自動(dòng)尋找被響應(yīng)的中斷源的中斷服務(wù)程序入口地址。對可屏蔽中斷,CPU通過連續(xù)發(fā)出兩個(gè)中斷應(yīng)答信號INTA完成一個(gè)中斷響應(yīng)周期。
4)中斷處理
一旦CPU響應(yīng)中斷,就可自動(dòng)轉(zhuǎn)入中斷服務(wù)程序,中斷處理要做以下五件事情:
(1)保護(hù)現(xiàn)場。CPU響應(yīng)中斷時(shí)自動(dòng)將標(biāo)志寄存器內(nèi)容和斷點(diǎn)地址入棧保護(hù),但主程序中使用的寄存器的保護(hù)則由用戶視使用情況而定。由于在中斷服務(wù)程序中要用到某些寄存器,因而若不保護(hù)這些寄存器在中斷前的內(nèi)容,當(dāng)中斷服務(wù)程序的執(zhí)行修改了寄存器的內(nèi)容時(shí),從中斷服務(wù)程序返回主程序后,程序便不能正確執(zhí)行。由用戶對這些寄存器的內(nèi)容進(jìn)行保護(hù)的過程稱為保護(hù)現(xiàn)場。保護(hù)現(xiàn)場的指令是PUSH。
(2)開中斷。CPU接收并響應(yīng)一個(gè)中斷后會(huì)自動(dòng)關(guān)閉中斷,這樣做的目的是防止在中斷響應(yīng)過程中被其他級別更高的中斷打斷,使得在獲取中斷類型號時(shí)出錯(cuò)。但在某些情況下,有比該中斷更優(yōu)先的情況要處理,此時(shí),應(yīng)停止對該中斷的服務(wù)而轉(zhuǎn)入優(yōu)先級更高的中斷處理,故需要再開中斷,若不允許嵌套,也可不開中斷。開中斷的指令是STI。
(3)中斷服務(wù)。中斷服務(wù)是執(zhí)行輸入/輸出或非常事件的處理,是中斷處理的核心。
(4)關(guān)中斷。由于在前面有開中斷,因而在此處對應(yīng)一個(gè)關(guān)中斷過程,是為確保無干擾的恢復(fù)現(xiàn)場。關(guān)中斷的指令是CLI。
(5)恢復(fù)現(xiàn)場。
為保護(hù)中斷服務(wù)程序結(jié)束后正確返回原來被中止了的程序,應(yīng)使原來使用的寄存器內(nèi)容不變,將原來保護(hù)的內(nèi)容再恢復(fù)出來?;謴?fù)現(xiàn)場的指令是POP。
5)中斷返回
(1)開中斷。此處的開中斷對應(yīng)CPU響應(yīng)中斷后自動(dòng)關(guān)閉中斷。在返回主程序前,也就是在返回中斷服務(wù)程序的倒數(shù)第二條指令往往是開中斷指令,以便中斷返回后,其他的可屏蔽中斷請求能再次得到響應(yīng)。(2)返回。中斷服務(wù)程序的最后一條指令無一例外的都使用中斷返回指令I(lǐng)RET。該指令使原來在中斷響應(yīng)過程中的斷點(diǎn)地址和標(biāo)志寄存器中的內(nèi)容,依次從堆棧中彈出,以便繼續(xù)執(zhí)行原來的程序。
由上述過程可知,當(dāng)CPU處理一個(gè)中斷時(shí),不論該中斷是外部可屏蔽中斷請求INTR或非屏蔽中斷請求NMI引發(fā)的,還是由INT指令或CPU內(nèi)部錯(cuò)誤引發(fā)的,其中斷點(diǎn)及現(xiàn)場保護(hù)工作是一樣的,并且都需要自動(dòng)尋找中斷服務(wù)程序入口地址,然后轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。因此,CPU在對不同類型中斷進(jìn)行處理時(shí),機(jī)器狀態(tài)沒有區(qū)別。4.中斷類型號和中斷向量表
我們首先介紹幾個(gè)概念。
中斷類型號:為每個(gè)中斷源指定的一個(gè)8位的編號,以識(shí)別不同的中斷源,這8位的編號稱為中斷類型號。
中斷向量:每一個(gè)中斷服務(wù)程序的入口地址,稱為中斷向量。
中斷向量表:把系統(tǒng)中所有的中斷向量集中起來,根據(jù)中斷類型號從小到大的順序存放到存儲(chǔ)器的某一個(gè)區(qū)域內(nèi),這個(gè)存放中斷向量的存儲(chǔ)區(qū)稱為中斷向量表。在實(shí)模式下,中斷向量表位于內(nèi)存的第一個(gè)1KB空間。以80X86為處理器的計(jì)算機(jī)系統(tǒng)均采用矢量中斷,80X86處理器(CPU)能處理256級中斷向量,類型號為00H~0FFH。一個(gè)中斷向量占用4個(gè)字節(jié),分別存放中斷服務(wù)程序的IP和CS,因此,整個(gè)中斷向量(0H~0FFH)共占用1024字節(jié),用以存放各個(gè)中斷向量的中斷服務(wù)程序的入口地址(CS:IP)。中斷向量表就是各個(gè)中斷處理程序的地址表,如圖5.10所示。
中斷向量表用存儲(chǔ)器0:0H~0:3FFH區(qū)域存放各個(gè)中斷服務(wù)程序的入口地址,256級中斷向量對應(yīng)256種中斷類型,每項(xiàng)占4字節(jié),前兩個(gè)字節(jié)存放中斷處理程序的偏移地址IP,后兩個(gè)字節(jié)存放中斷處理程序的段地址CS。各中斷處理程序的段地址和偏移地址在向量表中按中斷類型順序存放,所以某中斷向量的處理程序的入口地址偏移可由中斷類型號×4計(jì)算出來。采用中斷向量表,可大大加快處理器(CPU)響應(yīng)處理中斷的速度。從另一方面說,采用中斷向量表也為用戶編寫自己的中斷向量服務(wù)程序去替換,加強(qiáng)原計(jì)算機(jī)的中斷服務(wù)程序帶來了方便。
80X86對各種中斷的響應(yīng)和處理過程是不相同的,其主要區(qū)別在于如何獲取響應(yīng)的中斷類型碼(向量)。對于硬件(外部)中斷,CPU是在當(dāng)前指令周期的最后一個(gè)T狀態(tài)采用中斷請求輸入信號。如果有可屏蔽中斷請求,且CPU處在開中斷狀態(tài)(IF標(biāo)志為1),則CPU轉(zhuǎn)入兩個(gè)連續(xù)的中斷響應(yīng)周期,在第二個(gè)中斷響應(yīng)周期的T4狀態(tài)前沿,讀取數(shù)據(jù)線獲取由外設(shè)輸入的中斷類型碼。若是非屏蔽中斷請求,則CPU不經(jīng)過上述的兩個(gè)中斷響應(yīng)周期,而在內(nèi)部自動(dòng)產(chǎn)生中斷類型碼2。
軟件(內(nèi)部)中斷的響應(yīng)過程與非屏蔽中斷類似,中斷類型碼也是自動(dòng)形成的。軟件中斷的類型碼及中斷名稱如圖5.10所示。圖5.11描述了微處理器在實(shí)模式下執(zhí)行中斷操作時(shí)查詢中斷向量表的前后過程及流程。
(1)堆棧指針SP減2,標(biāo)志寄存器Flags自動(dòng)進(jìn)棧保存,然后中斷標(biāo)志位I(bit9)與陷阱標(biāo)志位T(bit8)清0,表示此后關(guān)閉了外部硬件中斷。圖5.108088中斷向量表
(2)堆棧指針SP減2,代碼段寄存器CS自動(dòng)進(jìn)棧保存;堆棧指針SP再減2,指令指針I(yè)P自動(dòng)進(jìn)棧保存。
(3)將向量號N乘以4即得表格中的中斷向量首地址,在該單元與4×N+1中存放著IP值;在4×N+2與4×N+3中存放著CS值,將它們分別裝入IP與CS即獲得中斷服務(wù)程序的入口地址。
(4)?CPU從入口地址處開始執(zhí)行中斷服務(wù)程序。中斷服務(wù)處理完畢后由IRET指令實(shí)施彈出堆棧的逆向操作,恢復(fù)Flags、CS與IP寄存器的原值,返回原主程序。以上是中斷向量表查表的一般過程,Pentium系列實(shí)模式下的中斷與8086的中斷都遵循這一過程。兩者的差別在于,8086處理器中向量表的位置是由硬件固定在處理器的最底端00000H處的,而Pentium系列的向量表位置則靈活了一些,可以改變。因?yàn)樗鼈兊腃PU中增加了一個(gè)中斷描述符表地址寄存器(IDTR),其中存放著中斷描述符表的基地址與表格大小。處理器復(fù)位后自動(dòng)進(jìn)入實(shí)模式,IDTR中的基地址總是00000000H,而大小尺寸總為03FFH,這正好與8086的中斷向量表相兼容。但是通過LIDT與SIDT兩條裝載指令,可以修改IDTR中的基地址值與大小值,以此改變中斷向量表格的尺寸并可以將其搬移到實(shí)模式尋址空間的任意地段。圖5.11實(shí)模式下的中斷過程及流程5.2.2中斷控制器8259A
8259A是Intel公司生產(chǎn)的專為8086/8088CPU配套的可編程中斷控制器(ProgrammableInterruptController,PIC),又稱為優(yōu)先級控制器。它可以管理8級具有優(yōu)先權(quán)的中斷源,并且可以以級聯(lián)的方式擴(kuò)展到64級優(yōu)先級;可以給每個(gè)中斷源提供中斷類型號及固定或可變的優(yōu)先級;當(dāng)中斷被響應(yīng)后,能及時(shí)清除中斷標(biāo)志,以供別的中斷源申請中斷;能夠提供8259A與80X86的接口電路;能夠屏蔽無關(guān)的中斷源;能夠以查詢方式管理多于64種中斷源等。正因?yàn)樗δ軓?qiáng)大,所以編程結(jié)構(gòu)比較復(fù)雜。圖5.128259A的外部引腳
1.8259A的引腳功能
8259A是28引腳的雙列直插式封裝芯片,如圖5.12所示。其外部引腳信號的含義如下所述:
1)與CPU連接部分
(1)?D7~D0:雙向三態(tài)8位數(shù)據(jù)線,在系統(tǒng)中與數(shù)據(jù)總線相連,實(shí)現(xiàn)與CPU的數(shù)據(jù)交換。
(2)?INT:中斷請求信號線,輸出,高電平有效。與CPU的INTR引腳相連,用于向CPU發(fā)送中斷請求。
(3):中斷響應(yīng)信號,輸入,低電平有效。與CPU的引腳相連,用于接收來自CPU的中斷應(yīng)答信號。8259A要求中斷應(yīng)答信號由兩個(gè)負(fù)脈沖組成,第一個(gè)負(fù)脈沖作為中斷響應(yīng)信號,第二個(gè)負(fù)脈沖將中斷類型號送上數(shù)據(jù)總線。
(4):讀控制信號,輸入,低電平有效。用來通知8259A將某個(gè)內(nèi)部寄存器的內(nèi)容送上數(shù)據(jù)總線。
(5):寫控制信號,輸入,低電平有效。用來通知8259A從數(shù)據(jù)總線上接收CPU發(fā)送的控制命令字。
(6):芯片選擇信號線,輸入,低電平有效。通過地址譯碼電路與地址總線相連。
(7)?A0:端口選擇信號線,輸入,高電平有效。用來指出當(dāng)前8259A的哪個(gè)端口被選中。當(dāng)A0?=?0時(shí),選中低端口地址(偶地址);當(dāng)A0?=?1時(shí),選中高端口地址(奇地址)。在8088系統(tǒng)中,數(shù)據(jù)總線是8位的,所以8259A的數(shù)據(jù)線可以直接連接在系統(tǒng)數(shù)據(jù)總線上。這時(shí),系統(tǒng)地址總線的A0與8259A的端口選擇信號線A0相連,當(dāng)CPU訪問8259A時(shí),只要使系統(tǒng)地址總線的A0為0或1就能滿足8259A對端口地址的編碼要求。在IBMPC/XT系統(tǒng)上,由于使用的是8088CPU,所以8259A的端口地址為20H和21H。在8086系統(tǒng)中,數(shù)據(jù)總線是16位的,而8259A的數(shù)據(jù)線只有8根,通常8259A都是連接在數(shù)據(jù)總線的低8位上。為使所有的數(shù)據(jù)傳輸都是利用數(shù)據(jù)總線的低8位,必須將系統(tǒng)地址總線的A1與8259A的端口選擇信號線A0相連,而使系統(tǒng)地址總線的A0位總是為0。這是因?yàn)?,?086系統(tǒng)中約定,偶存儲(chǔ)體和偶地址端口總是和數(shù)據(jù)總線的低8位相聯(lián)系的,而奇存儲(chǔ)體和奇地址端口總是和數(shù)據(jù)總線的高8位相聯(lián)系的,因此8086CPU與偶地址端口交換數(shù)據(jù)時(shí)和與偶存儲(chǔ)體交換字節(jié)數(shù)據(jù)一樣,總是通過低8位數(shù)據(jù)線進(jìn)行傳輸。在這種情況下,從CPU的角度來說,是對兩個(gè)相鄰的偶地址端口尋址(A0=0、A1=1或A1=0);從8259A的角度來說,只有地址總線的A1和8259A的A0相連,因此仍然是一個(gè)低端口地址(偶地址)和一個(gè)高端口地址(奇地址)。
2)與外設(shè)連接的信號
IR7~I(xiàn)R0:8個(gè)外部中斷請求信號,輸入,高電平或上升沿有效。系統(tǒng)默認(rèn)的優(yōu)先級為IR0最高,IR7最低,依次類推。
3)用于多片級聯(lián)的信號
(1)?CAS0~CAS2:級聯(lián)控制信號,雙向。如果8259A為主片,則這三條引腳為輸出線;如果8259A為從片,則為輸入線,作為從片標(biāo)識(shí)碼進(jìn)入從片。即主片和所有從片的這三條線互連。當(dāng)某從片8259A提出中斷請求時(shí),主片8259A通過CAS0~CAS2送出相應(yīng)的標(biāo)識(shí)碼給從片,使該從片知道剛送出的中斷請求已被響應(yīng)。
(2):級聯(lián)/緩沖允許雙功能信號,雙向。當(dāng)8259A工作在緩沖方式下時(shí),主片該引腳輸出,控制數(shù)據(jù)總線緩沖器啟動(dòng),從片輸入,接低電平;當(dāng)8259A工作在非緩沖方式下時(shí),該引腳輸入,用于規(guī)定8259A是主片還是從片,主片接高電平,從片接低電平,在沒有級聯(lián)的系統(tǒng)中,該信號接高電平。
2.內(nèi)部結(jié)構(gòu)
8259A的內(nèi)部結(jié)構(gòu)如圖5.13所示。它由中斷請求寄存器、中斷服務(wù)寄存器、中斷屏蔽寄存器、中斷優(yōu)先級判別器、級聯(lián)緩沖/比較器、讀/寫控制邏輯、控制電路、數(shù)據(jù)總線緩沖器組成。圖5.138259A結(jié)構(gòu)框圖及引腳分布
1)中斷請求寄存器(IRR)
中斷請求寄存器是一個(gè)8位寄存器,用來存放由外部中斷源輸入的中斷請求信號IR0~I(xiàn)R7,當(dāng)某個(gè)輸入端為高電平時(shí),該寄存器的相應(yīng)位被置1。允許8個(gè)中斷請求信號同時(shí)進(jìn)入,此時(shí)IRR相應(yīng)位被置成全1。當(dāng)某個(gè)中斷請求被響應(yīng)時(shí),IRR中的相應(yīng)位被自動(dòng)復(fù)位,并且該中斷輸入線上的中斷請求應(yīng)及時(shí)撤消,否則在中斷服務(wù)程序處理完后,該中斷輸入線上的高電平可能會(huì)引起又一次中斷服務(wù)。
2)中斷服務(wù)寄存器(ISR)
中斷服務(wù)寄存器是一個(gè)8位寄存器,用來保存、記錄所有正在處理中的中斷請求。當(dāng)任何一級中斷被響應(yīng),CPU要去執(zhí)行它的中斷服務(wù)程序時(shí),ISR相應(yīng)位被置1;當(dāng)中斷嵌套時(shí),ISR中可有多位被置1。當(dāng)8259A收到“中斷結(jié)束”命令時(shí),ISR中的相應(yīng)位會(huì)被清除。當(dāng)8259A采用中斷自動(dòng)結(jié)束方式時(shí),ISR中剛被置1的位在中斷響應(yīng)結(jié)束時(shí)被自動(dòng)復(fù)位。
3)中斷優(yōu)先級判別器(PR)
PR對保存在IRR中的中斷請求進(jìn)行優(yōu)先級識(shí)別,判別哪個(gè)中斷請求具有最高優(yōu)先級,并在接收到中斷響應(yīng)脈沖期間送出最高級別的中斷請求到ISR中;當(dāng)出現(xiàn)多重中斷時(shí),PR還可以判定是否允許所出現(xiàn)的中斷申請去打斷正在被處理的中斷。
4)中斷屏蔽寄存器(IMR)
中斷屏蔽寄存器也是一個(gè)8位寄存器,用來存放對各級中斷請求的屏蔽信息,實(shí)現(xiàn)對各級中斷的有選擇的屏蔽。當(dāng)用軟件編程使IMR中某位被清零時(shí),就表示允許IRR中相應(yīng)位的中斷請求進(jìn)入PR。當(dāng)IMR中某位被置1時(shí),此位的中斷請求被屏蔽,表示禁止這一級中斷請求進(jìn)入系統(tǒng)。IMR中的各屏蔽位是獨(dú)立的,屏蔽了優(yōu)先級高的中斷源并不影響其他較低優(yōu)先級的中斷請求被允許。
5)級聯(lián)緩沖/比較器
這部分電路主要用于8259A的級聯(lián)結(jié)構(gòu)。級聯(lián)時(shí),8259A有主片和從片之分,主片8259A的級聯(lián)緩沖/比較器可在CAS2~CAS0上輸出代碼,從片8259A的級聯(lián)緩沖/比較器可通過這三條引腳接收主片發(fā)來的CAS2~CAS0代碼并和ICW3(初始化命令字)中的標(biāo)識(shí)碼進(jìn)行比較。此時(shí),主8259A的端接高電平(非緩沖)或作為輸出引腳(緩沖),從8259A的端接低電平,且從8259A的INT輸出接到主片的中斷輸入端IR上,因而最多可接8個(gè)從片,管理64級中斷。
6)控制電路
控制電路是8259A的內(nèi)部控制器,當(dāng)某個(gè)中斷源向8259A送上中斷請求信號時(shí),中斷請求寄存器的相應(yīng)位就會(huì)被置1,此時(shí)控制電路將根據(jù)中斷請求寄存器中的置位情況和中斷屏蔽寄存器的設(shè)置情況,通過PR判定該中斷源是否是當(dāng)前最高優(yōu)先級。如果是最高優(yōu)先級,控制電路將向8259A內(nèi)部及其他部件發(fā)出控制信號并且向CPU發(fā)出中斷請求信號INT。當(dāng)接收到中斷應(yīng)答信號后就可使ISR的相應(yīng)位置1,并使IRR的相應(yīng)位清零,同時(shí)將該中斷源的中斷類型號送上數(shù)據(jù)線。
7)讀/寫控制邏輯
一片8259A只占用兩個(gè)I/O端口地址,用地址線A0來選擇端口,端口地址的高位由片選信號端CS輸入,由或控制數(shù)據(jù)線的傳輸方向,即寫入控制命令和讀出內(nèi)部寄存器的內(nèi)容。
8)數(shù)據(jù)總線緩沖器
數(shù)據(jù)總線緩沖器是雙向8位的三態(tài)緩沖器,用于與系統(tǒng)數(shù)據(jù)總線進(jìn)行接口,通常連接低8位數(shù)據(jù)線。8259A與CPU通過數(shù)據(jù)總線緩沖器進(jìn)行交換的信息包括寫入8259A的編程控制字、8259A狀態(tài)信息的讀出以及中斷響應(yīng)時(shí)8259A送出的中斷類型號。
3.?8259A的工作方式
8259A具有非常靈活的中斷管理方式,可滿足使用者的各種不同要求,并且這些工作方式都可以通過編程來設(shè)置。由于8259A的工作方式比較多,因此在講述編程之前,首先要了解8259A的各種工作方式。
1)中斷優(yōu)先級方式
8259A設(shè)置中斷請求的優(yōu)先級別有四種方式,即完全嵌套方式、自動(dòng)循環(huán)方式、特殊循環(huán)方式和特殊全嵌套方式。
(1)完全嵌套方式。這是8259A的默認(rèn)方式,也是最基本最常用的中斷優(yōu)先級方式。當(dāng)初始化沒有設(shè)置其他優(yōu)先級的方式時(shí),就自動(dòng)進(jìn)入完全嵌套方式。該方式下,8259A的中斷請求輸入端引入的中斷源具有固定的優(yōu)先級序列,實(shí)現(xiàn)完全嵌套,即優(yōu)先級按IR0到IR7依次降低,其中IR0的優(yōu)先級最高,IR7的優(yōu)先級最低。從高到低的優(yōu)先級的次序?yàn)镮R0>IR1>IR2>IR3>IR4>IR5>IR6>IR7。
(2)自動(dòng)循環(huán)方式。在中斷源的優(yōu)先級隊(duì)列會(huì)隨時(shí)發(fā)生變化,從IR0到IR7引入的中斷源輪流具有最高優(yōu)先級。當(dāng)某個(gè)中斷源的中斷請求得到CPU響應(yīng)后,其中斷請求輸入端的優(yōu)先級自動(dòng)降為最低,原來比它低一級的中斷請求輸入端則自動(dòng)升為最高優(yōu)先級。在初始狀態(tài)下,優(yōu)先級隊(duì)列規(guī)定為IR0>IR1>IR2>IR3>IR4>IR5>IR6>IR7。
(3)特殊循環(huán)方式:循環(huán)原理與自動(dòng)循環(huán)方式相同,即當(dāng)某個(gè)外設(shè)的中斷請求得到CPU響應(yīng)后,其中斷請求輸入端的優(yōu)先級自動(dòng)降為最低,它的下一級中斷請求輸入端則自動(dòng)升為最高優(yōu)先級。它與自動(dòng)循環(huán)方式的區(qū)別是:特殊循環(huán)方式下的初始優(yōu)先級隊(duì)列由編程決定,可任意指定一個(gè)初始最低優(yōu)先級,以后再循環(huán)。
(4)特殊全嵌套方式。這種工作方式與完全嵌套方式基本相同,即具有固定的優(yōu)先級序列,從高到低的優(yōu)先級次序?yàn)镮R0>IR1>IR2>IR3>IR4>IR5>IR6>IR7。區(qū)別在于,特殊全嵌套方式下中斷正被處理時(shí),允許同級或更高優(yōu)先級的事件打斷當(dāng)前的中斷處理過程。此方式主要用于多片8259A級聯(lián)時(shí)主片8259A的優(yōu)先級設(shè)置。
2)固定優(yōu)先級中斷結(jié)束方式
如前所述,當(dāng)8259A響應(yīng)某一級中斷而為其服務(wù)時(shí),中斷服務(wù)寄存器的相應(yīng)位置1,當(dāng)有更高級的中斷申請進(jìn)入時(shí),ISR的相應(yīng)位又要置1,因而ISR中可有多位同時(shí)置1。在中斷服務(wù)程序結(jié)束時(shí),ISR中的相應(yīng)位應(yīng)清零,以便再次接收同級別的中斷。中斷結(jié)束的管理就是用不同的方式使ISR中相應(yīng)位清零,什么時(shí)刻使ISR中相應(yīng)位清零,就產(chǎn)生了不同的中斷結(jié)束方式,同時(shí)還可確定下面的優(yōu)先排隊(duì)。要注意的是,這里的中斷結(jié)束是指8259A結(jié)束中斷的處理,而不是CPU結(jié)束執(zhí)行中斷服務(wù)程序。在這里首先介紹在固定優(yōu)先級方式中對中斷結(jié)束的處理:
(1)普通結(jié)束方式(EOI)。8259A每得到一次EOI命令,就將ISR中已置1的位中優(yōu)先級最高的位復(fù)位。在完全嵌套方式下,任何一級中斷處理結(jié)束返回上一級程序前,CPU都將向8259A傳送EOI結(jié)束命令字,8259A在收到EOI結(jié)束命令后,自動(dòng)將ISR中級別最高的置1位清零。EOI結(jié)束命令字必須放在中斷返回指令I(lǐng)RET之前,若沒有EOI結(jié)束命令字,則ISR中對應(yīng)位仍為1,即使中斷服務(wù)程序已執(zhí)行完,也將繼續(xù)屏蔽同級或低級的中斷請求;若EOI結(jié)束命令字放在中斷服務(wù)程序中的其他位置,則會(huì)引起同級或低級中斷在本次中斷未處理完前進(jìn)入,使其容易產(chǎn)生嵌套錯(cuò)誤。
(2)特殊結(jié)束方式(SEOI)。該方式的特殊性在于,除了普通EOI方式的功能外,將明確指明本次復(fù)位的ISR位。由于中斷優(yōu)先級方式在程序中被多次修改,雖然當(dāng)前的優(yōu)先級方式為固定優(yōu)先級,但已無法根據(jù)ISR的內(nèi)容確定哪一級中斷為最后響應(yīng)和處理的,這時(shí)就要采用SEOI命令。CPU向8259A發(fā)出SEOI結(jié)束命令字,在命令字中將當(dāng)前要清除的中斷級別也傳送給8259A,此時(shí)8259A將ISR中指定級別的對應(yīng)位清零。
(3)自動(dòng)結(jié)束方式(AEOI)。自動(dòng)EOI方式是利用響應(yīng)中斷時(shí)最后一個(gè)響應(yīng)脈沖的后沿執(zhí)行一次普通EOI,而不需要CPU向8259A發(fā)送EOI命令字。在自動(dòng)結(jié)束方式下,任何一級中斷被響應(yīng)后,ISR對應(yīng)位置1,但在CPU進(jìn)入中斷響應(yīng)周期發(fā)送第二個(gè)脈沖后,8259A自動(dòng)將ISR中對應(yīng)位清零,這種方式簡單,但在進(jìn)行中斷服務(wù)時(shí),ISR中沒有標(biāo)志,低級中斷申請時(shí),可打斷高級中斷,產(chǎn)生重復(fù)嵌套,嵌套深度也無法控制,容易產(chǎn)生錯(cuò)誤。通常在只用一片8259A時(shí),多個(gè)中斷不會(huì)在嵌套下使用。在級聯(lián)方式下,一般使用非自動(dòng)結(jié)束方式,無論是用普通EOI結(jié)束方式還是用特殊EOI結(jié)束方式,當(dāng)中斷處理結(jié)束時(shí),都要發(fā)兩次中斷結(jié)束命令,一次是對主片發(fā)送,另一次是對從片發(fā)送。
3)循環(huán)優(yōu)先級中斷結(jié)束方式
在循環(huán)優(yōu)先級方式中,與中斷結(jié)束方式聯(lián)合,有三種循環(huán)結(jié)束,結(jié)束時(shí)并確定下面的優(yōu)先權(quán)排隊(duì)。
(1)普通EOI循環(huán)方式。這種方式是指不但要通知8259A中斷結(jié)束,而且應(yīng)該清除ISR中對應(yīng)位,還要8259A重新排列優(yōu)先級別。在主程序或中斷服務(wù)程序中設(shè)置為自動(dòng)循環(huán)方式,當(dāng)任何一級中斷被處理完后,使CPU向8259A發(fā)送普通EOI循環(huán)命令,8259A收到中斷結(jié)束循環(huán)命令后,將ISR中最高優(yōu)先級的置1位清零,并賦給它最低優(yōu)先級,將最高優(yōu)先級賦給它的下一級,其他依次類推。
首先設(shè)置自動(dòng)循環(huán)方式,優(yōu)先級別由高到低排列為IR0>IR1>IR2>IR3>IR4>IR5>IR6>IR7。由表5.1可知,在原始狀態(tài)下,IR5的中斷處理程序被IR2中斷嵌套,當(dāng)前正在執(zhí)行IR2中斷處理程序。表5.1普通EOI循環(huán)處理表當(dāng)處理完IR2后,CPU向8259A發(fā)送普通EOI循環(huán)命令,由于IR2的優(yōu)先級高于IR5,因此ISR中對應(yīng)IR2的位被自動(dòng)清零,同時(shí)優(yōu)先級被置為最低,IR3的優(yōu)先級為最高,依次類推。
當(dāng)處理完IR5后,CPU向8259A發(fā)送普通EOI循環(huán)命令,ISR中對應(yīng)IR5的位被自動(dòng)清0,同時(shí)優(yōu)先級被置為最低,IR6的優(yōu)先級為最高,依次類推。
(2)特殊EOI循環(huán)方式。這種方式與普通EOI循環(huán)方式基本相同,區(qū)別在于通知8259A中斷結(jié)束的命令中要指定將ISR中哪一位清除。當(dāng)在程序中多次設(shè)置特殊循環(huán)方式時(shí),8259A已無法判斷當(dāng)前正在被服務(wù)的一些中斷中哪一個(gè)級別最高,因此當(dāng)某個(gè)中斷處理結(jié)束時(shí),CPU在發(fā)送中斷結(jié)束循環(huán)命令的同時(shí)還要將當(dāng)前要清除的中斷級別也傳送給8259A,8259A收到此命令后,首先將ISR中被指定的置1位清零,然后將該位對應(yīng)的輸入端優(yōu)先級別置為最低,并將其下一級優(yōu)先級別置為最高,依次類推。首先設(shè)置自動(dòng)循環(huán)方式,優(yōu)先級別由高到低排列為IR0>IR1>IR2>IR3>IR4>IR5>IR6>IR7。由表5.2可知,在原始狀態(tài)下,IR6的中斷處理程序被IR2中斷嵌套,當(dāng)前正在執(zhí)行IR2中斷處理程序。表5.2特殊EOI循環(huán)處理表在IR2中斷服務(wù)程序中設(shè)置了特殊循環(huán)方式,將最低優(yōu)先級賦給IR3,同時(shí)IR4的優(yōu)先級自動(dòng)升為最高。
當(dāng)處理完IR2后,如果CPU向8259A發(fā)送普通EOI循環(huán)命令,則由于當(dāng)前IR6的優(yōu)先級高于IR2,因此ISR中對應(yīng)IR6的位就會(huì)被自動(dòng)清零,這顯然是錯(cuò)誤的。因此,CPU應(yīng)向8259A發(fā)送特殊EOI循環(huán)命令,即在命令中指定將IR2對應(yīng)在ISR中的置1位清除,同時(shí)將IR2的中斷優(yōu)先級別置為最低,IR3的優(yōu)先級別置為最高,依次類推。
(3)自動(dòng)EOI循環(huán)方式。在自動(dòng)EOI循環(huán)方式中,任何一級中斷被響應(yīng)后,中斷響應(yīng)總線周期中第二個(gè)信號的后沿自動(dòng)將ISR相應(yīng)位清零,并立即改變各級中斷的優(yōu)先級別,改變方式與普通EOI循環(huán)方式相同,但要防止重復(fù)嵌套產(chǎn)生。
4)中斷源屏蔽方式
CPU由CLI指令禁止所有可屏蔽中斷進(jìn)入,中斷控制器8259A通過對中斷屏蔽寄存器的操作可以對中斷請求單獨(dú)屏蔽或允許。通常有兩種屏蔽方式。
(1)普通屏蔽方式。這種方式將中斷屏蔽寄存器IMR中某位或某幾位置1,即可將對應(yīng)位的中斷請求屏蔽。這是通過對操作命令字OCW1寫入來實(shí)現(xiàn)的。如對OCW1寫入35H(00110101B),則相應(yīng)屏蔽了從IR0、IR2、IR4、IR5引入的四個(gè)中斷源。
(2)特殊屏蔽方式。這是在中斷處理程序中使用的一種屏蔽中斷源方式。在某些場合,希望一個(gè)中斷服務(wù)程序能動(dòng)態(tài)的改變系統(tǒng)的優(yōu)先級結(jié)構(gòu)。例如,在某個(gè)中斷服務(wù)程序中要求其執(zhí)行過程的某一部分禁止較低優(yōu)先級中斷請求,而在其他部分則允許這些請求。由于在中斷服務(wù)程序執(zhí)行中,不能用中斷結(jié)束命令使其ISR相應(yīng)位復(fù)位,而在普通屏蔽方式下也不能使ISR相應(yīng)位復(fù)位,因此普通屏蔽方式不能達(dá)到這種特殊要求。此時(shí)可采用特殊屏蔽方式,它總是在中斷服務(wù)程序中使用,能對本級中斷進(jìn)行屏蔽,且允許優(yōu)先級比它高或低的中斷進(jìn)入。
5)中斷請求引入方式
外部中斷源接入8259A有兩種信號形式,即邊沿觸發(fā)方式和電平觸發(fā)方式。另外,當(dāng)CPU的IF標(biāo)志復(fù)位,禁止可屏蔽中斷請求進(jìn)入時(shí),CPU還可通過查詢方式獲得中斷請求
信號。
(1)邊沿觸發(fā)方式。這種方式利用IR輸入信號,由低電平跳向高電平時(shí)觸發(fā)。當(dāng)IR產(chǎn)生上升沿后,應(yīng)保持高電平直到中斷被響應(yīng)為止。
(2)電平觸發(fā)方式。8259A依靠IR引腳上的有效高電平信號來觸發(fā),而與有效電平出現(xiàn)的方式和時(shí)間無關(guān)。當(dāng)中斷得到響應(yīng)后,中斷請求輸入端必須及時(shí)撤銷高電平,否則在CPU進(jìn)入中斷處理過程后,且在開中斷的情況下,原中斷請求的高電平會(huì)引起第二次中斷的錯(cuò)誤。
(3)中斷查詢方式。這種方式允許8259A不工作于中斷方式,而是以查詢方式工作。當(dāng)在程序中設(shè)置CPU的中斷允許標(biāo)志IF=0時(shí),表示禁止8259A對CPU的中斷請求,CPU只能使用中斷查詢方式利用軟件查詢來確定中斷源,實(shí)現(xiàn)對外設(shè)的中斷服務(wù)。因此,中斷查詢方式既有中斷的特點(diǎn)又有查詢的特點(diǎn)。
6)連接系統(tǒng)總線的方式
8259A有兩種連接系統(tǒng)總線的方式,一種是緩沖方式;另一種是非緩沖方式。
(1)緩沖方式。一般在多片8259A級聯(lián)系統(tǒng)中,8259A通過數(shù)據(jù)總線緩沖器Intel8286與系統(tǒng)數(shù)據(jù)總線相連,而不是直接與系統(tǒng)數(shù)據(jù)總線相連,這就是緩沖方式。在此方式下,8259A使用引腳的EN使能功能作為輸出端,輸出低電平允許信號,用以鎖存或開啟數(shù)據(jù)總線緩沖器。
(2)非緩沖方式。當(dāng)系統(tǒng)中只有一片8259A或少量幾片8259A級聯(lián)時(shí),一般將它直接與系統(tǒng)數(shù)據(jù)總線相連,這就是非緩沖方式。
4.?8259A的控制字及應(yīng)用
在使用8259A時(shí),除按各引腳規(guī)定的信號接好電路外,還必須用程序選定其工作狀態(tài),如各中斷請求信號的優(yōu)先級分配、中斷屏蔽、中斷類型號、中斷的觸發(fā)方式等。每一種狀態(tài)都由一個(gè)命令字或一個(gè)命令字的某些位來規(guī)定,8259A的命令字分為初始化命令字(InintiallizationCommandWord,ICW)和操作命令字(OperationCommandWord,OCW)兩種,因此8259A的編程也分為初始化編程和操作編程兩種。系統(tǒng)復(fù)位后,應(yīng)進(jìn)行初始化編程,嚴(yán)格按次序進(jìn)行操作編程并只能寫一次,以設(shè)定中斷觸發(fā)方式、緩沖方式、中斷類型號基值、優(yōu)先級方式的結(jié)束方式。初始化后,在任何位置都可操作編程,且沒有嚴(yán)格順序,并允許重置,以動(dòng)態(tài)改變8259A的操作與控制。
1)初始化編程
初始化編程用以完成以下功能:
(1)設(shè)定中斷請求信號觸發(fā)方式,即邊沿或電平觸發(fā)方式。
(2)設(shè)定8259A工作方式,即緩沖與非緩沖方式。
(3)設(shè)定8259A中斷類型號基值,對應(yīng)IR0的類型號。
(4)設(shè)定優(yōu)先級方式,即完全嵌套或特殊全嵌套方式。
(5)設(shè)定中斷處理結(jié)束方式,即自動(dòng)或非自動(dòng)EOI方式。對8259A編程初始化命令,共預(yù)置4個(gè)命令字:ICW1、ICW2、ICW3、ICW4,但并不是任何情況下都要預(yù)置這4個(gè)命令字,用戶可根據(jù)具體使用情況而定。由于ICW1必須寫入低地址端口A0?=?0(偶端口),因而ICW2、ICW3、ICW4必須寫入高地址端口A0?=?1(奇端口)。那么如何區(qū)分寫入的到底是哪個(gè)寄存器呢?為此8259A在進(jìn)行初始化時(shí),利用寫入的順序來區(qū)分不同的寄存器,即必須嚴(yán)格地按圖5.14所規(guī)定的初始化順序依次寫入。圖5.14初始化流程◆初始化命令字ICW1
8位ICW1命令字的格式如圖5.15所示,其中,D7、D6、D5、ADI僅對8080/8085等8位CPU有意義,在8086/8088及以上系列CPU中不使用,可為任意值。D4=1為ICW1的特征位(標(biāo)志位),用來與寫入同一地址的OCW2、OCW3區(qū)別。其他命令字的含義如圖5.15所示。圖5.15ICW1的格式
(1)?IC1:指示初始化時(shí)是否需要ICW4,在80X86系統(tǒng)中,該位應(yīng)設(shè)為1,即需要ICW4。
(2)?SNGL:單片/級聯(lián)方式設(shè)置,指示初始化時(shí)是否需要ICW3。該位為1時(shí),表示系統(tǒng)中只有一片8259A,初始化時(shí)不需對ICW3寫入;該位為0時(shí),表示系統(tǒng)有多片8259A級聯(lián),初始化時(shí)需要對ICW3寫入,以對級聯(lián)狀態(tài)進(jìn)行設(shè)置。
(3)?LTIM:中斷輸入信號的觸發(fā)方式設(shè)置?!糁袛囝愋吞柍跏蓟钭諭CW2
8位ICW2命令字的格式如圖5.16所示。D7~D3為決定中斷類型號的高5位;D2~D0不需編程,通常為全0,表示中斷請求輸入端IR0的中斷類型號,在中斷響應(yīng)時(shí)由中斷源的序號000~111自動(dòng)填入相應(yīng)值。因此,用一個(gè)初始化命令字ICW2就可決定8個(gè)中斷源的中斷類型號。ICW2也可以稱為中斷類型號基值寄存器。圖5.16ICW2的格式◆標(biāo)識(shí)主/從片初始化命令字ICW3
8位ICW3命令字的格式如圖5.17所示。它是8259A的級聯(lián)命令字,用來設(shè)置級聯(lián)方式,即當(dāng)ICW1中的D1?=?0時(shí),才要寫入ICW3。對主片、從片分別寫入ICW3,對主片寫入是為確定哪個(gè)中斷請求輸入端接的是從片。由于一片8259A有8個(gè)中斷請求輸入端,因此最多可接8個(gè)從片。對從片寫入是為確定該從片的中斷請求輸出端接主片的哪個(gè)輸入端。
圖5.17(a)表示若主片8259A某根IRi引腳上接有從片,則ICW3的相應(yīng)位應(yīng)寫1,否則寫0。
在圖5.17(b)中,ID2~I(xiàn)D0表示從片標(biāo)識(shí)碼,其8種譯碼狀態(tài)分別代表該從片是接在主片的哪個(gè)中斷請求輸入端上。圖5.17ICW3的格式(a)主8259AICW3的格式;(b)從8259AICW3的格式◆方式控制初始化命令字ICW4
8位ICW4命令字的格式如圖5.18所示。在ICW1中,若D0?=?1才寫入ICW4,用來指定中斷嵌套方式及緩沖方式,對80X86(包括8086/8088)系統(tǒng)必須預(yù)置ICW4。其中,UPM表示CPU類型;AEOI指示是否為自動(dòng)結(jié)束方式;M/S為主從片選擇,該位決定是主片還是從片;BUF指示8259A是否工作在緩沖方式,以決定引腳的功能;SFNM決定8259A在級聯(lián)時(shí)是否工作于特殊全嵌套方式;D5、D6、D7位無意義,可任意設(shè)置,通常寫入0。
ICW4各位的具體設(shè)置如圖5.18所示。圖5.18ICW4的格式
2)操作編程
8259A經(jīng)初始化編程后,已進(jìn)入初始化狀態(tài),可接收來自中斷請求輸入端IRi的中斷申請,并自動(dòng)進(jìn)入操作命令狀態(tài),接收CPU寫入8259A的操作命令。8259A的操作命令字有三個(gè),即OCW1、OCW2、OCW3,分別寫入兩個(gè)端口中,OCW1必須寫入高地址端口A0?=?1(奇端口),OCW2、OCW3必須寫入低地址端口A0=0(偶端口)。OCW2和OCW3可根據(jù)各自的特征位來區(qū)別,因此對寫入的順序沒有要求。在系統(tǒng)工作過程中,某些操作命令字可能需要重復(fù)多次地寫入,并且既可在主程序中設(shè)置,也可在中斷服務(wù)程序中設(shè)置?!糁袛嗥帘蚊钭諳CW1
OCW1用于向IMR寫入屏蔽信息,初始時(shí)為全0(開放所有中斷請求輸入端),其格式如圖5.19所示。
任何時(shí)刻,CPU通過輸入指令對8259A高地址端口(A0?=?1)執(zhí)行讀操作,可以讀入IMR的內(nèi)容。
◆中斷模式設(shè)置命令字OCW2
OCW2用于對8259A設(shè)置中斷結(jié)束命令以及確定優(yōu)先級循環(huán)的方式,其格式如圖5.20所示。其中,D4?=?0、D3?=?0為OCW2的特征位(標(biāo)志位),用來與寫入同一地址的ICW1和OCW3區(qū)別。圖5.19OCW1的格式
(1)?R:表示中斷優(yōu)先級循環(huán)位。
(2)?SL:表示選擇指定的IRi級別位,即SL?=?1時(shí),L2、L1、L0有效,代表對應(yīng)的譯碼結(jié)果IRi。
(3)?EOI:中斷結(jié)束命令位,在初始化命令字ICW4中定義為非自動(dòng)中斷結(jié)束方式,該位用來給8259A送中斷結(jié)束命令。若ICW4中的AEOI?=?1,則設(shè)置為自動(dòng)結(jié)束方式,此時(shí)該位應(yīng)為0。
◆特殊屏蔽和查詢命令字OCW3
OCW3命令字格式如圖5.21所示。OCW3命令字有三個(gè)功能,分別為設(shè)置或撤銷特殊屏蔽方式、設(shè)置中斷查詢方式和設(shè)置讀8259A內(nèi)部寄存器方式。圖5.20OCW2的格式圖5.21OCW3的格式
(1)?ESMM:允許或禁止SMM位起作用的控制位。ESMM為1時(shí)允許SMM位起作用;為0時(shí)禁止SMM位起作用。
(2)?SMM:設(shè)置特殊屏蔽方式選擇位。與ESMM位共同起作用,如圖5.21所示。
(3)?P:查詢命令位。P?=?1時(shí),向8259A發(fā)送查詢命令;P=0時(shí),不處于查詢方式。OCW3設(shè)置查詢方式以后,CPU對同一個(gè)地址(A0=0)執(zhí)行讀操作,就得到該片8259A的一個(gè)中斷查詢狀態(tài)字,如圖5.22所示。圖5.22中斷查詢字圖中,I?=?1表示該8259A芯片的IR0~I(xiàn)R7中發(fā)生了有效的中斷請求;W2~W0表明了請求服務(wù)的最高優(yōu)先權(quán)編碼。I?=?0則表示無請求。CPU可以反復(fù)對8259A查詢,但每次查詢前都應(yīng)先送一次D2?=?1的OCW3。
(4)?RR:讀寄存器命令位。RR?=?1時(shí)允許讀IRR或ISR;RR?=?0時(shí)禁止讀這兩個(gè)寄存器。
(5)?RIS:讀IRR或ISR選擇位。與RR位共同起作用。
3)?8259A寄存器的讀/寫
如前所述,對于8259A內(nèi)部的各個(gè)寄存器,除在編程時(shí)CPU可用輸出指令對其逐一地寫入外,在查詢狀態(tài)時(shí)還可用輸入指令將其內(nèi)容讀出。為了尋址各寄存器,除了用地址信號A0進(jìn)行端口選擇外,還需要用這些命令字的某些位作為訪問某個(gè)寄存器的特征位,或者按寫入的先后順序來進(jìn)行區(qū)別。表5.3列出了對8259A各寄存器讀/寫時(shí)的信號關(guān)系。表5.38259A寄存器的讀/寫5.2.38086系統(tǒng)中8259A的應(yīng)用
1.現(xiàn)行微機(jī)系統(tǒng)中的中斷邏輯結(jié)構(gòu)
現(xiàn)在的微機(jī)系統(tǒng)為了擴(kuò)大中斷處理能力,使用兩片8259A組成主、從形式中斷控制器,提供15級中斷。雖然在當(dāng)今的Pentium系列微型計(jì)算機(jī)中已經(jīng)再也找不到這種8259A芯片,但是這樣的電路依然存在,只是集成到超大規(guī)模的芯片組中了。我們可以認(rèn)為,現(xiàn)行微機(jī)系統(tǒng)中斷控制器的連接原理如圖5.23所示。圖5.23現(xiàn)行微機(jī)中斷控制器連接示意圖這里,主片的端口地址仍為20H、21H,從片的端
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年江蘇財(cái)經(jīng)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性考試題庫帶答案詳解
- 2026年浙江建設(shè)職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及完整答案詳解1套
- 2026年正德職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案詳解
- 2026年貴州文化旅游職業(yè)學(xué)院單招職業(yè)適應(yīng)性考試題庫含答案詳解
- 2026年浙江汽車職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試題庫及答案詳解一套
- 2026年長春早期教育職業(yè)學(xué)院單招職業(yè)技能考試題庫及參考答案詳解一套
- 2026年駐馬店幼兒師范高等??茖W(xué)校單招職業(yè)傾向性考試題庫及參考答案詳解一套
- 2025年鄂州市華容區(qū)屬國有企業(yè)面向社會(huì)公開招聘工作人員備考題庫完整答案詳解
- 【歷 史】2025-2026學(xué)年七年級上冊地圖信息合集課件
- 2025年楚雄市愛昕健康養(yǎng)老產(chǎn)業(yè)有限公司招聘備考題庫及一套答案詳解
- 屋面防水施工勞務(wù)合同
- 《高中物理電磁學(xué)復(fù)習(xí)課件》
- DB33-T 768.13-2024 安全技術(shù)防范系統(tǒng)建設(shè)技術(shù)規(guī)范 第13部分:娛樂場所
- 金融機(jī)構(gòu)安全操作培訓(xùn)
- 月子中心客服培訓(xùn)
- 2025年個(gè)人所得稅贍養(yǎng)老人分?jǐn)倕f(xié)議范本下載8篇
- 中級微觀經(jīng)濟(jì)學(xué)知到智慧樹章節(jié)測試課后答案2024年秋對外經(jīng)濟(jì)貿(mào)易大學(xué)
- 2023年民航華北空管局招聘筆試真題
- 蘭州市離婚協(xié)議書模板
- DB51∕2672-2020 成都市鍋爐大氣污染物排放標(biāo)準(zhǔn)
- 《山東省建筑工程消耗量定額》解釋全集
評論
0/150
提交評論