正文 第五章 Z80中斷係統(一)(2 / 3)

中斷排隊可以采用硬件的方法,也可以采用軟件的方法,前者速度快,但需要增加硬設備,後者無需增加硬設備,但速度慢,特別是中斷源很多時尤為突出。

3.中斷響應

經中斷排隊後,收到一個優先級別最高的中斷請求信號,若正在執行指今,就不能去響應這個請求。如果可以響應中斷,當一條指令執行完畢,就中止執行現行程序,響應中斷申請轉去執行中斷服務程序,所謂中斷響應就是如何找到中斷程序入口的過程,這個過程是硬件與軟件有機配合的過程,不同機器有不同實現方法,一般有下麵幾種:

(1)中斷隱指令當響應中斷後,由硬件電路直接提供調用指令的機器碼,接著執行這條指令而轉入中斷服務程序入口。這條指令不是預先安排在程序印麵,而是由硬件電路提供的,所以稱為隱指令。上麵已經講過,由於中斷是隨機產生的,所以轉入中斷服務程序入口,不可能由程序員事先安排調用指令的辦法來實現。

(2)中斷向量為了適應實時係統的要求,又提出了向量中斷方式。它由請求中斷的外部設備口提供8位的向量,口報據這個向量由間接尋址方式轉到不同的中斷處理服務程序入口。這種方式很適合於多級中斷響應,Z80的方式2中斷就是典型的問中斷。

4.中斷處理

中斷響應後,進入中斷處理、首先將當前程序計數器值壓入堆棧,在外設接口的配合下,不同中斷方式有不同規則,中斷響應,把中斷服務程序入口地址放入中,從而轉入中斷服務程序。與此同時由硬件電路關閉了口內的允許中斷觸發器。在進行程序設計時,應考慮到在執行中斷服務程序時,首先要保護現場,把中斷服務中使用到的寄存器內容保護起來,如壓入堆棧,然後才進行與此次中斷有關的相應處理。處理完畢恢複現場,即恢複中斷前各寄存器的內容。

5.中斷返回

通常在中斷服務程序的最後一條指令是一條中斷返回指令。當執行這條指令時,把原來程序被中斷的斷點地址從堆棧中彈回中。這樣,被中斷的程序就可以從斷點處繼續執行下去。從中斷服務程序又回到了被中斷的主程序。

5.1-5 多重中斷的概念

所謂多重中斷,就是在口執行某一中斷服務程序時,又有優先級別更高的中斷源申請中斷,此時,應當暫時停止這個中斷服務,而去處理優先級別比它高的中斷申請。處理完畢再返回中斷點,繼續處理較低優先級的中斷。這種在低級中斷中還嵌套有高級中斷的多重中斷方式,對實時處理係統是很有用的。

5.2 Z80中斷係統的特點

Z80有兩種中斷輸入:非屏蔽中斷和軟件屏蔽中斷。

非屏蔽中斷不可能由程序員用程序來屏蔽。無論何時,當外設申請非屏蔽中斷,在現行指令執行完畢後,中斷就被響應。這種中斷方式是為一些隻要一出現中斷請求就必須立即響應的中斷源設置的。例如電源故障中斷源,監控中的單步處理,設斷點等。一般就采用非-蔽中斷來響應。

屏蔽中斷可以由程序員設定允許響應或禁止響應因為屏蔽中斷申請後,;能否響應其申請,還必需具備有Z80內的中斷觸發器處於置“1”狀態這個條件。因此當程序不允許中斷時,程序員可以用關中斷指令將置這時雖然出現屏蔽斷請求信號,也不會去響應中斷請求而繼續執行原程序。

Z80的屏蔽中斷有三種響應方式,分別稱為方式0、方式1、方式2;芯片有兩根用於中斷請求的輸入端,是非屏蔽中斷請求,而是屏蔽中斷請求。

一旦出現負跳變;在現行指令執行結束就立即響應。此時不取下一條指令,而執行一條自行產生的重新啟動指令,轉到006611地址單元即非屏蔽中斷?變為有效,而且時,則在現行指令執行完,就以下麵三種方式之響應中斷。

屏蔽中斷方式:中斷方式與8080的中斷響應方式相同。它是為了使兩者兼容而設置的。在響應中斷期間,由申請中斷的外設接口放一條適當的指令到數據總線上,接著口執行這條指令。一般申請中斷的外設口放到總線上是一條單字節指令,執行這條指令後使轉到0頁的8個地址之一。一般在作用後,將自動進入方式0,或者執行1指令也會進入方式0。

屏蔽中斷方式1執行指令後;將以方式1響應中斷,執行一條重新啟動指令而轉到00389。方式1與方式0的區別,是方式1不要附加任何硬件電路。屏蔽中斷方式2:當執行設置01;中斷方式的IV2指令後,若外界提出中斷請求,將以方式2響應。中斷方式2是三種中斷方式中功能最強的。中斷方式,一般隻有8個中斷入口(當然采用硬件擴展可以多於8個),而方式2可多達128個,而且它的中斷服務程序入口地址,可以設置在內存區域中的任何位置。方式2是一種向量中斷方式。

最後,簡單介紹當以響應中斷申請後,是如何保護斷點地址和現場的。當口響應中斷申請時,首先是將斷點地址壓入堆棧,然後才轉入中斷服務程序,一般情況下,都在服務程序的結尾處設置中斷返回指令,這就將斷點地址彈回。

Z80的整個內存區域都可以開辟為棧區。因為堆棧指針5是16位的寄存器,所以它可以設置於內存區域中的任意位置上。棧的深度與內存區域相對應。Z80堆找是按“後進先出”規律工作的,這個特點給多重中斷(嵌套中斷)處理提供了極大方便。

假設有三個外部中斷源,它們的中斷優先權是入大於8,而8大於。如果在口執行地址為X單元的指令時,外部中斷源請求中斷,而這時處於允許中斷狀態,則待X單元指令執行完之後,就響應設備提出的中斷請求,而將斷點單元地址壓入堆棧,進入中斷服務程序。一般情況下,在服務程序一開始就設置保護現場的程序段,如將在服務程序中受影響的口寄存器保護進棧等等,然後才往下執行其餘服務程序。如果在執行設備的中斷服務程序中,在第民+仁單元地址處,中斷源提出中斷申請,則在該單元指令執行後,暫停(中斷)為設備服務,將此斷點地址壓入堆棧,而轉去為設備服務。