第五章 中斷系統(tǒng)_第1頁
第五章 中斷系統(tǒng)_第2頁
第五章 中斷系統(tǒng)_第3頁
第五章 中斷系統(tǒng)_第4頁
第五章 中斷系統(tǒng)_第5頁
已閱讀5頁,還剩133頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第五章

中斷系統(tǒng)

5.1中斷的基本概念中斷

CPU暫停執(zhí)行現(xiàn)行的程序,轉而處理隨機事件,處理完畢后再返回被中斷的程序處繼續(xù)執(zhí)行,這一全過程稱為中斷。中斷源能夠引發(fā)CPU中斷的信息源稱為中斷源。常見的中斷源為:一般I/O設備,如CRT終端、打印機等。數(shù)據(jù)通道,如磁盤、磁帶等。實時時鐘,如定時器芯片8253產生的定時中斷請求信號。故障信號,如電源掉電等。軟件中斷,如為調試程序而設置的中斷。中斷系統(tǒng)系統(tǒng)為實現(xiàn)中斷而采用的硬件和軟件措施。計算機采用中斷系統(tǒng)的目的維持系統(tǒng)的正常工作,提高系統(tǒng)效率。實時處理。為故障處理作準備。中斷系統(tǒng)應具備的基本功能對于硬設備的中斷請求,要具備屏蔽和開放功能,使得程序員能靈活控制。能實現(xiàn)“中斷判優(yōu)”,即中斷源排隊,當有多個中斷源提出請求時,高級別的中斷請求能被優(yōu)先響應。能實現(xiàn)中斷嵌套,即高級別的中斷源能夠中斷低級別的中斷服務程序。系統(tǒng)響應中斷后,能自動轉入中斷處理。中斷處理結束,能自動返回。5.2 8086中斷系統(tǒng)8086系統(tǒng)的中斷分類8086系統(tǒng)共有256種類型的中斷,對應的中斷類型號為:0~255??煞譃檐浖袛嗪陀布袛鄡纱箢悺\浖袛嘤蒀PU執(zhí)行某些指令引起的中斷稱為軟件中斷(亦稱內部中斷)。它包括:除法出錯中斷-0類型中斷在作除法時,若除數(shù)為0或商超出了有關寄存器能表示的數(shù)值范圍,則產生除法出錯中斷。例如 movbl,0 idivbl ;除數(shù)BL=0,產生除法錯中斷 movax,200h movbl,1 divbl ;商=200H,不能用AL表達 ;產生除法錯中斷單步中斷-1類型中斷在單步標志TF=1且中斷允許標志IF=1時,每執(zhí)行一條指令就引起一次中斷。斷點中斷-3類型中斷主要用在除錯調試程序中,利用“INT3”設置斷點,目的是顯示斷點前程序的執(zhí)行結果。當溢出標志OF=1時,執(zhí)行指令INTO,則產生溢出中斷。溢出中斷-4類型中斷例如MOV AX,2000HADD AX,7000HINTO ;2000H+7000H=9000H,溢出:OF=1

;因為OF=1,所以產生溢出中斷中斷指令INTnINTn是中斷指令,n是中斷類型號(0~255)。磁盤操作系統(tǒng)、基本輸入輸出系統(tǒng)的功能即是用INTn指令中斷調用。硬件中斷由CPU外部中斷請求引腳NMI和INTR引起的中斷稱為硬件中斷(亦稱為外部中斷)非屏蔽中斷通過CPU的NMI(Non-MaskableInterrupt)引腳進入,NMI被響應時,自動產生2號類型中斷。它不受中斷允許標志的屏蔽,微處理器無法禁止,將在當前指令執(zhí)行結束予以響應;8086的非屏蔽中斷的類型號為2;非屏蔽中斷主要用于處理系統(tǒng)的意外或故障。例如:電源調電前的數(shù)據(jù)保護存儲器讀寫錯誤的處理中斷請求信號通過CPU的INTR(打斷)引腳進入;中斷響應信號從INTA引腳發(fā)出;且中斷允許標志IF=1時,CPU響應中斷;若IF=0,則中斷請求被屏蔽;通??善帘沃袛嘣唇?jīng)過中斷控制器8259A管理再向CPU發(fā)INTR請求??善帘沃袛嘀袛鄻酥綢F的狀態(tài)IF=0:可屏蔽中斷不會被響應關中斷、禁止中斷、中斷屏蔽統(tǒng)復位,使IF=0任何一個中斷被響應,使IF=0執(zhí)行指令CLI,使IF=0IF=1:可屏蔽中斷會被響應開中斷、允許中斷、中斷開放執(zhí)行;指令STI,使IF=1執(zhí)行指令IRET恢復原IF狀態(tài)5.2中斷處理過程中斷過程中斷請求:

中斷源向CPU發(fā)出請求中斷信號。中斷信號將被鎖存,直到CPU響應中斷后,中斷請求信號才被清除。中斷響應:CPU在執(zhí)行每條指令的最后一個時鐘周期檢測中斷請求信號。若發(fā)現(xiàn)中斷請求信號有效,在允許中斷的條件下,CPU響應中斷。CPU會自動完成3項任務:關閉中斷,以禁止其它中斷請求。斷點(IP和CS)和標志寄存器內容入棧保護。獲得中斷服務程序入口地址,轉中斷服務程序。中斷處理:保護現(xiàn)場

