三峽大學科技學院電氣工程及其自動化系 徐晶晶
TMS320C6713B是TI公司生產的TMS320系列產品中一款高性能的DSP芯片,特別適用于高速數字信號處理。它主要由三個部分組成:CPU內核、外設和存儲器。CPU中8個功能單元可以并行工作,這些功能單元被分成類似的兩組,每組由4個基本功能單元組成。CPU有兩組寄存器,每組寄存器由16個32位寄存器組成。由于在運行期間不做硬件數據相關性檢查,所以程序運行時可以同時執行8條指令,極大地提高了芯片處理速度,使得該芯片在電子測量、測控、圖像、雷達、聲納和軟件無線電等領域得到了廣泛的應用。
一般的DSP應用系統如圖1所示,主要包括了電源、存儲器、外部接口、數/模和模/數轉換電路等部分。利用這樣一個DSP系統,就可以實現對外部信號的數據采集、存儲、處理,并利用程序指令實現對外部設備的控制操作。其中,FLASH存儲器非常重要,因為開發這樣一個有特殊應用的DSP系統,最終必然要脫離仿真器獨立運行,這時就需要一個能在斷電后保存程序及初始化數據的存儲器。由于FLASH具有電信號擦除功能且擦除速度快,集成度高,因此成為了構建DSP應用系統時存儲器的首選。系統上電時,由DSP自帶的引導程序將應用程序從該存儲器引導到DSP應用板上的高速存儲器(如內部SRAM,SDRAM等)中,而如何實現該過程就成了DSP開發中不可避免的問題。
DSP系統的引導(BOOT)是在系統加電或復位時,DSP將一段存儲在外部的非易失性存儲器的程序代碼通過DMA/EDMA方式拷貝到內部的高速內存中運行。這樣既能擴展DSP有限的存儲空間,又能充分發揮DSP內部資源的效能。當然用戶的代碼也可以通過掩膜方式寫入到DSP內部的ROM中,但這樣會受到容量和價格的限制,且不便于擴展和升級。DSP系統的引導方式 不是唯一的,對于TMS320C6713B系統來說,加電后RESET信號為低,芯片復位,在RESET信號上升沿處,鎖存Bootmode(HD[4:3])信號,從而決定芯片的引導方式,具體方式如表1所示。因此,只需要對HD[4:3]管腳電平通過電阻上拉或下拉即可實現不同的引導方式。
下面簡要敘述一下三種不同的引導模式。
(1)主機(host)引導
CPU停留在保持狀態,其余硬件部分均保持正常狀態。在這期間,外部主機通過主機口初始化CPU的存儲空間,包括寄存器的初始化,例如控制EMIF和其它一些外圍設備的配置寄存器。主機完成所有的初始化工作后,將主機口控制寄存器中的DSPINT位設置為1,結束引導過程。此時CPU退出復位狀態,開始執行地址0處的指令。在這個過程中,DSPINT并不是通過CPU來觸發,因為此時CPU仍然處于保持狀態。而且,也只有在主機引導過程中,DSPINT才能將CPU從保持狀態喚醒。另外,主機可以對DSP所有的存儲空間進行讀和寫,這樣就允許主機在必要的時候更改發送給DSP的內容。值得注意的是,在CPU跳出保持狀態后需要清除DSPINT,否則,就收不到其它的DSPINT了。
(2)Emulation引導
這種模式不是通過主機加載代碼和設置DSPINT,而是利用仿真器來設置DSPINT,從而CPU開始從地址0處執行指令。在每次操作之前,仿真器就在地址0處設有斷點。這種模式在調試階段是一個很好的手段。
(3)EMIF引導
這種模式是把程序代碼或數據表保存在ROM、FLASH或其它非易失性存儲器中,它們對應著DSP的CE1空間,數據格式跟系統一樣。在內部復位時,DSP使用默認的ROM時序從CE1空間拷貝1kB數據到地址0處。用戶可以指定外部ROM的存儲寬度,EMIF會自動將相鄰的8bit/16bit數據合并成32bit。DSP用EDMA進行的這一加載過程是一個單幀的數據塊傳輸。傳輸過程完成之后,CPU退出復位狀態,開始執行地址0處的程序。一般來說,這段1kB程序的功能是先將外部主程序數據讀入到DSP內部程序空間相應地址,然后跳轉到主程序運行。在DSP系統應用中,用戶就需要編寫這段1kB大小的程序,實現二次引導,此即為用戶的引導程序。其過程簡單歸納如下:
1)在CCS環境中,編寫主程序、裝載程序以及相應的命令文件(link.cmd),編譯鏈接以形成.hex(COFF格式)文件,通過編程器轉化成.bin文件(二進制文件),燒到ROM中;
2)系統加電復位,芯片從ROM中拷貝固定長度的數據塊(其中包括用戶自身的引導代碼)到RAM中,用以初始化部分存儲器;

