- 相關(guān)推薦
C6202 ROM引導(dǎo)裝載方式的研究
摘要:通過使用DMA方式訪問程序存儲區(qū)并實現(xiàn)程序的搬移,克服C6000指令系統(tǒng)的缺陷;并對C6000的C語言運(yùn)行環(huán)境和仿真器變量初始化過程進(jìn)行研究,采用自編程自初始化的方法,確保程序加載后能正常運(yùn)行。DSP系統(tǒng)的引導(dǎo)裝載(Bootload)是指系統(tǒng)加電時,DSP將一段存儲在外部的非易失性存儲器的代碼搬移到內(nèi)部的高速存儲器單元中執(zhí)行。這樣既利用了外部的存儲單元擴(kuò)展DSP本身有限的ROM資源,又充分發(fā)揮了DSP內(nèi)部資源的效能。盡管用戶代碼可直接掩膜到內(nèi)部ROM中,但一方面受容量和價格的限制,另一方面則不具有擴(kuò)展性和不易升級。FLASH是一種高密度、非易失性的電可擦寫存儲器,十分適合低功耗、小尺寸和高性能的便攜式系統(tǒng)。除了可以采用專用的硬件編程器把代碼灌入FLASH中,也可以利用現(xiàn)成的DSP通過軟件編程實現(xiàn)同樣的功能,因此對整個系統(tǒng)的軟件升級很方便。
圖1 C62X方框圖
TMS320C6000系列是TMS320系列產(chǎn)品中的新一代高性能DSPs芯片。由于其結(jié)構(gòu)上(如圖1)的特殊性,與C54系列的引導(dǎo)方式有很大差別。本文以C6202為例,介紹如何實現(xiàn)DSP正常的ROM引導(dǎo)。
1 C6202的ROM引導(dǎo)模式
C6202有兩種存儲器映射方式MAP0和MAP1。通過擴(kuò)展總線的XD[4:0]利用上拉/下拉電阻進(jìn)行復(fù)位時的芯片啟動模式設(shè)置。本文將存儲器映射方式設(shè)置為MAP1,即地址0處的存儲器在內(nèi)部,芯片自加載方式為8bit ROM方式,如圖2的硬件連接。
設(shè)置完芯片加載方式后,ROM加載的具體過程是:位于外部CE1空間的ROM(即圖2中的FLASH)中的程序首先通過DMA搬入地址0處,盡管加載過程是在芯片復(fù)位信號被釋放后才開始的,但是當(dāng)芯片開始復(fù)位時,就開始準(zhǔn)備上述傳輸了。用DMA進(jìn)行的這一加載過程是一個單幀的數(shù)據(jù)塊傳輸,數(shù)據(jù)塊的大小為64KB。EMIF會根據(jù)芯片自加載方式的設(shè)置將相鄰的8bit或16bit數(shù)據(jù)合為32bit指令。傳輸完成后,CPU退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。
2 硬件設(shè)計
本文僅給出DSP(TMS320C6202)與一片FLASH(AMD29VF040)的連接圖,如圖2。由DSP的相關(guān)輸出管腳控制FLASH的擦除和讀寫。C6202的EMIF含有四個CE空間寄存器,由于ROM加載程序是從CE1空間搬入的,因此DSP的/CE1與FLASH的片選/CE相連。圖2中只用到DSP的低8位數(shù)據(jù)線,如果自加載方式設(shè)置為16位或32位,可以通過DSP最低兩位EA1和EA0的譯碼BE[3:0]片選,或者選用16bit或32bit的FLASH。
3 軟件設(shè)計
由于C6000的特殊結(jié)構(gòu),可以實現(xiàn)8條并行指令同時執(zhí)行,除非對硬件結(jié)構(gòu)非常了解的專業(yè)人員,才能充分利用硬件資源,將匯編語言的高效率發(fā)揮出來。若對實時性要求不是很高,采用C語言編程完全可以滿足需要,且C6000的優(yōu)化器優(yōu)化效率很高。這樣可以降低編程工作量,縮短開發(fā)周期,可移植性好。本文以通用的C語言編程為例,介紹DSP對FLASH編程以實現(xiàn)正常的ROM引導(dǎo)。
3.1 系統(tǒng)初始化
在運(yùn)行C語言前,必須建立C運(yùn)行時間環(huán)境(C runtime environment),確保C程序的正常運(yùn)行。運(yùn)行時間支持源程序庫(runtime-support source library)rts.src包含一個boot.asm模塊可以實現(xiàn)此功能。在連接器命令中使用-c或-cr選項,且將rts6200.lib作為其中一個連接文件,連接器自動調(diào)用boot.asm模塊產(chǎn)生c_int00函數(shù)。在硬件復(fù)位中斷產(chǎn)生以及系統(tǒng)工作時,先執(zhí)行此函數(shù)。
函數(shù)c_int00完成下面三個初始化任務(wù):
(1)建立堆棧并初始化堆棧指針;
(2)初始化全局變量;
(3)運(yùn)行主函數(shù)。
3.2 初始化變量
在程序運(yùn)行前,全局變量必須初始化。編譯器建立了.cinit段用來初始化全局變量和靜態(tài)變量。
3.2.1 .cinit段
在.cinit段內(nèi)有不同長度的初始化記錄,每一個必須初始化的變量在.cinit段內(nèi)都有一個對應(yīng)的記錄。如圖3。
每個記錄包含三部分:需要被初始化的變量的長度、變量的地址和變量初始值。
3.2.2 運(yùn)行時初始化變量
若在連接器中使用-c選項,則在程序開始運(yùn)行時,函數(shù)c_int00初始化變量。具體過程如下:仿真器加載程序時,根據(jù).cmd文件的定位,將.cinit段拷貝到C6202的程序存儲區(qū)或數(shù)據(jù)存儲區(qū),并且用指針指向加載后的初始
【C6202 ROM引導(dǎo)裝載方式的研究】相關(guān)文章:
旅游購物連鎖經(jīng)營方式框架及應(yīng)用研究06-11
關(guān)于幼兒家庭教養(yǎng)方式的現(xiàn)狀及培養(yǎng)策略的研究論文04-25
加強(qiáng)指導(dǎo),引導(dǎo)護(hù)生順利就業(yè)05-11
探析Little。拢颍椋簦幔椋畹臄⑹路绞05-31
《左傳》修辭方式淺探05-03
引導(dǎo)家長掌握幼兒的教育方法學(xué)科論文05-08
論如何引導(dǎo)學(xué)生進(jìn)行油畫藝術(shù)創(chuàng)作05-22
美國沃爾瑪公司的治理方式及啟示05-26
采礦塌陷災(zāi)害特征與治理方式04-21