相關工作寄存器的內容壓棧保護。開中斷

若要響應高級別的中斷,則需要打開中斷。執(zhí)行中斷服務程序關中斷

使得不被中斷,可順利恢復現(xiàn)場?;謴同F(xiàn)場

將壓棧保護的內容順序出棧給相關寄存器。中斷返回中斷服務程序的最后一條指令是中斷返回指令IRET,執(zhí)行后IRET后CPU自動從堆棧中彈出IP、CS和FLAGS的內容,返回主程序繼續(xù)執(zhí)行。NMIN軟件中斷INTRTF=1中斷響應周期讀中斷向量號下條指令現(xiàn)行指令IF=1NNNNYYYYY查詢中斷的順序,決定了各種中斷源的優(yōu)先權軟件中斷除法錯中斷指令中斷溢出中斷非屏蔽中斷可屏蔽中斷單步中斷高低Y還有NMITEMP=1標志寄存器入棧TEMP=TF,IF=TF=0CS:IP入棧獲取中斷向量執(zhí)行服務程序彈出CS:IP彈出標志寄存器返回被中斷程序(1)(2)(3)(4)(5)NNY(6)8086各種中斷源的優(yōu)先權,實際上是指被識別出來的先后;多種中斷同時請求時,最先響應的則可能是單步中斷或NMI中斷。中斷響應過程

中斷向量中斷向量中斷服務程序的入口地址亦稱中斷向量。它由兩部分組成:中斷服務程序所在段的段基址(2個字節(jié))。中斷服務程序入口的偏移地址(2個字節(jié))。中斷向量表一種類型的中斷向量為4個字節(jié),256種中斷的中斷向量總共占用1024個字節(jié)。在8086系統(tǒng)中,所有的中斷向量按類型順序存放于內存的最低地址(00000H~003FFH)的1K單元中。存放中斷向量的這1K單元稱為中斷向量表。N型中斷向量在中斷向量表中的位置:存放地址=N×4~(n×4+3)N×4字單元存放偏移地址;N×4+2的字單元存放段基址。例5.15型中斷向量存放在:5×4~5×4+3=14H~17H的4個單元中,其中14H、15H單元存放中斷服務程序入口的偏移地址;16H、17H單元存放中斷服務程序入口的段基址。例5.2

CPU執(zhí)行INT21H指令時,中斷向量的引導過程。假設21H型服務程序被放在地址為:XX:YY開始的內存區(qū),其中斷向量XX:YY存放在4×21H~4×21H+3的單元中。CPU取出INT21H指令后,CS:IP等于下一指令(標號NEXT:)存放單元的物理地址。CPU執(zhí)行INT21H之后:FAGS、CS、IP的當前值被壓棧保護。CPU從4×21H~4×21H+3的單元中取得中斷向量并寫入IP,

CS之中。CPU根據(jù)CS:IP值轉向21H型中斷服務程序。當中斷程序執(zhí)行完畢,執(zhí)行IRET指令時,CPU從棧頂順序彈出保護的斷點給IP、CS、FLAGS。CPU根據(jù)CS:IP返回斷點(NEXT:處),繼續(xù)執(zhí)行主程序。3)中斷向量表的初始化由BIOS提供的服務程序,其中斷向量是在系統(tǒng)加電后由BIOS負責設置。由DOS提供的服務程序,其中斷向量是在啟動DOS時由DOS負責設置。用戶開發(fā)的中斷服務程序,需要用戶設置中斷向量。設置中斷向量的方法為:直接指令裝入例5.3設置類型N的中斷向量,其中斷服務程序名為:INTHAND。MOVAX,0MOVES,AX;settobaseofinterruptvectorMOVBX,N﹡4;offsetoftypeNinterruptMOVAX,OFFSETINTHANDMOVES:WORDPTR[BX],AX;setaddrofMOVAX,SEGINTHAND;INTHANDMOVES:WORDPTR[BX+2],AXINTHAND:

;interruptprocessingroutine

IRET用DOS功能調用(INT21H)設置中斷向量25H功能:設置中斷向量把由AL指定的中斷類型的中斷向量放置在中斷向量表中預置:

AH=25HAL=中斷類型號

DS:DX=中斷向量執(zhí)行:

INT21H35H功能:取中斷向量把由AL指定的中斷類型的中斷向量從中斷向量表中取到ES:BX中。預置:

AH=35HAL=中斷類型號執(zhí)行:

INT21H返回時送:

ES:BX=中斷向量例5.4使用DOS功能調用存取中斷向量。MOVAL,N

;typeNinterruptMOVAH,35;getinterruptvectorINT21HPUSHES;savetheoldbaseandPUSHBX;offsetofinterruptNMOVAX,SEGINTHANDMOVDS,AX;baseofINTHANDinDSMOVDX,OFFSETINTHANDMOVAL,N;typeNMOVAH,25H;setinterruptvectorINT21HPOPDX;restoretheoldoffsetPOPDS;andbaseofinterruptMOVAL,N;typeNMOVAH,25H;setinterruptvectorINT21HRET;return;;interruptprocessingroutineINTHAND:

