1 P89C669的存儲器結(jié)構(gòu)
1.1 存儲結(jié)構(gòu)
P89C669的存儲器結(jié)構(gòu)為哈佛結(jié)構(gòu),地址分配如表1所示。

尋址指令除了傳統(tǒng)的MOV,MOVX,MOVC外,EMOV指令與24位的通用指針寄存器EPTR可尋址16MB的全部空間,但是所占用的指令周期也較長。
擴(kuò)展外部數(shù)據(jù)存儲空問HDATA除了768 B在片內(nèi)外,其余地址空間可以用來擴(kuò)展外部設(shè)備(其實只要把片內(nèi)的768 B通過指令將其屏蔽,也可以用來擴(kuò)展外部設(shè)備)。
1.2 P2口的讀寫時序分析
尋址8 MB的數(shù)據(jù)存儲空間,需要有23 b的地址尋址能力,P89C669將傳統(tǒng)51內(nèi)核的P2高位地址時分復(fù)用,從而得到23 b地址尋址能力,時序圖如圖1所示,即當(dāng)使用23 b地址時,ALE為高時,地址位A16~A22輸出到P2.0~P2.6;ALE為低時,地址位A8~A14輸出到P2.0~P2.6。無論ALE為何值,位地址A15都從P2.7輸出。

在某產(chǎn)品的控制系統(tǒng)中,擴(kuò)展的外部設(shè)備比較豐富,利用P89c669的23 b地址尋址能力進(jìn)行設(shè)備地址編碼,所以需要對23 b地址的時序邏輯進(jìn)行處理,處理單元交給一塊ALTERA公司的CPLD(EPM7032)。
EPM7032具有32個邏輯單元,約600個門級單元,可用IO口36個,內(nèi)置IEEE std.1149.1 JTAG,方便可編程下載。
在滿足系統(tǒng)資源的前提下,選用EPM7032,將P89C669的P2口作為處理單元輸入信號,經(jīng)過CPLD的內(nèi)部邏輯進(jìn)行譯碼或數(shù)據(jù)鎖存,以獲得各個外部設(shè)備資源的選擇信號及少量的控制信號,如圖2所示。

實際上,P2口引入CPLD,就P89C669的23 b地址線而言,用來地址譯碼和少量的控制信號等主要是利用最高的幾位,在本設(shè)計中,由于SST29SF040用到地址線A0~A18,所以CPLD的地址譯碼處理只能是利用剩下的A19~A22,這將在下文的CPLD的譯碼單元可以看到。
A0~A7低地址采用74HC573進(jìn)行鎖存,A16~A18地址內(nèi)容采用74HC574進(jìn)行鎖存,如圖3所示。




編寫設(shè)備驅(qū)動程序是在KeilC51的平臺上,由于利用了P89C669的23 b地址線,在C51的平臺上采用指針讀寫設(shè)備很方便,這里給出讀寫SRAM芯片M68AF127B的C源代碼例子,以供參考。

5 結(jié) 語
利用P89C669的23 b的線性地址并采用CPLD擴(kuò)展外部設(shè)備資源可以說是不錯的一個方法,對外部設(shè)備的訪問將





