2.7.6INT1,INT2
外部的INT和INT24中斷操作,和INTO的方式2相似,都是矢量中斷方式。所不同的是,INT1和INTP使用IL(中斷矢量低字節)寄存器,產生矢量表地址的低字節,而不是從數據總線上去讀取。這也是對所有內部中斷(TRAP除外)所采用的中斷響應技術。
矢量表地址的低字節由可編程的IL寄存器的最高3位和低5位配合起來成,而IL的低5位對每一種中斷源(如INTI、INT2和內部中斷),都有自動提供的唯一的固定值。所以,它的矢量表是32字節,而不是256字節。
INT1和INT2由IEF1位=0來總屏蔽,並由INT/TRAP控製寄存器(ITC)的ITE1和ITE2(位1,2)清0來分別屏蔽。
2.7.7內部中斷
內部中斷(TRAP除外)采用和INT1和INT2相同的矢量響應方式。內部中斷被IEF1=0總屏蔽。根據對每一個I/O(PRT、DMAC、CSI/O、ASCI)控製寄存器的編程,來決定每個內部中斷是被允許,還是被禁止。INTI、INT2等和內部中斷矢量地址的低字節。
▲中斷應兩期時序
內部中斷、INT1和INT2中斷響應周期的時序。在最後一個機器W期的1\或1\之前一個時鍾狀態的下降沿處,采樣INT1和INT2,如果INT1或INT2是有效的低電平,即該中斷請求被接受。
2.7.8中斷源和RESET
▲中斷矢量寄存鼉I
RESET期間,使I寄存器所有位都清0。
由於RESET期間使1=0,矢量表地址從邏輯地址0000H單元開始。這時,矢量中斷地址(INTO的方式2、INT1、INT2和內部中斷)就可能與有固定入口的中斷地址重這些有固定入口地址的中斷WRESET(0)、NMI(0066H),INT0W$S1
RST(00O0H—OO38H),為了避免發生地址衝突,可以用LDI,A指令,對I寄存器重新編程(使寄存器不為0),使矢量地址表以256字節為界限劃分為一塊,定位在別的存1C器區域內。
▲IL寄存器
RESET期間,使IL寄存器的第7位至第5位清0,即將它的髙3位都清為0。
對IL寄存器編程,使INTI、INT2和內部中斷的矢量地址表,以32字節為一塊,定位在由I寄存器內容指定的,以256字節劃分為一塊的存貯器區域內。
例如,要求矢量地址表定位在邏輯地址為80H頁,INT1的中斷服務程序放在8400H,而INT2的中斷服務程序放在9500H。程序編製如下:
當響應INTI中斷時,將PC壓進棧,然後I寄存器的內容80H和IL寄存器自動提供的矢量地址低字節00H組成16位矢量地址8000H,從8000H和8001H單元取出中斷服務程序的入口地址,又稱重新啟動地址,並執行存在這個地址單元內的指令。同理,當響應INT2中斷時,同樣將PC壓進棧,然後由I寄存器和IL寄存器自動提供的矢量字節組成16位矢量地址。注意,IL寄存器的低5位(b4bO)對於INTI、INT2和內部中斷是一一對應的固定碼>在RESET後,高3位(b7-b5)被清0>在不再對IL寄存器編程寫入時,INT2的中斷矢量地址低字節應是02H。因此,由I和IL寄存器自動提供的16位矢量地址應是8002H。在8002H和8003H元中取出中斷服務程序的入口地址9500H裝入程序指PC中,並執行該單元中的指令。
注意:當我們訪問內部I/O寄存器時,不應使用Z80的I/O指令。如指令段中訪何芯片內的I/O寄存器IL,則不能使用OUT(IL),A指令,而要使用64180新增加的OUT0(IL),A指令。執行前指令時,地址總線的高字節(A15A8)為A的內容,相當於訪問:口地址為0E033H的I/O口,這顯然是不對的;而執行OUT0(IL),A指令時,地址總線的髙字節(A15A8)為0,訪問的I/O口地址為0033H(X4於TPSTDCPU板為00F3H),這是正確的。
▲IEFUIEF2中斷允許標誌位
RESET期間,使IEF1和IEF2中斷允許標誌位清0。
由於IEF1和IEF2標誌位=0,使得除了NMI和TRAP以外的一切中斷都被禁止。
▲ITC寄存器
RESET期間,使INT/TRAP控製寄存器ITC的ITE0中斷允許位置為1ITE和IET2位清0。
執行EI指令使IEF1位置為1,使INTO中斷被允許。為了使INT1和INT2中斷免許,需要用對ITC寄存器寫入的方法,使ITE1和ITE2位都置為1.
▲I/O控製寄存
RESET期間將所有內部外設控製寄存器中的中斷允許位清0。64180芯片內所有的I/O(PRT、DMAC、CSI/O,ASCI)中斷被禁止。采用對有關外設控製寄存器進行寫操作,使中斷允許位置1的方法,使該外設的中斷被允許。
2.8動態RAM刷新控製
64180芯片內集成一個動態RAM(簡稱DRAM)刷新拉製電路,它包括了產生8位刷新地址和可編程的刷新時序。該電路產生的異步刷新周期被插在可編程的與CPU執行程序無關的間隔內。對於不采用動態RAM的係統.可以將此刷新功能禁止掉,不使它產生刷新周期。
內內部刷新控製器決定要產生一個刷新周期時,在兩個機器周期之間的交接處,現行指令被中斷,刷新地址放在A7—A。地址總線上,刷新信號RFSH輸出變為低電平,表示插入一個刷新周期。
根據對刷新控製寄存器(RCR)中的REFW(刷新等待)位的編程,可以選擇刷新周期是兩個或三個連續的時鍾周期。注意,在刷新期間,外部的WAIT輸入信號和芯片內部的等待狀態發生器無效。
▲刷新控製寄存器RCR
RCR用來選擇製新周期的間隔和長度,也用來允許或禁止產生刷新周期。
REFE刷新允許位(第7位)
REFE位=0,禁止刷新控製器插入刷新周期;RBFE位=1,允許插入刷新周期。
RESET期間,使REFE位=1。
REFW—期新等待位(第6位)
REFW位=0,產生連續的兩個時鍾周期長的刷新周期;REFW位=1,增加一個刷新等待狀態(Trw),成為產生連續三個時鍾周期長的刷新周期。在RESET期間,使REFW位=1。
CYC1,CYC0—周期間隔(第1位,第0位)
CYC1和CYC0位用來設定兩個刷新周期的間隔時間長短。
對於要求每2ms產生128個刷新周期(或要求每4ms產生256個刷新周期)的動態RAM,應使刷新間隔時間大於或等於15.625叫。因此,最大刷新間隔的時間下限值,取決於CPU的時鍾頻率。RESET期間,CYC1和CYC0均被清0。
▲刷新控製和RESET
RESET後,RCR初始化,REFE和REFW位置1,CYC1和CYC0位被清0,產生刷新周期。刷新周期長3個時鍾狀態,兩個刷新周期間隔時間長為10個時鍾狀態。
▲動態RAM刷新操作注意亊項:
(1)當CPU處於下列狀態,停止插入刷新周期:(a)RESET期間。(b)當響應BUSREQ總線請求信號而釋放總線時。(c)SLEEP(休眠)方式期間。(d)WAIT(等待)狀態期間。
(2)當響應BUSREQ而釋放總線時,刷新周期被抑製。但是,刷新定時器繼續運行。這樣,在64180CPU重新占有總線後,產生的第一個刷新周期的時間,取決於刷新定時器,而與總線交換沒有時序聯係。
(3)在SLEEP方式期間,刷新周期被抑製,如果係統設置有刷新周期,在SLEEP方式運行期間,刷新周期被內部鎖存(直到被下一次的刷新請求所替換),被鎖存的刷新周期插在退出SLEEP方式後的第一個機器周期的末尾。從這個周期開始以後,將要產生一個刷新周期的時間,取決於刷新周期間隔時間。這個間隔時間長短與從SLEEP方式退出沒有時序聯係。