IRET例5.5實際中斷程序結構。實際應用中,為了運行某個應用程序,通常采用替代原來的中斷服務程序的辦法。為此,應先保存原中斷向量的內容,然后接管中斷向量使其指向編制的新中斷服務程序。最后,在應用程序終止退出前,從變量中獲取原中斷向量恢復到中斷向量表中。具體程序如下:STACKSEGMENTSTACK'STACK’DW128DUP(0)STACKENDS

DATASEGMENT'DATA'INT_SEGDW?;定義變量,以保存中斷向量段址INT_OFFDW?;定義變量,以保存中斷向量偏移量DATAENDSCODESEGMENT'CODE'ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA;建立數(shù)據(jù)段址MOVDS,AXMOVAL,N;N為指定中斷號MOVAH,35H;獲取中斷向量INT21HMOVINT_SEG,ES;保存中斷向量段址MOVINT_OFF,BX;保存中斷向量偏移量CLIMOVAL,N;N為指定中斷號MOVAH,25H;設置中斷向量MOVDX,SEGINT_PRMOVDS,DX;DS指向新中斷向量段址MOVDX,OFFSETINT_PR;

DX指向新中斷INT21H;向量偏移量MOVAX,DATAMOVDS,AX;恢復數(shù)據(jù)段尋址STI;開中斷

;主程序主體(略)CLI;恢復中斷向量前關中斷MOVAL,N;N為指定中斷號MOVAH,25H;恢復原中斷向量MOVDX,INT_OFF;DX指向原中斷向量偏移量MOVBX,INT_SEGMOVDS,BX;DS指向原中斷向量段址INT21H

STI;開中斷MOVAX,4C00H;主程序終止退出INT21H;返回DOSINT_PRPROCFAR;新中斷服務程序STI;入口處開中斷PUSH…;保存用到的寄存器PUSH…

中斷服務程序主體(略)

POP…

;恢復入口寄存器

POP…MOVAL,020H

;發(fā)中斷結束命令(EOI)OUT020H,ALIRET;中斷返回INT_PRENDP;中斷程序結束CODEENDS;主程序結束

ENDSTART內部中斷服務程序的編寫編寫內部中斷服務程序與編寫子程序類似利用過程定義偽指令PROC/ENDP第1條指令通常為開中斷指令STI最后用中斷返回指令IRET通常采用寄存器傳遞參數(shù)主程序需要調用中斷服務程序調用前,需要設置中斷向量利用INTn指令調用中斷服務程序例5.6內部中斷服務程序編寫80H號中斷服務程序功能:顯示以“0”結尾字符串的功能利用顯示器功能調用INT10H字符串緩沖區(qū)首地址為入口參數(shù)DS:DX(段地址:偏移地址)傳遞參數(shù)數(shù)據(jù)段

intoff dw? intseg dw? intmsg db‘AInstructionInterrupt!’ db0dh,0ah,0例5.6以“0”結尾回車、換行保存中斷向量

movax,3580h int21h movintoff,bx ;保存偏移地址

movintseg,es ;保存段基地址例5.6獲取中斷向量(DOS功能調用INT21H)功能號:AH=35H入口參數(shù):AL=中斷向量號出口參數(shù):ES:BX=中斷向量(段地址:偏移地址)設置中斷向量pushdsmovdx,offsetnew80hmovax,segnew80hmovds,axmovax,2580hint21hpopds例5.6設置中斷向量(DOS功能調用INT21H)功能號:AH=25H入口參數(shù):AL=中斷向量號DS:DX=中斷向量(段地址:偏移地址)調用中斷服務程序;設置入口參數(shù): DS=段地址(已設置)

DX=偏移地址

movdx,offsetintmsg int80h ;調用80H中斷服務程序例5.6AInstructionInterrupt!;80H號內部中斷服務程序:;顯示字符串(以“0”結尾);入口參數(shù):DS:DX=緩沖器首地址

new80h proc

sti ;開中斷

pushax ;保護寄存器

pushbx pushsi例5.6進入中斷服務程序AInstructionInterrupt!顯示字符串

movsi,dxnew1: moval,[si] cmpal,0 jznew2 movbx,0 movah,0eh int10h incsi jmpnew1例5.6AInstructionInterrupt!退出中斷服務程序

new2: popsi ;恢復寄存器

popbx popax

iret ;中斷返回

new80h endp例5.6AInstructionInterrupt!主程序結束

