550 likes | 783 Views
第五章 中斷與中斷應用. Interrupt and Interrupt Applications. 內容大綱. 緒論 中斷與中斷處理 80x86 之中斷 、中斷指令 、中斷旗標位元 硬體中斷 8259A 可程式中斷控制器 8259A 簡介 8259A 之接線 單一 8259A 之接線 、多顆 8259A 之串接電路. 內容大綱 ( 續 ). 8259A 格式設定與作業程式 初始命令字組 (ICWs) 、操作命令字組 (OCWs) 8259A 設定 單一 8259A 設定 、多顆 8259A 串接設定. 緒論.
E N D
第五章 中斷與中斷應用 Interrupt and Interrupt Applications
內容大綱 • 緒論 • 中斷與中斷處理 80x86之中斷 、中斷指令 、中斷旗標位元 • 硬體中斷 • 8259A可程式中斷控制器 8259A簡介 • 8259A之接線 單一8259A之接線 、多顆8259A之串接電路
內容大綱 (續) • 8259A格式設定與作業程式 初始命令字組(ICWs)、操作命令字組(OCWs) • 8259A設定 單一8259A設定 、多顆8259A串接設定
緒論 • 本章之主要目的乃是介紹80x86微處理器之中斷型態(interrupt types),說明微電腦對中斷請求之反應,讓讀者熟悉如何表示中斷副程式以及中斷指令之應用。
內容大綱(我們在哪裡?) • 緒論 • 中斷與中斷處理 80x86之中斷 、中斷指令 、中斷旗標位元 • 硬體中斷 • 8259A可程式中斷控制器 8259A簡介 • 8259A之接線 單一8259A之接線 、多顆8259A之串接電路
中斷與中斷處理 • 80x86之中斷 ◇ 硬體中斷 :當一個外來之訊號作用於“不可遮蓋中斷” (NMI) 輸入接腳或“中斷”(INTR)輸入接腳時 ,CPU不論 正在執行任何程式,皆會暫時中斷先執行中斷服 務程式。 與硬體中斷相關之接腳除INTR與NMI二請求接腳 外,尚包含用以確認INTR中斷請求之 接腳。
中斷與中斷處理(續) • 80x86之中斷 ◇ 軟體中斷 :藉由執行INT、INTO、INT3與BOUND等 指令來進行。 ◇ 程式執行錯誤,CPU自動執行中斷動作。
中斷與中斷處理(續) • 80x86之中斷 80x86中斷處理流程
中斷與中斷處理(續) 中斷向量表: 用以儲存中斷服務程式存放位 置,當中斷訊號發生時,使 CPU可精確跳至該中斷訊號所 指定之中斷服務程式去執行工 作。 • 80x86之中斷
中斷與中斷處理(續) • 軟體中斷指令:BOUND、INTO、INT、INT 3、IRET BOUND:用以比較某暫存器與二個字元之資料。 BOUND AX, DATA;比較AX與DATA及DATD+1之內容, ;並比較AX與DATA+2及DATA+3之內容 若AX < [DATA與DATA+1]或AX > [DATA+2與DATA+3], 則產生第五型之中斷動作。
中斷與中斷處理(續) • 軟體中斷指令: INTO:檢查溢位旗標(OF),若OF=1則呼叫存於第四型中斷向 量內之位址所對應之中斷服務程式,若OF=0,則繼續 執行一個指令。 INTn:呼叫儲存於第n個中斷向量內之位址所對應之中斷服務 程式,例如INT 128乃是呼叫儲存於第128個中斷向量內 之位址之對應中斷程式 。 IRET:將CPU中斷服務程式拉回至原執行程式之指令。
中斷與中斷處理(續) • 中斷旗標位元 旗標暫存器 中斷旗標IF以及trap旗標TF之內容在旗標暫存器之資料被送至堆疊後即被清除。 IF = 1:INTR接腳即可用來請求中斷,反之則INTR接腳之中斷 請求功能暫時失效。 TF = 1:則在每一指令執行完畢後會產生trap中斷(第一型),若 TF = 0則進行正常之程式執行動作。
中斷與中斷處理(續) TF設定中斷服務副程式(TRON) • 中斷旗標位元
中斷與中斷處理(續) • 中斷旗標位元 清除TF中斷服務副程式
中斷與中斷處理(續) • 中斷旗標位元 以〝TRON〞指定第51H個中斷向量(可以INT 81呼叫)
內容大綱(我們在哪裡?) • 緒論 • 中斷與中斷處理 80x86之中斷 、中斷指令 、中斷旗標位元 • 硬體中斷 • 8259A可程式中斷控制器 8259A簡介 • 8259A之接線 單一8259A之接線 、多顆8259A之串接電路
硬體中斷 • 80X86有NMI與INTR兩個硬體中斷輸入接腳,當NMI致能時CPU會執行第二型中斷動作。 • INTR接腳需以外部解碼電路來選擇中斷向量,實際應用上應用於第20H至FFH(32~255)型之中斷向量 。 • 接腳亦是一與中斷相關之接腳,用於回應INTR接腳之中斷請求。 80286之中斷接腳
硬體中斷(續) • NMI 正邊緣觸發(0至1)中斷請求接腳,當訊號由0變成1時,NMI需保持高準位直到其請求被CPU認可。 NMI通常用於parity以及諸如電源斷路之系統錯誤。 電源斷路偵測電路
硬體中斷(續) • INTR與 INTR中斷請求由外在事件來設定,然後於中斷服務程式中被清除。 當中斷請求被CPU接受後,INTR即失能,中斷服務程式末端之INTR指令又再使其恢復致能。 80286微處理器今藉由輸出脈波訊號 以回應INTR中斷之請求,並由資料匯流排D7-D0讀取欲執行中斷向量碼。
INTR與 時序圖 硬體中斷(續) • INTR與
硬體中斷(續) • INTR與 中斷向量碼FFH輸入電路
可提供任意中斷向量碼之 應用電路 硬體中斷(續) • INTR與
內容大綱(我們在哪裡?) • 緒論 • 中斷與中斷處理 80x86之中斷 、中斷指令 、中斷旗標位元 • 硬體中斷 • 8259A可程式中斷控制器 8259A簡介 • 8259A之接線 單一8259A之接線 、多顆8259A之串接電路
8259A可程式中斷控制器 • 8259A簡介 D7-D0 (雙向資料匯流排): IR7-IR0 中斷請求): (寫入): (讀取): INT(中斷): (中斷確認): A0(位址線): (晶片選取): (被動程式/致能緩衝器) CAS2-CAS0(單接線) 8259A接腳示意圖
內容大綱(我們在哪裡?) • 緒論 • 中斷與中斷處理 80x86之中斷 、中斷指令 、中斷旗標位元 • 硬體中斷 • 8259A可程式中斷控制器 8259A簡介 • 8259A之接線 單一8259A之接線 、多顆8259A之串接電路
8259A之接線 • 單一8259A之接線 單一8259A與CPU接線
8259A之接線(續) • 單一8259A之接線 多顆8259A之串接電路
內容大綱(我們在哪裡?) • 8259A格式設定與作業程式 初始命令字組(ICWs)、操作命令字組(OCWs) • 8259A設定 單一8259A設定 、多顆8259A串接設定
8259A格式設定與作業程式 • 初始命令字組(ICWs) 8259A之規劃需先設定ICW1,然後ICW2 若系統是多數串接的型態,則需分別設定主動與被動8259A之ICW3,若無串接則不需設定ICW3 ICW4是否需要設定則由ICW1之D0位元(IC4)之值來決定,若IC4=1則需再設定ICW4 8259A初始命令設定流程圖
8259A格式設定與作業程式(續) • 初始命令字組(ICWs) ICW1: ICW1格式
8259A格式設定與作業程式(續) • 初始命令字組(ICWs) ICW1: D0(IC4):IC4=1,表示ICW4需要設定,反之則IC4=0,表示不需設定ICW4。 D1(SNGL):在80x86系統通常使用二顆8259A之串接架構(圖5-11),故D1=1。 D2(ADI):在80x86系統時設定為D2=0。 D3(LITM):此位元用以指定8259A之中斷觸發型態。 D4:D4=1,D4=1且A0=0表示此ICW為ICW1。 D5 ~D7:此三位元全部均為0。 A0:此接腳設定為0,對80×86系統而言,通常=00010001B=11H。
8259A格式設定與作業程式(續) • 初始命令字組(ICWs) ICW2: ICW2格式
8259A格式設定與作業程式(續) • 初始命令字組(ICWs) ICW2: D2~D0(A10~A8): 在80X86系統此之位元設為0。 D7~D3 ( A15~A11/ T7~T3): ICW2是用以決定8259A中斷請求之向量碼,圖5-2之中斷向量碼每個8259A可決定8個中斷向量,故僅需將IRQ之中斷向量碼寫入ICW2即可,其餘之向量碼則依序加1可。例如,若欲使用08H-0FH之中斷向量,則ICW2=00001000H,若欲使用70H-77H則ICW2=01110000H。
8259A格式設定與作業程式(續) ICW3格式 • 初始命令字組(ICWs) ICW3: D7 ~D0: 主動8259A之位元用以說明具中斷請求訊號IR7 ~IR0是否有其他串接之被動8259A,若IR7 ~IR0中之任一接腳有與被動8259A串接,則其值為1, D2 ~D0則描述其串接於主動8259A之接腳位元。 例如圖5-11之電路,主動8259A之IR2串接至被動8259A。故主動元件之ICW3=00000100B,被動元件之ICW3亦是00000100B。
8259A格式設定與作業程式(續) • 初始命令字組(ICWs) ICW4: ICW4格式
8259A格式設定與作業程式(續) • 初始命令字組(ICWs) ICW4: D(μPM,Microprocessor Mode)對80×86系統,此位元設為高電位(D=1)。 D(AEOI,Automatic End of Interrupt):D=1,則表示8259A將自動中斷結束模式。D=0則表示8259A將用正常中斷 結束模式。 D2 (M/S , Master/Slave):80X86因採用非緩衝模式(nonbuffered mode),故D2=0。 D3 (BUF, Buffer Mode):D3=1則8259A作業於在緩衝模式,反之則作業於非緩衝模式。當8259A作業模式為緩衝模式時,其 接腳為輸入接腳( ),若8259A作業於非緩衝模式,則為輸出接腳( ), 表示8259A為主動元件, 則表示8259A為從動元件。 D4 (SFNM , Special Fully Nested Mode):D4=1表示採用特殊全完巢狀模式,反之,則採用完全巢狀模式。 D7 ~D5:未使用,故全設為0。
8259A格式設定與作業程式(續) • 操作命令字組(OCWs) OCW1: OCW1格式
8259A格式設定與作業程式(續) • 操作命令字組(OCWs) OCW1: A0:設為1。 D 7 ~D0 (M7 ~ M0):此8個位元乃是用此設定與重置8259A之中斷遮蓋暫存器(IMR)之遮蓋位元(IR7~IR0),M1控制IR0…….,M7控制IR7,當Mi=1,i=0……7,則其對應之中斷輸入IRi為禁能,縱然有來自IRi之中斷請求,CPU將不予處理。
8259A格式設定與作業程式(續) • 操作命令字組(OCWs) OCW2:
8259A格式設定與作業程式(續) • 操作命令字組(OCWs) OCW2: D2~D0(L2~L0):此三位元需與D7~D5一起使用,是用以決定中斷請求接腳之序號, 8259A以非特定中斷結束操作時(OCW2=20H),此三位元無作用,若是吾人欲重設ISR中的某特定位元,則D2~D0用以指定欲重設之IR之序號,而D7~D5需設為011,例如OCW2=63H即表示ISR中之第3位需被重置。 D4~D3: 此二位元為OCW2之辨識碼,恆設為0。 D7~D5(R/SL/EOI):此三位元用以設定中斷結束模式與旋轉模式,共有8種可能組合。如ICW4之D4字元後定說明所述,完全巢狀模式中之中斷請求優先權以IR0為最高,IR7為最低,有二種方式可改變此優先順序,自動中斷模式旋轉法與特定旋轉法。
8259A格式設定與作業程式(續) • 操作命令字組(OCWs) OCW2: 自動中斷模式旋轉法 自動中斷模式旋轉法之操作要點乃是將目前正在處理之中斷請求輸入之優先權設成最低,接於其後之中斷請求輸入則改成最優先,若欲8259A能於每個中斷請求執行完畢後,自動改變優先順序,則可選擇圖5-18中自動旋轉之二種方法,亦即R/SE/EOI = 101或100,而R/SL/EOI = 000則是解除自動旋轉設定。 特定中斷模式旋轉法 如圖5-18所示,有二種特定旋轉模式亦可改變中斷請求之優先順序,分別是以R/SL/EOI = 111與110搭配L2~L0指定中斷請求輸入序號設定,在特定旋轉法中,由L2~L0所指定之中斷請求輸入其優先權為最低,其後之中斷請求序號則為最高,其餘則依次遞減,例如OCW2=11000011時,則IR3(011)之優先權為最低,IR為最高,依次為IR5、IR6、IR7、IR0、IR1、IR2。
8259A格式設定與作業程式(續) • 操作命令字組(OCWs) OCW3:
8259A格式設定與作業程式(續) • 操作命令字組(OCWs) OCW3: D1-D0(RR/RIS):此二位元用以指定讀取IRR或ISR暫存器之資料,RR/RIS =10時,讀取IRR暫存器之資料,RR/RIS=11時則讀取ISR暫存器之內容,當RR/RIS=0x時則無讀取動作。 D2(P):此位元用以設定8259A作業於查詢(pull)或中斷模式,P=1表作業於查詢模式,P=0則是設定8259A作業於中斷模式,在查詢模式下,INT被禁能,亦即INT之中斷請求功能失效,通常P=0以確保8259A作業於中斷模式。 D4~D3:此二位元未使用,恆設為D4D3=01。 D6-D5(ESMM/SMM):此二位元用以設定或主置8259A之特殊遮蓋模式(special mask mode),當ESMM/SMM = 11時,8259A設定為特殊遮蓋模式,當ESMM/SMM = 10時,8259A重置為正常遮蓋模式,ESMM/SMM= 0×則無法設定動作產生。
內容大綱(我們在哪裡?) • 8259A格式設定與作業程式 初始命令字組(ICWs)、操作命令字組(OCWs) • 8259A設定 單一8259A設定 、多顆8259A串接設定
8259A設定 • 單一8259A設定 設8259A之I/O位址為0×FFA0與0×FFA1,則8259A之ICWs與OCWs各暫存器之I/O位址為:
8259A設定(續) • 單一8259A設定 規劃程式如下: 規劃8259A時,須先送出初始命令字(ICW1),8259A ICW1位址:0x00FFA0 此處規劃內容0X13:單一一顆8259A,需要ICW4,採邊緣觸發模式 outportb( 0x00FFA0, 0X13 ); 規劃ICW2,8259A ICW2位址:0x00FFA1,此處規劃內容0X09:規劃8259A的 IR0 為第九型 outportb( 0x00FFA1, 0X09 ); 規劃ICW4,8259A ICW4位址:0x00FFA1,此處規劃內容0X01:非緩衝模式, 完全巢狀模式 outportb( 0x00FFA1, 0X01 );
8259A設定(續) • 單一8259A設定 規劃程式如下(續): 規劃作業命令字OCW1,OCW1 位址:0x00FFA1,此處規劃內容0X0FF:禁能 所有中斷請求 outportb( 0x00FFA1, 0XFF );
8259A設定(續) • 多顆8259A串接設定 設圖5-11之主動8259A之I/O位址與圖5-10之8259A相同,從動8259A之I/O位址為0XFFB0與OXFFB1,從動8259A內部各ICW3與OCW3之I/O位址為:
8259A設定(續) • 多顆8259A串接設定 主動8259A規劃程式如下: 規劃8259A時,須先送出初始命令字(ICW1),8259A ICW1位址:0x00FFA0 此處規劃內容0X11:串接8259A,需要ICW4,採邊緣觸發模式 outportb( 0x00FFA0, 0X11 ); 規劃ICW2,8259A ICW2位址:0x00FFA1 此處規劃內容0X09:規劃8259A的 IR0 為第九型 outportb( 0x00FFA1, 0X08 ); 規劃ICW4,8259A ICW3位址:0x00FFA1 此處規劃內容0X04:8259A 的 IR2 串接 8259A outportb( 0x00FFA1, 0X04 );
8259A設定(續) • 多顆8259A串接設定 主動8259A規劃程式如下(續): 規劃ICW4,8259A ICW4位址:0x00FFA1 此處規劃內容0X01:非緩衝模式 outportb( 0x00FFA1, 0x01 ); 程式中之ICW3主要是將主動元件與從動元件連結之IR接腳明確定義,以致當有來自該IR接腳中斷請求時,主動元件透過CAS2 ~CAS0接腳將識別碼正確傳至相對應之從動元件。