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

觸發器為1,則中斷響應信號會選通矢量地址寄存器的三態門,將本設備的中斷矢量地址送上數據總線,以便與寄存器的內容結合,形成中斷服務程序入口地址表的指針。

當中斷處理完畢,執行中斷返回指令時,會清除中斷服務觸發器,使120恢複為1。這是辨別數據總線上的指令碼,即由“20”隻指令的第一字節機器碼和“40”指令第二字節機器碼,結束中斷處理伏態,恢複本芯片的初始狀態。

另外,若在本芯片申請中斷前,較低級的中斷源已先申請中斷,且正在為低級中斷源服務過程中,同時進入低級中斷處理程序後,又不再開中斷,此時,本設備雖然有中斷請求,而也不會響應。但由於本設備有中斷請求即中斷掛號觸發器為1,使它的150也變為低電平,使低級(正在進行中斷處理)的121也變為低電平。當優先權低級的中斷處理程序執行到指令時,低級外設中斷控製邏輯的“20”譯碼器使~觸發器置“1”,“40”譯碼器使觸發器置“1”,但由於121被高級中斷屏蔽了,這時,不能使中斷服務完的清“0”。為此要求提出中斷申請,但未被響應的高級中斷源,能在此期間暫時將它的變高,以便使優先級低的中斷控製邏輯的也變高,使譯碼信號能去恢複中斷服務結束的控製邏輯的初始狀態。這個要求是這樣來實現的I當數據總線上出現了的第一字節機器碼“20”時,利用取指令第一字節的有效信號,將“20”打入觸發器,它的反相端變為低電平,此時由於本級中斷未響應,故同時經反相器輸出也為0,所以對應的或非門三個輸入端均為0,於是120就暫時變高,使優先級較低的也變高,從而實現由指令譯碼去將中斷處理結束後的中斷服務觸發器清零的要求,

5.6 Z80-CPU 的中斷響應

Z80按照下列優先順序響應外部請求:(1)總線請求,(2)不可屏蔽中斷,(3)可屏蔽中斷。

5.6-1 CPU 對非屏蔽中斷的響應

在一個指令周期的最後一個狀態,利用該狀態的上升沿去采樣線。若線為低電平,又無總線請求,則立即轉入非屏蔽中斷請求響應周期。在這個周期中自動形成一條851指令。此指令的功能是將內容壓入堆棧,再將地址00669置入。所以,接著就轉到00669存儲單元去取指令。我們可以從00660單元起存放非屏蔽中斷服務程序。

假設主程序從存儲單元60009開始存儲。非屏蔽中斷服程序的入口地址為8000。非屏蔽中斷的處理順序場這樣的:

①假設當信號有效時,剛好在執行6003單元內的指令。這裏為簡使起見,假定6003單元內的指令是一條單字節指令。在6003隻單元內的指令取出來之後,內容就是6004;

②一旦執行完畢6003隻單元內的單字節指令,就進入響應非屏蔽中斷周期,執行一條由口口芯片硬件電路提供的隻6611指令,首先將現行的內容壓入推棧;

③將0066隻作為地址裝,這時內容就是00669,轉到0066單元去取指令。通常,在中斷服務程序的一開始,應設置保護主程序斷點處的現場,本例中,在00669到0067單元內,設置了兩條交換指令;主寄存器的內容通通保存在的輔助寄存器中。如果主程序中使用到的其他寄存器,在中斷服務程序中會受到影響,也應該保護進棧。

如果中斷服務程序很短,就可以把服務程序安排在006711單元之後存儲區域中。通常0頁存儲區,如果想使0066入口為不同對象服務,就在0066II單元開始的三個字節存儲單元內,設置一條跳轉指令,如為從存儲單元地址。當需要使用非屏蔽中斷時,可以很方便地在用戶程序中,將中斷服務程序的入口地址設置,而在單元開始的三字節存儲單元之中設置這樣一條跳轉指令就可以了,這樣一來,非屏蔽中斷服務程序可以安排在整個內存區域的任一地區,而不受到哏製,本例中是設置了58000跳轉指令。

④8000單元開始是中斷服務程序,在服務程序結束部分,往往應該設置恢複主程序現場的程序段。

⑤執行,斷點地址由堆棧中彈回,這時接著便繼續往下執行主程序了。

第一周期是非屏蔽中斷請求響應周期。它和取指令操作碼周期的波形完全一樣,隻是它並不將數據總線的數據打入指令寄存器,所以,稱為無作用的從,周期,在內自動形成一條851單字節調用指令;第二周期、第三周期是為執行指令進行存儲器寫周期。在這兩個周期中,分別將(高8位)和(低8位)壓入堆棧,所以是兩個存儲器寫周期。

5.6-2 CPU 對屏蔽中斷的響應

隻有當中斷觸發器才能響應屏蔽中斷。兩條指令21(開中斷)和01(關中斷),對進行置位和複位。因此,程序員可以根據實際需要運用這兩條指令。例如,正在保護現場或恢複現場,這時若不希望再次接受中斷,我們可以在程序中安排一條關中斷01指令,當執行這條指令後,就將"複位,就再也不能響應可屏蔽中斷了。若要再響應中斷,就得執行一條開中斷指令,緊接著又執行一條跟在後的指令,就會將置位,才能響應可屏蔽中斷。屏蔽中斷的響應方式有三種:方式0、方式1、方式2。以何種方式響應,取決於事先執行三條響應方式指令的哪一條。這三條中斷方式指令為IX0(方式0),IV1(方式1),IV6(方式2)下麵分別介紹這三種響應方式:

1.屏蔽中斷方式

中斷方式響應方式,是為了和8080兼容而設賈的。這是一種“自陷”方法。除非程序員設置了脫1或而2指令,要求口以方式1或方式2響應中斷,否則信號有效後,自動以方式0來響應中斷。通常,機器都是上電自動複位(自動有效),口響應中斷方式自動被設置為方式0。當然,這僅僅是對口設置了響應中斷的方式,要使能夠響應中斷申請,還必須再執行一條開中斷拉指令,使允許中斷觸發器置“1”。因為在信號將口複位時,被複位(清“0”),被1信號複位後,中斷響應方式自動被置成方式0,這是芯片硬件電路所決定的。我們也可以采取軟件方法,用程序設定響應中斷方式為方式0,即執行一條指令就行。所以我們想使由別的響應中斷方式回到方式0,可以使用1/10指令,而不必動用82521按鍵。