movdx,intoff movax,intseg movds,ax movax,2580h int21h movax,4c00h int21h例5.6AInstructionInterrupt!5.3中斷控制器8259A8259A中斷控制器由INTEL公司設計。1片8259A管理8級中斷源,多片8259A用級連方式可使管理級別擴充。使用單一+5V電源供電。8259A的內部結構中斷請求寄存器(8位)IRR保存8條外界中斷請求信號IR0~IR7的請求狀態(tài)Di位為1表示IRi引腳有中斷請求;為0表示無請求。中斷屏蔽寄存器(8位)IMR保存對中斷請求信號IR的屏蔽狀態(tài);Di位為1表示IRi中斷被屏蔽(禁止);為0表示允許。當IR7~IR0端有多個中斷請求同時發(fā)生時,由PR判定其最高優(yōu)先權;在INTA脈沖期間將它置入中斷服務寄存器ISR的相應位。優(yōu)先權判別器(PR)中斷服務寄存器(8位)ISR保存正在被8259A服務著的中斷狀態(tài);Di位為1表示IRi中斷正在服務中;為0表示沒有被服務。8位雙向三態(tài)緩沖器,構成8259A與系統(tǒng)數(shù)據(jù)線的接口。對8259A編程寫入的命令字和讀出8259A狀態(tài)信息都是通過它傳送。數(shù)據(jù)總線緩沖器6)讀寫控制邏輯接收讀/寫控制信號RD/WR、片選信號CS和端口選擇信號A0。一片8259A在系統(tǒng)中占用2個口地址,用地址線A0來選擇端口;用高位地址線通過譯碼產生8259A的片選信號。它有一組命令字(ICW1~ICW4)寄存器和操作字(OCW1~OCW3)寄存器以及相關的控制邏輯。它通過INT端向CPU發(fā)中斷請求信號,從INTA端接收CPU的中斷響應信號,控制8259A進入中斷狀態(tài)。7)控制電路級連緩沖/比較器一片8259A只能接收8級中斷,當超過8級時,可用多片8259A級連使用,構成主從結構??蓴U充到64級。中斷級連方式的連接一個系統(tǒng)中,8259A可以級連,有一個主8259A,若干個(最多8個)從8259A級連時,主8259A的三條級連線CAS0~CAS2作為輸出線,連至每個從8259A的CAS0~CAS2每個從8259A的中斷請求信號INT,連至主8259A的一個中斷請求輸入端IR主8259A的INT線連至CPU的中斷請求輸入端SP/EN在非緩沖方式下,規(guī)定該8259A是主片(SP=1)還是從片(SP=0)動畫示例8259A的引腳功能D7~D0:

雙向數(shù)據(jù)總線。用于傳送控制、狀態(tài)信息和中斷類型號。WR:

寫信號。輸入,低電平有效。當WR

有效時,若CS也有效,則允許該8259A接收CPU送來的命令字。RD:

讀信號。輸入,低電平有效。當RD

有效時,且CS也有效,則允許該8259A將狀態(tài)信息放入數(shù)據(jù)總線供CPU檢測。A0:

8259A只占兩個地址,A0與CS一同構成8259A的端口奇/偶地址選擇。CS:

片選信號。輸入,低電平有效。有效時,CPU可對該8259A進行讀寫。與處理器接口引腳的邏輯功能

A0RD*WR*CS*功能

0100110000101010×110×××1寫入ICW1、OCW2和OCW3寫入ICW2~ICW4和OCW1讀出IRR、ISR和查詢字讀出IMR數(shù)據(jù)總線高阻狀態(tài)數(shù)據(jù)總線高阻狀態(tài)IR7~IR0:

外部中斷請求信號。輸入。INT:中斷請求信號。輸出。當IR7~IR0任一引腳有中斷請求時,8259A從INT向CPU(通常是INTR引腳)發(fā)出中斷請求信號。INTA:中斷響應信號。輸入。當CPU接收到中斷請求信號,在允許中斷條件下,CPU響應中斷,并發(fā)出中斷響應信號到INTA端。CAS2~CAS0:

級連信號。雙向引腳。用于控制多片8259A的級連使用。主片:CAS2~CAS0引腳輸出;從片:CAS2~CAS0引腳輸入。

SP/EN:

雙功能引腳。當該8259A處于緩沖方式時,該引腳輸出,它用于總線收發(fā)器的使能信號;當該8259A處于非緩沖方式時,該引腳輸入,SP=1表示該片是主片,SP=0表示該片是從片。8259A的中斷過程CAS0~CAS2D0~D7SP/ENIR0~IR7CPU響應周期8259A工作波形INT第一個周期T1T2T3T4ALECLK

第二個周期T1T2T3T4第一個前保持為高電平

INTALOCK動畫

8259A的中斷管理方式中斷觸發(fā)方式電平觸發(fā)方式當IR7~IR0

出現(xiàn)高電平時,表示有中斷請求。這個高電平應持續(xù)到8259A收到第一個中斷響應脈沖之前。邊沿觸發(fā)方式當IR7~IR0

出現(xiàn)由低電平到高電平的躍變,表示有中斷請求。中斷屏蔽方式普通屏蔽方式將IMR中某一位或幾位置“1”,即可將相應位的中斷請求屏蔽。例如,將11110000寫入IMR,即可屏蔽IR7~IR4的中斷請求,開放

IR3~IR0

的中斷。特殊屏蔽方式通常情況下,當一個中斷被響應時,禁止同級或較低級別的中斷請求。在特殊屏蔽方式下,當一個中斷被響應時,僅屏蔽同級別的再次中斷,較低或較高級別的中斷請求可被允許進入。中斷優(yōu)先級別管理方式完全嵌套方式(固定優(yōu)先級方式)IR7~IR0的優(yōu)先級固定,IR0為最高級,IR1次之,IR7為最低級。

