基于PLD的嵌入式系統(tǒng)外存模塊設(shè)計

本文引用地址:http://m.ptau.cn/article/150820.htm
3 地址分配
有了上面的存儲器擴展方法,再結(jié)合系統(tǒng)的技術(shù)參數(shù)和單片機的特點,就可以做出一套合理的內(nèi)存地址分配方案。下面給出單片機的地址劃分情況:
0000H~01FFH 系統(tǒng)寄存器區(qū),保留0200H~1EFFH用戶區(qū),直接映射到Flash ROM中的
0200H~1EFFH 可以用來存放數(shù)據(jù)、程序等,該區(qū)域可以由單片機直接進行尋址。
1FOOH~1FFFH 用戶區(qū),實際使用中把Address—1lR、Address_F_WP等地址以及一些特殊設(shè)備如A/D轉(zhuǎn)換器、LCD顯示屏等的訪問地址設(shè)置在這個區(qū)域。
2000H~207FH 該區(qū)域是中斷向量區(qū)、芯片配置字節(jié)區(qū)、保留字區(qū)等,直接映射到Flash ROM中的2000H-207FH。
2080H~8FFFH 用戶區(qū),單片機啟動也是從 2080H 處開始執(zhí)行程序的,因此把這個地址范圍直接映射到 Flash ROM 的2080H~8FFFH,該區(qū)域設(shè)置系統(tǒng)的引導(dǎo)、初始化等程序。
9000H~FFFFH 用戶區(qū),將這一段映射到 RAM 的9000H~FFFFH,作為系統(tǒng)程序的運行區(qū)域。
圖4中白色區(qū)域是單片機通過總線直接尋址的區(qū)域,可以由單片機直接進行訪問?;疑珔^(qū)域為內(nèi)存的擴展區(qū)域,不能被單片機直接訪問,但可以通過前面介紹的方法由EPLD生成地址進行讀寫操作。下面簡要介紹一下各個區(qū)域在實際中的用途:Flash ROM中的0000H~1FFH和1F00H~1FFFH因為容量很小,沒有被利用。系統(tǒng)啟動后從Flash ROM的2080H處開始執(zhí)行程序,將2000H~8FFFH的內(nèi)容復(fù)制到RAM中的9000H~FFFFH,然后跳轉(zhuǎn)到RAM中執(zhí)行系統(tǒng)程序。由于Hash ROM的速度慢,需要在讀寫過程中插入一定量的等待周期,因此將程序復(fù)制到RAM中執(zhí)行可以提高系統(tǒng)的性能;同時系統(tǒng)在對Flash ROM進行寫入操作后,編程階段的10ms內(nèi)不能對其進行讀取,因此RAM在這個時候也提供了程序運行的位置。這樣分配后,程序的長度被限制在28K字節(jié),實際中這個數(shù)量完全可以滿足系統(tǒng)的需求。Hash ROM中的9000~FFFFH共28K字節(jié),用來保存4段系統(tǒng)運行配置程序,每段長度可達7K字節(jié);10000H-
1FFFFH共64K字節(jié),用來作為采集數(shù)據(jù)的保存區(qū)域。RAM中的0000H~8FFFH共36K字節(jié),用來作為數(shù)據(jù)的緩存區(qū)域。從上面的分析可以看出,最終設(shè)計的各項指標都已經(jīng)超過實際的需求,能很好地解決實際應(yīng)用問題。
4 合理利用日EADY信號
最后介紹一下單片機就緒信號READY在這個系統(tǒng)中的關(guān)鍵作用。從前面的設(shè)計中可以看出系統(tǒng)存在著高速RAM和慢速Hash ROM存儲器,開始時,Hash ROM選用了AT29C1024-70JCt31,它是該型號中速度最快的,有效數(shù)據(jù)建立時間僅為70ns。單片機不插入等待周期的讀寫時序,如圖5所示。
從ALE下降沿地址有效到/RD上升沿的時間是80ns,Hash的響應(yīng)時間為70ns,再加上EPLD的延時就造成了單片機從Hash ROM讀取數(shù)據(jù)的不穩(wěn)定,表現(xiàn)在無法對Flash ROM進行在線寫入、經(jīng)常發(fā)生錯誤的執(zhí)行結(jié)果、死機等。為此必須加入等待周期,延長讀、寫時間才能滿足Hash ROM的要求。在這里只需插入一個等待周期(100ns)便可以滿足要求,因此設(shè)置芯片配置字節(jié)CCR.5=0,CCR.4;0[1]。這樣,當READY信號為低電平時便自動插入且僅插入一個等待周期。一個簡單的做法就是把Flash ROM的片選信號/CS2連接到READY,這樣,當選中Flash ROM芯片時READY信號就跟隨/CS2同時變?yōu)榈碗娖健0凑者@樣的設(shè)想可在EPLD內(nèi)部重新設(shè)置READY信號,描述如下:
ready=!(((a[15..0]>=H0200)(a [15..0]:=H1EFF))
#((a[15..0]>=H2000)(a[15..0]=H8FFF))#(a[15..0]= =Address_F_R)
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論