2.6.7MMU寄存器訪問時序
將數據寫入CBAR、CBR或BBR,是在對這些寄存器進行I/O寫周期後就立即生效。必須注意,在對MMU編程期間,CPU執行的程序不被打斷。要遵守對MMU編程後的下一個周期,一般是從現在生成的地址取操作碼周期。一種簡單的方法是,將所有對MMU編程的程序定位在公共的區。
2.6.8MMU寄存器舉例
▲實例1
當設定公共區/轉體區寄存器CBAR為84H,則CA段為0出,BA段為04H,邏輯存JC:器的結構。再設定公共區基址寄存器CBR為0SH,轉體區基址寄存器BBR為(MH,此時存貯器的邏輯地址與物理地址的關係,右側所示北京工業大學電子廠生產的TpSTDCPU板,由於沒有將641S0的地址線A18-A.1引向總線插座因為STDBUS的地址總線為Al5—A0共16根),所以會產生如下情況:如果我們訪問存貯器的公共區1,則8000HFFFFH,這時對應物理地址空間為0000H7FFFH。邏輯地址:OOOOH3FFF和8000HBFFFH所對應的物理地址空間都是3FFFH詳細分析如下:
因為該CPU板上64180的Al8、Al7和A16為任意值,不進行片選譯碼。CBAR,84H,CBR=08H,BBR=04H。
所以,如要訪問S000H邏輯單元,這時對應被訪問的物理單元地址應為,被訪問邏輯單元地址被訪問區基地址8000H+08000H,0000H0STDBUS物理單元地址為000H。
又如,訪問B000H邏輯單元,對應被訪問的物理單元地址為:
BUS物理單元地址為3000H。當我們訪問邏輯單元OOOOH—3FFFH時,這時對應的是公共區0,該區基地址為00000H,因此邏輯地址和物理地址——對應;再往上,若要訪問邏輯単元地址為4000H—7FFFH區域中任一單元時,均對應在0,80物理單元地址區域內。請注意,這時假定是從邏輯單元地址0000H至7FFFH連續訪問,但實際上,對應物理單元地址卻是不連續的,中間從0,4000H至0,7FFFH這個物理單元地址區域被跳過,不能被訪問。即隻有0,0000H—o,3FFFH和0,8000H—BFFF這兩個物理單元地址區域被連續訪問。假若我們需要訪問,4000H—0,7FFFH這個物理地址區域,應采取什麼措施,才能達到呢?
最簡單辦法是,重新設置BBR寄存器,比如,將它清0。在不改變BBR或CBAR狀態.下,當我們在邏輯上訪問C000H—FFFFH這區域時,實際上是訪問0,4000H-0,7FFFH物理地址區域。這個功能,在實際應用中,往往帶來意想不到的好效果。例如,在一個應用係統中,邏輯定位在C000H開始的10KBEPROM固化程序,需要在係統中運行,但該係統中沒有設置這個存貯器區域的插座,而在0,400011—0,7物理地址區域,剛好設置有一個28腳27128EPROM插座。在這種情況下,硬件上不需做任意改動,隻需將該固化程序芯片插在此空間插座上,就可以正確無誤地運行。原Z80係統是不具備此功能的。
當訪問邏輯單元4000H—7FFFH時,對應的是轉體區,它的基地址設定為04000H,被訪問的物理單元地址應是0,8000H—o,BFFFH。比如,要訪問5000H邏輯單元,這時對應被訪問的物理單元地址是:5000H+被訪問區基地址=5000H+0,4000H=0,9000HoSTDBUS物理單元地址為9000H。因為被訪問的邏輯單元5000H地址,處於轉體區,該區基地址由初始化BBR時,設定為0.4H。在MMU操作時,由BBR寄存器提供基地址值,而將邏輯單元地址5000H,定位在物理單元0,9000H地址上。
再往上,邏輯單元池址從8000H—FFFFH這32KB,由CBAR初始時,設定為公共區。該區基地址由CBR寄存器提供,本例中,初始化設定CBR=08H。可以清楚地看出,當訪問邏輯單元地址由8000H至FFFFH這32KB區域時,對應被訪問的物理單元地址是超越原Z80CPU所能直接尋址64KB範圍的。即被訪問物理單元地址為1,OOOOH至1,7FFFH。由於我們假定64180的Al8、人17、Al6不被使用,這時,實際上被訪問的物理單元地址,應是0,0000H至07FFFH這32KB物理存貯器單元。在整個敘述中,可以發現,在這種設置狀態下,物理單元0,C000H-o,FFFFH這16KB存貯器不能被訪問。
▲實例2
假定在例1中的MMU公共區基址寄存器CBR和轉體區基址寄存器BBR的設定不改變而掩MMU公共區本2寄序器CBAR設定為40H。此時邏輯存K:邏輯地址和物理地址對應關係。TPSTDCPU板上的64180,當訪問存貯器公共區1的邏輯地址8000H—FFFF時,對應存5C器物理地址為O,0000H—0,7FFFHo邏輯地址OOOOH—3FFFH和COOOH—FFFFH發生重疊,對應存貯器物理地址都是0,4000H-0,7FFFH。
在這個例子中,我們和例1一樣,假定STDBUSCPU板上的64180,它的地址線Al8都不被譯碼,存貯器芯片的片選邏輯。當訪問邏輯單元0000H—3FFFH區域時,對應的是轉體區,它與公共區0相重疊。該區基地址由BBR寄存器提供,初始化時設定為BBR=04H。所以,對應物理單元為04000H—07FFFH這16KB地址。如訪問2000H邏輯單元,這時對應物理單元地址為:邏輯單元地址+被訪問區基地址=2000H+0,4000H=06000H0STDBUS物理單元地址為06000H。
再往上,邏輯單元地址4000HFFFFH這48KB,屬於公共區1,在MMU操作時,由CBR寄存器提供基地址。本例中,假定初始化時,已設定CBR=08H。所以,對應物理單元地址是0,C000H—1,7FFFH。在STDBUSCPU板上,64180的A,8—A1,三根地址線不被使用,所以,這時候對應物理單元地址,按順序應是0,C000H—0,FFFFH和-0,0000H—0,7FFFH。
由此可見,邏輯單元地址0000H—3FFFH和C000H—FFFFH這個邏輯地址區域,實際上對應的都是0,4000H—0,7FFFH物理地址區域。我們訪問這兩個邏輯單元地址區域,實質上是訪問同一物理地址區域。另外,物理單元地址為0,8000H—o,BFFFH這wKB區域不能訪問。
這個功能,在產品開發實際應用中,是很有用處的。比如,我們設計一個係統,希望借用原有的STDBUS機進行調試。係統監控程序是從0000H邏輯單元地址開始執行的。用戶隻要將新研製係統的固化監控程序,插在物理地址為4000H開始插座上,按本例數據,對有關CBAR、CBR和BBR寄存器初始化,邏輯地址0000H便定位在物理地址0,4000H上,運行用戶設計的新監控程序。假若新的監控有錯,隻要按壓係統RESET鍵,使原有係統複位,係統又回複到原有監控程序下運行,對用戶程序進行調整。這樣反複進行,直至成功。在整個開發調試過程中,一是不需要更改原係統的硬件,二是開發效率會極大提高。使用帶電保護SRAM芯片代替EPROM,進行用戶程序調試,效率更會大大提高芯片在模板上操作都省去了。