CPU響應某一級中斷時,8259A將ISR中與該中斷源對應的那一位置“1”,并自動禁止通級和較低級的中斷請求,但高優(yōu)先級中斷可中斷當前的服務,實現(xiàn)中斷嵌套。特殊全嵌套方式當CPU正處理某級中斷請求時,只禁止較低級別的中斷請求,而允許同級或較高級的中斷請求進入。特殊全嵌套方式用于多片8259A的級連系統(tǒng)中。主片處于特殊全嵌套方式,可響應來自同一從片的其它中斷請求。自動循環(huán)方式IR7~IR0中斷源輪流為最高優(yōu)先級,當任一級中斷服務結束后,該中斷源自動降為最低級,而它的下一級的中斷源自動升為最高級。例如:現(xiàn)正為IR3引入的中斷服務,若中斷服務程序完畢,IR3被賦予最低優(yōu)先級,IR4被賦予最高優(yōu)先級,各級中斷源的優(yōu)先級從高到低依次為:IR4,IR5,IR6,IR7,IR0,IR1,IR2,IR3。特殊循環(huán)方式用戶可置優(yōu)先權命令指定最低優(yōu)先級。例如:設置IRi為最低優(yōu)先級,則最高優(yōu)先級賦予IRi+1,其它各級按循環(huán)方式類推。中斷結束方式把ISR寄存器的中斷服務標志ISRi位清0,這意味著結束第i中斷源的中斷服務。如何將ISRi位清0,8259A提供了6種中斷結束方式。自動EOI方式8259A在收到第2個中斷響應脈沖信號之后,自動把ISR中置1的最高優(yōu)先級服務標志ISRi位清0。采用這種方式,不需要在中斷服務程序中向8259A送中斷結束(EOI)命令字。普通EOI方式在中斷服務程序結束,執(zhí)行IRET之前,向8259A送一個“普通中斷結束(EOI)”命令字,8259A收到EOI命令字后,把ISR中級別最高的置1位清0。在完全嵌套方式下,應采用普通EOI方式,但在特殊屏蔽方式下不能采用。特殊中斷結束方式該種方式下,在中斷服務程序結束,執(zhí)行IRET之前,向8259A送一個“特殊EOI”命令字,可將ISR中指定位清0。自動EOI,優(yōu)先級循環(huán)方式在CPU響應中斷,8259A在收到第2個中斷響應脈沖信號之后,自動把ISR中置1的最高優(yōu)先級服務標志ISRi位清0,并完成優(yōu)先級循環(huán)。普通EOI,優(yōu)先級循環(huán)方式在IRi的服務程序結束,執(zhí)行IRET之前,向8259A送一個“普通EOI,優(yōu)先級循環(huán)方式”命令字,8259A收到EOI命令字后,把ISR中級別最高的置1位清0,同時完成優(yōu)先級循環(huán)。特殊EOI,優(yōu)先級循環(huán)方式當前中斷服務結束,執(zhí)行IRET之前,向8259A送一個“特殊EOI,優(yōu)先級循環(huán)方式”命令字,可將ISR中指定位清0。并完成優(yōu)先級循環(huán)??偩€連接方式緩沖方式如果8259A通過總線驅動器和系統(tǒng)數(shù)據(jù)總線相連,則8259A應采用緩沖方式。此時SP/EN為輸出端,它輸出一個低電平信號,可作為總線驅動器的啟動信號。非緩沖方式如果8259A數(shù)據(jù)線和系統(tǒng)數(shù)據(jù)總線直接相連,則8259A應工作于非緩沖方式下。8259A的控制字及編程使用初始化編程8259A開始工作前,必須進行初始化編程給8259A寫入初始化命令字ICW中斷操作編程在8259A工作期間可以寫入操作命令字OCW將選定的操作傳送給8259A,使之按新的要求工作還可以讀取8259A的信息,以便了解他的工作狀態(tài)1)初始化命令字ICW初始化命令字ICW最多有4個8259A在開始工作前必須寫入必須按照ICW1~ICW4順序寫入ICW1和ICW2是必須送的ICW3和ICW4由工作方式?jīng)Q定ICW1—中斷請求觸發(fā)方式設定ICW1是第一個初始化命令字;ICW1使用偶端口(A0=0);D4位固定為1,表示當前寫入的是ICW1;寫入ICW1時,自動將中斷屏蔽寄存器IMR清0,并恢復各中斷源的優(yōu)先級為IR0最高,IR1次高,IR7最低。ICW1的格式為:寫ICW4單片使用無效電平觸發(fā)特征位16位機無效IC4SNGLADILTIM10000D0D1D2D3D4D5D6D7A0D0(IC4)位:是否寫ICW4選擇。D0=1,需要寫ICW4;D0=0,不寫ICW4。D1(SNGL)位:單片多片選擇。D1=0,多片級連使用;D1=1,單片使用。D3(LTIM)位:觸發(fā)方式選擇。D3=0,邊沿觸發(fā);D3=1,電平觸發(fā)。D7、D6、D5、D24位:8086CPU不用。D4位:特征位。D4=1表示寫入ICW1字。ICW2—中斷類型號設定ICW2的功能是設置中斷類型號;它使用奇端口(A0=1);緊跟在ICW1之后設置;D7~D3(T7~T3)是中斷類型號的高5位,用戶寫入。中斷類型號的低3位由8259A自動設定,IR0為000、IR1為001、……、IR7為111;它在第一個INTA到來時,將這個編碼寫入低3位;D2D1D03位固定寫000。16位機無效中斷類型號的高5位000T3T4T5T6T71D0D1D2D3D4D5D6D7A0ICW2的格式為:例5.6若對8259A采用電平觸發(fā),單片使用,需寫ICW4,則程序段為:MOVAL,1BH;ICW1的內容OUT20H,AL;寫入ICW1端口(A0=0)