表1 TMS320C6713B系統的不同引導方式

圖1 典型的DSP應用系統

圖2 FLASH引導程序的組成
3)執行用戶的引導代碼和其它數據段以及程序段初始化所必需的段復制;
4)程序從main()處開始執行。
如果程序代碼或數據表保存在ROM、FLASH或其它非易失性存儲器中,在開發引導程序時,必須考慮以下幾點:
1)用戶引導代碼必須鏈接到應用程序中,這樣在系統加電復位后,用戶的引導程序才能被合適地加載和執行;
2)只有通過編寫自己的引導代碼用戶才能正確地從ROM中拷貝COFF格式的段,而引導代碼的大小不能超過1kB;
3)在程序連接時,只有通過合理編寫命令文件(.cmd),使這些段被合理地連接后,才能實現從ROM中加載,從DSP內部RAM中執行。
在這個過程中,所用到的命令文件和用戶引導代碼如圖2所示,它們對于程序能否正確地執行起著非常重要的作用。在某軟件無線電工程的開發中,筆者就是在C語言環境下,成功地開發了TMS320C6713B系統基于EMIF的自引導程序。下面就針對這兩個方面加以詳細說明,以供大家借鑒。
利用TI的代碼產生工具,可以按照圖2所示的步驟生成可執行文件(.out)。匯編器接收匯編優化器或編譯器產生的.asm文件,經過匯編后產生可重新分配地址的COFF格式的目標文件.obj。該格式文件包含了匯編器所生成的各個段(如表2所示),命令文件就是指導鏈接如何將各段分配到相應的存儲器中。編寫命令文件時,有一點需要注意,那就是在很多情況下需要對某段說明兩個不同的地址:加載地址和運行地址。加載地址決定了二進制程序代碼的存儲位置和程序的引導地址,但在運行過程中對于該段的任何引用則是以它的運行地址作為參考的。因此,當用戶對某段分別說明了加載地址和運行地址時,只有將該段從加載地址復制到運行地址上,該段才可以被訪問。
在命令文件中,合理地分配各段對于整個程序的正確運行起到關鍵的作用。在TI可查閱的文檔和相關網站上,很少有涉及這方面內容的文章。經過反復實踐,筆者取得了一些經驗,下面是在實踐中編寫的命令文件(.cmd)

表2 編譯器產生的默認代碼段和數據段

DSP加電復位后,自動從CE1空間中拷貝1kB數據(程序代碼)到地址0處,然后從0地址處開始執行指令。下面這段程序,其主要作用是將程序從外部ROM中搬到片內RAM區,然后跳轉到C程序的入口地址C_int00處,保證程序順利啟動運行。
編寫程序的具體步驟如下:


TI高速信號處理器TMS320C6713B需要從外部的存儲器(ROM或FLASH)中引導應用程序,這是開發中的重點和難點之一,關系到系統的可靠性和處理速度,它在整個DSP嵌入式系統開發中有著至關重要的作用。如果開發者在設計之初就掌握了這項技術,就會大大方便系統的調試,縮短開發時間。
[1]王鳳臣,喬衛民,李慶瑞.TI TMS320C6713B DSP板FIashBurn程序設計[J].微計算機信息(嵌入式與SOC),2006,22(7).
[2]TMS320C6713B,TMS320C6713BB FLOATINGPOINT DIGITAL SIGNAL PROCESSORS[R].Texas Instruments,SPRS294B-OCTOBER,2005-REVISED JUNE 2006.
[3]唐冰.TMS320C5410燒寫FLASH實現并行自舉引導[J].單片機與嵌入式系統應用,2003(01).
[4]趙凡,丑武勝等.TMS320C6000系列DSP的FLASH啟動設計[J].單片機與嵌入式系統應用,2007(05).
[5]夏爽.通過JTAG口對DSP外部FLASH存儲器的在線編程[J].單片機與嵌入式系統應用,2003(08).