Z-80 中斷結構


我們知道 Intel 8085 有五個中斷引腳(TRAP、RST7.5、RST6.5、RST6.5 和 INTR),但 Zilog Z-80 只有兩個中斷引腳,即 NMIINT。但與 8085 相比,它具有更優越的中斷結構。

INT 中斷

它是一個低電平有效的,電平觸發的輸入中斷。它是可遮蔽的,並且可以使用 **DI** 指令將其停用。當中斷引腳被停用時,如果 IO 裝置使能了 INT 引腳,Z-80 將不會被中斷。即使在復位後,它也會被停用。因此,如果我們希望 MPU 被該引腳中斷,則程式中必須有 **EI** 指令。

有三種中斷模式,在使用 INT 引腳中斷後,會發生不同的操作。這些模式是模式 0、模式 1 和模式 2。

中斷模式 0 (IM 0)

它是 Z-80 的一條 2 位元組指令。操作碼為 **ED 46H**。執行此指令後,INT 輸入將表現得像 IM 0。這是復位後的預設模式。

此模式類似於 8085 的 INTR。因此,它是非向量中斷。MPU 啟用 **IORQ** 和 M1 來響應中斷。

因此,在 IM 0 中 INT 的流程(假設 NMI 未啟用,並且已執行 EI 指令以使能中斷系統)如下:

  • 它完成當前指令,然後使能 INT,使能 M1,以及
  • 從外設接收 RST 或 CALL 指令
  • 停用中斷系統
  • 將程式計數器值壓入堆疊
  • 跳轉到由外設指示的 ISS(中斷服務子程式)。

因此,以下是 8085 和 Z-80 ISS 結構的示例

8085 中斷服務子程式Z-80 中斷服務子程式
PUSH PSWEXX
PUSH HEX AF, AF’
PUSH D{ISS 的其他部分}
PUSH BEX AF, AF’
{ISS 的其他部分}EXX
POP BEI
POP DRETI
POP H
POP PSW
EI
RET

中斷模式 1 (IM 1)

它是 Z-80 的一條 2 位元組指令。操作碼為 **ED 56H**。執行此指令後,INT 輸入將表現得像 IM 1。此模式類似於 8085 MPU 的 RST 7.5、6.5 和 5.5。此模式下的中斷是向量中斷。

在此模式下,IORQM1 不處於活動狀態。CPU 自動停用中斷系統,因此我們不需要顯式使用 **DI** 指令。CPU 將程式計數器 (PC) 值儲存到堆疊頂部,並跳轉到位置 0038H。

在 Z-80 套件中,如果 0038H 位於監視器程式部分,則必須有一個無條件跳轉語句跳轉到實際的子程式部分。

中斷模式 2 (IM 2)

Z-80 的另一條 2 位元組指令是 **ED 5EH**。執行此指令後,INT 輸入將表現得像 IM 2。這是一種特殊模式;此模式不存在於 8085 MPU 中。此模式的主要特點是系統中最多可以存在 128 箇中斷源。在這些源中,每個源都可以向 CPU 傳送唯一的 1 位元組地址以同時啟用 IORQM1。因此,根據地址,它可以跳轉到不同的 128 個服務例程。

因此,我們可以總結 IM 2 中的步驟:

  • 完成當前指令執行

  • 啟用 IORQM1

  • 從外設獲取 1 位元組地址,並將此地址視為地址指標的最低有效位元組,同時將最低有效位設定為 0。I 暫存器的內容被視為最高有效位元組。

  • 停用中斷系統

  • 將程式計數器值儲存到堆疊頂部。

  • 跳轉到地址指標指向的中斷服務子程式。

NMI 中斷

NMI 代表非遮蔽中斷。它是一個負邊沿觸發的輸入中斷。它比 INT 具有更高的優先順序。此中斷是非遮蔽的,也是向量中斷。它非常類似於 8085 的 TRAP。當生成此中斷時,它會跳轉到記憶體位置 0066H。與 TRAP 一樣,NMI 用於高優先順序條件,例如電源故障等。從 NMI 服務例程返回後,系統將恢復到之前已啟用或已停用狀態。

因此,我們可以總結 NMI 的步驟:

  • 完成當前指令執行
  • 停用中斷系統
  • 將程式計數器值儲存到堆疊頂部
  • 跳轉到位置 0066H

在 Z-80 套件中,如果 0066H 位於監視器程式部分,則必須有一個無條件跳轉語句跳轉到實際的子程式部分。NMI 服務例程將包含以下步驟:

  • 將所有暫存器內容儲存到堆疊頂部
  • 執行滿足中斷裝置所需的動作
  • 從堆疊頂部彈出所有暫存器內容
  • 使用 RETN 指令返回主程式。

使用 RETN(從 NMI 中斷返回),程式計數器值將從堆疊頂部恢復以返回主程式,並返回到中斷啟用/停用狀態的舊值。

更新於:2019 年 7 月 30 日

2K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.