例5.7在PC系列中斷系統(tǒng)中,硬盤的中斷類型號的高5位是08H,它的中斷請求線連到8259A的IR5上,寫ICW2字的程序段為:MOVAL,08H;ICW2的內容(中斷類型號高5位)OUT21H,AL;寫入ICW2端口(A0=1)ICW3中斷級連方式設定ICW3僅在多片級連方式中使用;ICW3使用奇端口(A0=1);對于主片8259A,若Si=1,表示IRi引腳上接有從片,否則,Si=0。對于從片8259A,用ID2ID1ID0的編碼表示本8259A接在主8259A的哪根引腳上。IR0~IR7對應的編碼為000~111。S0/ID0S1/ID1S2/ID2S3S4S5S6S71D0D1D2D3D4D5D6D7A0ICW4結束,嵌套方式設定ICW4使用奇端口(A0=1),它確定中斷結束的方式和中斷嵌套的方式。ICW4的格式為:μPMAEOIM/SBUFSFNM0001D0D1D2D3D4D5D6D7A0D0(μPM)位:系統(tǒng)選擇。D0

=0,用于8085系統(tǒng);D0=1,用于8086系統(tǒng)D1(AEOI)位:中斷結束方式選擇。D1=0,普通EOI方式;D1=1,自動EOI方式。D3(BUF)位:緩沖方式選擇。D3=1,工作于緩沖方式。D3=0,工作于非緩沖方式;在緩沖方式下,SP/EN引腳輸出給總線收發(fā)器。此時,由M/S位來定義本8259A是主片或是從片。D2(M/S)位:主/從片選擇。當BUF=1時(緩沖方式),D2=0為從片;D2=1表示主片。當BUF=0時,M/S位無意義。D4(SFNM)位:中斷嵌套方式選擇。D4=0表示普通全嵌套方式;D4=1表示特殊全嵌套方式。D7D6D5=000例5.8多片8259A級連方式連接,從片A和B的中斷請求線INT分別接到主片的IR3和IR6,故:從片A的ICW3=00000011B=03H;從片B的ICW3=00000110B=06H;主片的ICW3=01001000B=48H。程序段為從片A:MOVAL,03H;寫從片A的ICW3OUT0A1H,AL;ICW3的端口地址(A0=1)從片B:MOVAL,06H;寫從片B的ICW3OUT0B1H,AL;

ICW3的端口地址(A0=1)主片:MOVAL,48H;寫主片的ICW3OUT81H,AL;ICW3的端口地址(A0=1)例5.9PT86單板機中,CPU為8086,非自動結束方式;使用2片8259A,非緩沖方式;主片為特殊全嵌套方式。主片的ICW4=00010101B=15H;程序段為:MOVAL,15H;ICW4的內容MOVDX,0FFDFH;ICW4的端口地址(A0=1)OUTDX,AL操作命令字8259A工作期間,可以隨時接受操作命令字OCWOCW共有3個:OCW1~OCW3寫入時沒有順序要求,需要哪個OCW就寫入那個OCWOCW1中斷屏蔽字它對中斷請求輸入線IRi進行屏蔽控制,OCW1占用奇地址(A0=1),OCW1格式為:Di(Mi)=1,則IRi位請求被屏蔽;Di(Mi)=0,則IRi位請求被允許。M0M1M2M3M4M5M6M71D0D1D2D3D4D5D6D7A0例.5.10

要使IR3開放,其余均被屏蔽,則OCW1=11110111B=0F7H

;程序段為:MOVAL,0F7HOUT21H,AL;21H是奇端口(A0=1)例5.11IMR寄存器的內容可讀出。MOVAL,00;置IMR為全“0”O(jiān)UT21H,AL;OCW1的口地址INAL,21H;讀IMR(奇地址)

ORAL,AL;檢查是否為全“0”JNZERR;不為“0”,則轉錯誤處理MOVAL,0FFH;置IMR為全“1”O(jiān)UT21H,AL;OCW1的口地址INAL,21H;讀IMRADDAL,1;檢查是否為全“1”JNZERR;不為全“1”,轉錯誤處理OCW2

優(yōu)先級循環(huán)及結束方式操作字OCW2作用是設定8259A的中斷優(yōu)先級循環(huán)和結束方式。OCW2占用偶地址(A0=0)。OCW2格式為:L0L1L2000D0D1D2D3D4A0中斷等級編碼特征位中斷結束設定指定中斷級別優(yōu)先級循環(huán)EOISLRD5D6D7D7(R):中斷優(yōu)先級循環(huán)設定D7=0,固定優(yōu)先權方式;D7=1,循環(huán)方式。D6(SL):中斷級別指定D6=0,不指定中斷級別,L0~L2編碼無效;D6=1,要用L0~L2編碼來指定中斷優(yōu)先級。D5(EOI):中斷結束命令位當ICW4中的AEOI位=1時,D5=1可使當前ISR寄存器中相應位清“0”。D2D1D0(L2L1L0):中斷等級編碼。L2L1L0的8種編碼:000B~111B分別與IR0~IR7

