三峽大學(xué)科技學(xué)院電氣工程及其自動化系 徐晶晶
TMS320C6713B是TI公司生產(chǎn)的TMS320系列產(chǎn)品中一款高性能的DSP芯片,特別適用于高速數(shù)字信號處理。它主要由三個部分組成:CPU內(nèi)核、外設(shè)和存儲器。CPU中8個功能單元可以并行工作,這些功能單元被分成類似的兩組,每組由4個基本功能單元組成。CPU有兩組寄存器,每組寄存器由16個32位寄存器組成。由于在運(yùn)行期間不做硬件數(shù)據(jù)相關(guān)性檢查,所以程序運(yùn)行時可以同時執(zhí)行8條指令,極大地提高了芯片處理速度,使得該芯片在電子測量、測控、圖像、雷達(dá)、聲納和軟件無線電等領(lǐng)域得到了廣泛的應(yīng)用。
一般的DSP應(yīng)用系統(tǒng)如圖1所示,主要包括了電源、存儲器、外部接口、數(shù)/模和模/數(shù)轉(zhuǎn)換電路等部分。利用這樣一個DSP系統(tǒng),就可以實(shí)現(xiàn)對外部信號的數(shù)據(jù)采集、存儲、處理,并利用程序指令實(shí)現(xiàn)對外部設(shè)備的控制操作。其中,F(xiàn)LASH存儲器非常重要,因?yàn)殚_發(fā)這樣一個有特殊應(yīng)用的DSP系統(tǒng),最終必然要脫離仿真器獨(dú)立運(yùn)行,這時就需要一個能在斷電后保存程序及初始化數(shù)據(jù)的存儲器。由于FLASH具有電信號擦除功能且擦除速度快,集成度高,因此成為了構(gòu)建DSP應(yīng)用系統(tǒng)時存儲器的首選。系統(tǒng)上電時,由DSP自帶的引導(dǎo)程序?qū)?yīng)用程序從該存儲器引導(dǎo)到DSP應(yīng)用板上的高速存儲器(如內(nèi)部SRAM,SDRAM等)中,而如何實(shí)現(xiàn)該過程就成了DSP開發(fā)中不可避免的問題。
DSP系統(tǒng)的引導(dǎo)(BOOT)是在系統(tǒng)加電或復(fù)位時,DSP將一段存儲在外部的非易失性存儲器的程序代碼通過DMA/EDMA方式拷貝到內(nèi)部的高速內(nèi)存中運(yùn)行。這樣既能擴(kuò)展DSP有限的存儲空間,又能充分發(fā)揮DSP內(nèi)部資源的效能。當(dāng)然用戶的代碼也可以通過掩膜方式寫入到DSP內(nèi)部的ROM中,但這樣會受到容量和價格的限制,且不便于擴(kuò)展和升級。DSP系統(tǒng)的引導(dǎo)方式 不是唯一的,對于TMS320C6713B系統(tǒng)來說,加電后RESET信號為低,芯片復(fù)位,在RESET信號上升沿處,鎖存Bootmode(HD[4:3])信號,從而決定芯片的引導(dǎo)方式,具體方式如表1所示。因此,只需要對HD[4:3]管腳電平通過電阻上拉或下拉即可實(shí)現(xiàn)不同的引導(dǎo)方式。
下面簡要敘述一下三種不同的引導(dǎo)模式。
(1)主機(jī)(host)引導(dǎo)
CPU停留在保持狀態(tài),其余硬件部分均保持正常狀態(tài)。在這期間,外部主機(jī)通過主機(jī)口初始化CPU的存儲空間,包括寄存器的初始化,例如控制EMIF和其它一些外圍設(shè)備的配置寄存器。主機(jī)完成所有的初始化工作后,將主機(jī)口控制寄存器中的DSPINT位設(shè)置為1,結(jié)束引導(dǎo)過程。此時CPU退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。在這個過程中,DSPINT并不是通過CPU來觸發(fā),因?yàn)榇藭rCPU仍然處于保持狀態(tài)。而且,也只有在主機(jī)引導(dǎo)過程中,DSPINT才能將CPU從保持狀態(tài)喚醒。另外,主機(jī)可以對DSP所有的存儲空間進(jìn)行讀和寫,這樣就允許主機(jī)在必要的時候更改發(fā)送給DSP的內(nèi)容。值得注意的是,在CPU跳出保持狀態(tài)后需要清除DSPINT,否則,就收不到其它的DSPINT了。
(2)Emulation引導(dǎo)
這種模式不是通過主機(jī)加載代碼和設(shè)置DSPINT,而是利用仿真器來設(shè)置DSPINT,從而CPU開始從地址0處執(zhí)行指令。在每次操作之前,仿真器就在地址0處設(shè)有斷點(diǎn)。這種模式在調(diào)試階段是一個很好的手段。
(3)EMIF引導(dǎo)
這種模式是把程序代碼或數(shù)據(jù)表保存在ROM、FLASH或其它非易失性存儲器中,它們對應(yīng)著DSP的CE1空間,數(shù)據(jù)格式跟系統(tǒng)一樣。在內(nèi)部復(fù)位時,DSP使用默認(rèn)的ROM時序從CE1空間拷貝1kB數(shù)據(jù)到地址0處。用戶可以指定外部ROM的存儲寬度,EMIF會自動將相鄰的8bit/16bit數(shù)據(jù)合并成32bit。DSP用EDMA進(jìn)行的這一加載過程是一個單幀的數(shù)據(jù)塊傳輸。傳輸過程完成之后,CPU退出復(fù)位狀態(tài),開始執(zhí)行地址0處的程序。一般來說,這段1kB程序的功能是先將外部主程序數(shù)據(jù)讀入到DSP內(nèi)部程序空間相應(yīng)地址,然后跳轉(zhuǎn)到主程序運(yùn)行。在DSP系統(tǒng)應(yīng)用中,用戶就需要編寫這段1kB大小的程序,實(shí)現(xiàn)二次引導(dǎo),此即為用戶的引導(dǎo)程序。其過程簡單歸納如下:
1)在CCS環(huán)境中,編寫主程序、裝載程序以及相應(yīng)的命令文件(link.cmd),編譯鏈接以形成.hex(COFF格式)文件,通過編程器轉(zhuǎn)化成.bin文件(二進(jìn)制文件),燒到ROM中;
2)系統(tǒng)加電復(fù)位,芯片從ROM中拷貝固定長度的數(shù)據(jù)塊(其中包括用戶自身的引導(dǎo)代碼)到RAM中,用以初始化部分存儲器;
表1 TMS320C6713B系統(tǒng)的不同引導(dǎo)方式
圖1 典型的DSP應(yīng)用系統(tǒng)
圖2 FLASH引導(dǎo)程序的組成
3)執(zhí)行用戶的引導(dǎo)代碼和其它數(shù)據(jù)段以及程序段初始化所必需的段復(fù)制;
4)程序從main()處開始執(zhí)行。
如果程序代碼或數(shù)據(jù)表保存在ROM、FLASH或其它非易失性存儲器中,在開發(fā)引導(dǎo)程序時,必須考慮以下幾點(diǎn):
1)用戶引導(dǎo)代碼必須鏈接到應(yīng)用程序中,這樣在系統(tǒng)加電復(fù)位后,用戶的引導(dǎo)程序才能被合適地加載和執(zhí)行;
2)只有通過編寫自己的引導(dǎo)代碼用戶才能正確地從ROM中拷貝COFF格式的段,而引導(dǎo)代碼的大小不能超過1kB;
3)在程序連接時,只有通過合理編寫命令文件(.cmd),使這些段被合理地連接后,才能實(shí)現(xiàn)從ROM中加載,從DSP內(nèi)部RAM中執(zhí)行。
在這個過程中,所用到的命令文件和用戶引導(dǎo)代碼如圖2所示,它們對于程序能否正確地執(zhí)行起著非常重要的作用。在某軟件無線電工程的開發(fā)中,筆者就是在C語言環(huán)境下,成功地開發(fā)了TMS320C6713B系統(tǒng)基于EMIF的自引導(dǎo)程序。下面就針對這兩個方面加以詳細(xì)說明,以供大家借鑒。
利用TI的代碼產(chǎn)生工具,可以按照圖2所示的步驟生成可執(zhí)行文件(.out)。匯編器接收匯編優(yōu)化器或編譯器產(chǎn)生的.asm文件,經(jīng)過匯編后產(chǎn)生可重新分配地址的COFF格式的目標(biāo)文件.obj。該格式文件包含了匯編器所生成的各個段(如表2所示),命令文件就是指導(dǎo)鏈接如何將各段分配到相應(yīng)的存儲器中。編寫命令文件時,有一點(diǎn)需要注意,那就是在很多情況下需要對某段說明兩個不同的地址:加載地址和運(yùn)行地址。加載地址決定了二進(jìn)制程序代碼的存儲位置和程序的引導(dǎo)地址,但在運(yùn)行過程中對于該段的任何引用則是以它的運(yùn)行地址作為參考的。因此,當(dāng)用戶對某段分別說明了加載地址和運(yùn)行地址時,只有將該段從加載地址復(fù)制到運(yùn)行地址上,該段才可以被訪問。
在命令文件中,合理地分配各段對于整個程序的正確運(yùn)行起到關(guān)鍵的作用。在TI可查閱的文檔和相關(guān)網(wǎng)站上,很少有涉及這方面內(nèi)容的文章。經(jīng)過反復(fù)實(shí)踐,筆者取得了一些經(jīng)驗(yàn),下面是在實(shí)踐中編寫的命令文件(.cmd)
表2 編譯器產(chǎn)生的默認(rèn)代碼段和數(shù)據(jù)段
DSP加電復(fù)位后,自動從CE1空間中拷貝1kB數(shù)據(jù)(程序代碼)到地址0處,然后從0地址處開始執(zhí)行指令。下面這段程序,其主要作用是將程序從外部ROM中搬到片內(nèi)RAM區(qū),然后跳轉(zhuǎn)到C程序的入口地址C_int00處,保證程序順利啟動運(yùn)行。
編寫程序的具體步驟如下:
TI高速信號處理器TMS320C6713B需要從外部的存儲器(ROM或FLASH)中引導(dǎo)應(yīng)用程序,這是開發(fā)中的重點(diǎn)和難點(diǎn)之一,關(guān)系到系統(tǒng)的可靠性和處理速度,它在整個DSP嵌入式系統(tǒng)開發(fā)中有著至關(guān)重要的作用。如果開發(fā)者在設(shè)計(jì)之初就掌握了這項(xiàng)技術(shù),就會大大方便系統(tǒng)的調(diào)試,縮短開發(fā)時間。
[1]王鳳臣,喬衛(wèi)民,李慶瑞.TI TMS320C6713B DSP板FIashBurn程序設(shè)計(jì)[J].微計(jì)算機(jī)信息(嵌入式與SOC),2006,22(7).
[2]TMS320C6713B,TMS320C6713BB FLOATINGPOINT DIGITAL SIGNAL PROCESSORS[R].Texas Instruments,SPRS294B-OCTOBER,2005-REVISED JUNE 2006.
[3]唐冰.TMS320C5410燒寫FLASH實(shí)現(xiàn)并行自舉引導(dǎo)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2003(01).
[4]趙凡,丑武勝等.TMS320C6000系列DSP的FLASH啟動設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007(05).
[5]夏爽.通過JTAG口對DSP外部FLASH存儲器的在線編程[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2003(08).