對應。D4D3:特征位。的D4D3=00表示是OCW2。無操作010置優(yōu)先權命令011自動EOI循環(huán)方式(置位)001自動EOI循環(huán)方式(復位)000特殊EOI命令111普通EOI命令101特殊EOI命令110普通EOI命令100意義EOISLR表5.1R,SL,EOI的設置及意義R,SL,EOI不同設置的意義說明編碼=001:普通EOI命令。

它在中斷服務程序結束時發(fā)出,8259A接到該命令后,將當前ISR中優(yōu)先級最高的置“1”位清“0”。編碼=011:特殊EOI命令。當中斷處理結束,8259A接收到該命令后,將ISR中由L2L1L0編碼指定的相應位清“0”。編碼=101:普通EOI循環(huán)命令。8259A接收到該命令后,將ISR中優(yōu)先級最高的置“1”位清“0”,并將剛結束的中斷請求IRi賦予最低優(yōu)先級,把最高優(yōu)先級賦予IRi+1,其它級別按循環(huán)排序。編碼=111:特殊EOI命令。8259A接收到該命令后,將ISR中由L2L1L0編碼指定的相應位清“0”,并將最低優(yōu)先級賦予這一中斷請求,最高優(yōu)先級賦予它的下一級中斷請求,其它級別按循環(huán)方式依次改變。編碼=000和100:使8259A取消自動EOI循環(huán)方式(復位)和設置自動EOI循環(huán)方式(置位)。在自動EOI循環(huán)方式下,8259A在接收到中斷響應信號后,將ISR中相應位清“0”,并將最低優(yōu)先級賦予這一中斷請求,最高優(yōu)先級賦予它的下一級中斷請求,其它級別按循環(huán)方式依次改變。編碼=110:向8259A發(fā)置優(yōu)先權命令,將最低優(yōu)先級賦予由由L2L1L0編碼指定的中斷請求IRi,其它中斷請求的級別按循環(huán)方式分別賦給。OCW3查詢中斷方式和特殊屏蔽方式操作OCW3的端口為偶地址(A0=0),OCW3格式為:讀ISR讀寄存器允許查詢方式特征特殊屏蔽方式特殊屏蔽允許不用RISRRP10SMMESMM×0D0D1D2D3D4D5D6D7A0D4D3=01是OCW3的特征位。D6(ESMM):特殊屏蔽方式允許位。ESMM=0,將SMM位屏蔽,使其無效;ESMM=1,開放SMM位,使其有效。D5(SMM):特殊屏蔽方式設定。當ESMM=1時,若SMM=1,選擇特殊屏蔽方式;SMM=0,不選擇特殊屏蔽方式。D2(P):查詢命令標識位,P=1,告之8259A,CPU將執(zhí)行一條讀中斷狀態(tài)字字指令,并使讀其它寄存器命令無效;P=0,不讀中斷狀態(tài)字。D1(RR)D0(RIS):讀ISR和IRR中的狀態(tài)信息標識位,僅當P=0時有效。RR=1,RIS=0

表示在下一條“IN”指令時從偶地址(A0=0)讀IRR中的狀態(tài)信息;RR=1,RIS=1

表示在下一條“IN”指令時從偶地址(A0=0)讀ISR中的狀態(tài)信息。RR=0,則RIS位無效。IMR中的信息可直接用“IN”指令從奇地址(A0=1)讀出。查詢中斷方式的說明:當P=1時,表示向8259A發(fā)查詢命令,可讀出中斷狀態(tài)字,了解8259A當前的中斷狀態(tài)。中斷狀態(tài)字的格式為:D7(IR):有無中斷請求位。IR=1表示有中斷請求;IR=0,表示無中斷請求。D2D1D0(W2W1W0):當前正在請求的中斷的最高優(yōu)先級編碼:W2W1W0=000~111分別與IR0~IR7

對應。W0W1W2----IR0D0D1D2D3D4D5D6D7A0使用查詢中斷方式時,CPU應先關閉其中斷請求,再發(fā)查詢命令字(P=1的OCW3),然后用“IN”指令讀中斷狀態(tài)字。例5.12若對IR3中斷源采用非自動指定(特殊)中斷結束方式,則:OCW2=01100011B=63H;程序段為:MOVAL,63H;將OCW2OUT20H,AL;寫入偶端口(A0=0)例5.13特殊屏蔽方式的編程。設系統(tǒng)正為IR4服務,同時允許級別較低的中斷請求進入。方法:先用特殊屏蔽命令將IR4中斷暫時屏蔽,再響應較低級別的中斷請求,完成較低級別的中斷服務后,解除對IR4的屏蔽,繼續(xù)為IR4服務。編程:為IR4中斷服務程序

CLI;關中斷MOVAl,10H;置OCW1的M4=1,屏蔽IR4MOVDX,PORT1;OCW1的口地址(A0=1)OUTDX,ALMOVAL,68H;置OCW3為特殊屏蔽方式MOVDX,PORT2;OCW3的口地址(A0=0)OUTDX,ALSTI;開中斷CLI;關中斷MOVAL,48H;置OCW3為復位特殊屏蔽方式MOVDX,PORT2

;OCW3的口地址(A0=0)OUTDX,ALMOVAL,00H;置OCW1的M4=0,開放IR4MOVDX,PORT1;OCW1的口地址(A0=1)OUTDX,ALSTIMOVAL,01100L2L1L0

;OCW2

指定中斷結束MOVDX,PORT2;OCW2的口地址OUTDX,ALIRET;中斷返回例5.14通過OCW3讀8259A的狀態(tài)。讀IRR:OCW3=00001010B=0AH讀ISR:OCW3=00001011B=0BH編程:MOVAL,0BH;OCW3表示要讀ISROUT20H,AL;20H是OCW3的口地址NOP;空拍延時INAL,20H;讀ISR的內容(偶地址A0=0)MOVAH,AL;保存ISR→AHORAL,AH;是否為全0?JNZAW_INT;否,轉硬件中斷程序8259A在IBMPC系列機上的應用(1)

使用要求與特點:采用2片8259A級連,共15級向量中斷;從片的INT接到主片的IR2;主從片的中斷請求信號均采用邊沿觸發(fā);采用完全嵌套方式,優(yōu)先級排序為:0,1,8~15,3,4,5,6,7級;采用非緩沖方式;0~7級對應的中斷類型號為8~0FH,8~15級對應的中斷類型號為70H~77H。8259A在IBMPC系列機上的應用CAS0~2CAS0~2+5V主8259A8228880286CPUINTRD0~D7SP/ENINTD0~D7日時鐘鍵盤串行口2串行口1并行口2軟盤并行口1A0INTR1CS—IRQ0—IRQ1IRQ2—IRQ3—IRQ4—IRQ5—IRQ6—IRQ7—A0—CS

從8259AD0~D7INTSP/EN實時鐘改向0AH中斷保留保留保留協(xié)處理器硬盤保留A0INTR2CS—IRQ8—IRQ9—IRQ10—IRQ11—IRQ12—IRQ13—IRQ14—IRQ15—A0—CS系統(tǒng)總線B25……B24……B23……B22……B21……系統(tǒng)總線B4…D3………D4………D5………D6………D7………INTARDWRINTAIORIOWINTARDWR8259A在IBMPC系列機上的應用(續(xù))CAS0~2

從8259AD0~D7INTSP/EN實時鐘改向0AH中斷保留保留保留協(xié)處理器硬盤保留A0INTR2CS—IRQ8—IRQ9—IRQ10—IRQ11—IRQ12—IRQ13—IRQ14—IRQ15—A0—CS系統(tǒng)總線B4…D3………D4………D5………D6………D7………INTARDWR對比在IBMPC/XT機的應用(2)

硬件連接圖(3)初始化編程;初始化8259A主片:(流程)INTA00EQU020H;8259A主片端口0INTA01EQU021H;8259A主片端口1MOVAL,11;ICW1:邊沿觸發(fā)、多片、寫ICW4OUTINTA00,ALJMPSHORT$+2;端口延時要求MOVAL,8;ICW2:中斷類型號的高5位OUTINTA01,ALJMPSHORT$+2;端口延時要求MOVAL,04H;ICW3:主片的IR2上接從片OUTINTA01,AL;(S2=1)JMPSHORT$+2;端口延時要求MOVAL,01H;ICW4:非緩沖,全嵌套OUTINTA01,AL;非自動結束;初始化從片:INTB00EQU0A0H;8259A從片端口0INTB01EQU0A1H;8259A從片端口1

MOVAL,11;ICW1:邊沿觸發(fā)、多片、寫ICW4OUTINTB00,ALJMPSHORT$+2;端口延時要求MOVAL,70H;ICW2:中斷類型號的高5位OUTINTB01,ALJMPSHORT$+2;端口延時要求MOVAL,02H;ICW3:從片的INT接主片IR2OUTINTB01,AL;(ID2ID1ID0=010)JMPSHORT$+2;端口延時要求MOVAL,01H;ICW4:非緩沖,全嵌套OUTINTB01,AL;非自動結束外部中斷服務程序編寫外部可屏蔽中斷服務程序,需注意:發(fā)送中斷結束命令一般只能采用存儲單元傳遞參數(shù)不要使用DOS系統(tǒng)功能調用中斷服務程序盡量短小編寫主程序,需注意:修改中斷向量控制CPU的中斷允許標志設置8259A的中斷屏蔽寄存器例5.16可屏蔽中斷服務程序8259A的IRQ0(向量號為08H)中斷請求來自定時器8253,每隔55ms產生一次本程序的08H號中斷服務程序,每次中斷顯示一串信息,顯示10次用內存單元(共享變量)在主程序與外部中斷服務程序之間傳遞參數(shù):中斷次數(shù)顯示信息也安排在共同的數(shù)據(jù)段中數(shù)據(jù)段

intmsg db‘A8259AInterrupt!’ db0dh,0ah,0 counter db0例7.2保存中斷向量

movax,3508h int21h pushbx ;保存偏移地址

pushes ;保存段基地址例5.18設置中斷向量

cli pushds movdx,offsetnew08h movax,segnew08h movds,ax movax,2508h int21h popds例5.16設置中斷寄存器

inal,21h pushax andal,0feh ;允許IRQ0 out21h,al movcounter,0 ;設置中斷次數(shù)初值

sti ;開中斷例5.16循環(huán)等待中斷

start1: cmpcounter,10 jbstart1 ;中斷10次退出例5.16中斷就在主程序循環(huán)當中

new08h proc

溫馨提示

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

評論

0/150

提交評論