牛亞莉(陜西交通職業技術學院,陜西西安 710018)
?
TMS320C6000 DSPs的ROM自動引導實現
牛亞莉
(陜西交通職業技術學院,陜西西安710018)
【摘 要】本文通過對TMS320C6000系列DSP引導方式及初始化過程的分析,根據實際工程開發經驗,完整詳細的闡述了6000系列DSP的ROM引導方式上電引導過程,以及所需用戶引導文件的編寫,常用系數表的處理方法,落焊文件的生成等過程,并給出了設計代碼,有效解決了TI DSP 6000系列的上電引導及初始化問題。
【關鍵詞】DSP自動引導初始化ROM方式
隨著數字信號處理技術的不斷發展,大規模集成芯片及電路的出現,DSP技術被廣泛應用于鐵路信號傳輸[1]、檢測[2]、識別系統[3]中,實現產品的小型化、模塊化,大大提高信號處理的靈活度及處理速度,在鐵路提速、高鐵建設、城市軌道交通發展中隨處可見。
TMS320C6000系列DSP是TI公司推出的新一代高性能DSP,包括定點系列C62xx、C64xx和浮點系列C67xx,其CPU主頻范圍分布在100MHz到600MHz。在DSP的應用過程中,為了保證系統在脫機狀況下能夠實現獨立運行,需要將用戶代碼及一些系數等文件保存在ROM/FLASH等非易失性存儲器當中,在系統加電后,通過DSP自身提供的引導方式將應用程序從外部存儲區搬移到內部RAM以便運行。這樣一方面擴展了DSP有限的ROM資源,另一方面又能充分發揮DSP內部資源的性能優勢。
盡管TI 公司的使用指南上提供了不同引導方式的操作方法,但在實際應用中,往往由于文件描述不夠細致全面加上部分開發者經驗不足,使得鏈接命令文件、初始化系數表及格式化文件等設計不當,導致在DSP上電時不能正常自舉,往往會為工程進度帶來較大的麻煩,甚至影響產品的可靠性。
C6000系列DSP提供了三種引導方式,不加載、ROM方式加載和HPI方式加載,其中最常用的就是ROM加載方式。DSP芯片上有專門的管腳用來選擇其引導方式和存儲器映射方式,C620x/C670x DSP芯片由BOOTMODE[4:0]管腳決定,C6211/C6711通過HD[1:0]、C6712/C64x通過BOOTMODE[1:0]來設置。
在ROM引導方式下,DSP加電后首先通過DMA/EDMA將位于外部ROM/FLASH存儲區0地址開始的內容當作一幀數據搬移到內部地址0處。
(1)對于C620x/C670x,DMA從CE1空間自動搬移64KB的數據到內部地址0處;
(2)對于C621x/C671x/C64x,EDMA從CE1空間(對C64x是EMIFB的CE1空間)自動搬移1KB的數據到地址0處。此時一般來說需要編寫用戶引導代碼來完成其余數據的搬移,因為用戶開發的程序一般都會大于1KB。
傳輸完成后,CPU退出復位狀態,開始執行零地址處的指令,即從中斷向量表進入,跳轉到DSP庫函數c_int00或者用戶引導程序,用戶引導程序運行結束后仍然應該跳轉到c_int00,然后開始DSP的初始化過程。
c_int00完成C開發環境的初始化以及.bss段全局變量的初始化,由auto_init庫函數控制,調用memcpy庫函數從.cinit數據段中搬移相應的數據到.bss段中對應的全局變量中,這些過程全都是由DSP自動完成的。初始化完成后,即開始執行應用程序,進入main函數。

表1 CMD文件各段含義
一般我們都采用c語言與匯編語言混合使用來進行DSP軟件設計,一個基本的DSP工程至少應該包含一個主程序main()函數、一個中斷向量表.vextors段和一個鏈接命令文件*.cmd。
DSP的命令文件用于將程序中的各段正確的分配到C6000的地址空間中去,通過連接器生成可執行的.out文件。如第二節所介紹的,DSP加載后首先從0地址處開始執行,中斷向量表應該安排在地址零處,我們可以根據實際需要安排程序在0地址處直接轉向c_int00或者轉向用戶引導程序。
常見的DSP應用當中還有對系數表的應用,在編程中可以將系數表作為一個匯編文件添加到DSP工程中,這樣在編譯連接后該文件就會作為一個數據段出現在最后的.out文件(COEF格式)中,可以在加載之后由DMA搬移到內部數據區待用。
3.1命令文件
命令文件的編寫關系到整個工程是否能夠正常工作[4],因此是DSP程序設計非常關鍵的一個環節。
以下以6701為例來說明CMD文件的編寫:
-c
-l rts6701.lib
-stack 0x0400
MEMORY
{
PRAM : origin = 0x00000000,len = 0x0FFFF
DRAM_init : origin = 0x80000000,len = 0x04800
DRAM: origin = 0x80004800,len = 0x0b000
}
SECTIONS
{
.vectors> PRAM
.my_boot> PRAM
.text> PRAM
.cinit: load=PRAM, run=DRAM_init
.bss> DRAM_init
.far> DRAM_init
.stack> DRAM_init
.data_buf1
{
coef.obj
} load=PRAM, run=DRAM_init
.data_buf2> DRAM
}
其中,-c代表運行時自動初始化全局變量,ROM加載模式應該使用該選項;各段含義如表1:
DSP最終形成的.out文件分為三種類型的數據段,如表中括號注明的代碼段、初始化段和非初始化段,每一種類型的段都有一個加載地址和一個運行地址。由于我們選擇ROM自動引導方式,上電后位于外部ROM中的程序會自動搬移到內部0地址處的RAM,即DSP通常所指的程序RAM(PRAM)當中,所以這里的加載地址可以直接寫成內部PRAM。代碼段的加載地址和運行地址都在PRAM;非初始化段的加載地址和運行地址都在DRAM_init;而初始化段則應該分配兩個地址,加載地址在PRAM,運行地址在DRAM_init。因此,對于分配了兩個地址的數據段就需要編寫用戶引導代碼,將其從加載地址搬移到運行地址。
3.2用戶引導代碼
由于在DSP的引導過程中C編譯環境還沒有得到初始化,所以用戶引導代碼一般采用匯編語言進行設計,主要用于初始化段的搬移或者1KB以外的代碼數據搬移,以下為具體設計實例:
.sect “.my_boot”
.include boot_c671x.h62
.global _boot
_boot:
;配置EMIF控制寄存器(C621x/C671x/C64x需要,若只是實現初始化段搬移則不需要此配置)
MVKL EMIF_GCTL,A4
|| MVKL 0x3090,B4 ;具體值參考手冊設置
MVKH EMIF_GCTL,A4
|| MVKH 0x3090,B4
stw B4,*A4
;根據需要配置EMIF CE空間控制寄存器、SDRAM 控制寄存器
…………
;設置CSR、ICR、IER寄存器
………….
;設置DMA控制寄存器
MVKL 0x01840044, A1;DMA3_PRIMARY_CTRL
|| MVKL 0xfffffffc,B2
MVKH 0x01840044, A1
|| MVKH 0xfffffffc,B2
LDW *A1, A10
AND A10, B2, A11
STW A11, *A1
;配置DMA副控寄存器,源/目的寄存器,計數寄存器
此時需參考編譯器產生的map文件,確定所需搬移各段地址和長度(注:map文件中長度數據對應于32bit)
…………………
;啟動DMA
MVKL 0x0b000051,A2
MVKH 0x0b000051,A2
STW A2, *A1
IDLE ;傳輸結束后產生中斷,在中斷向量表中跳轉到c_int00,開始初始化過程
用戶編寫的應用程序經過正確的編譯連接以后生成COEF格式的.out文件,由于ROM/FLASH存儲器不支持這種格式,所以在燒寫之前需要將其轉換為十六進制碼的格式。TI提供了專用工具h e x 6 x . e x e可以實現該轉換過程,該文件位于安裝目錄下tic6000cgtoolsin文件夾中。
以下是格式轉換命令文件實例:
channel_s.out/* 用戶應用程序的.out文件,作為hex6x的輸入*/
-m/* 輸出文件格式,m代表Motorola-S格式 */
-memwidth 8/* 存儲寬度 */
-romwidth 8/* ROM數據寬度 */
-o channel_2.hex/* 輸出文件名稱 */
ROMS
{
FLASH:org = 0x00000000, length = 0xFFFF
}
若采用16bit ROM加載方式,則連接兩片8位的ROM,地址線連接方式相同,數據線高低八位分別連接。此時,存儲寬度設置為16,將產生兩個HEX文件,命令文件中相應內容改寫為:
-memwidth 16
ROMS
{
FLASH:org = 0x00000000, length = 0xFFFF
files={ channel_2.b0, channel_2.b1 }
}
其中.b0文件是低八位數據 ,.b1是高八位數據。通過以上步驟轉換后即可得到可燒寫的目標文件。
本文通過分析TMS320C6000系列DSP的加載及初始化過程,結合實際開發經驗,給出了用于ROM自動加載模式下DSP的軟件設計和文件格式轉換方法。通過具體的代碼實例詳細說明了設計過程,尤其是對于命令文件和用戶引導程序的編寫。
參考文獻:
[1]張西峰,杜普選.基于TMS3206722的高度鐵路軌道信號發送與接收模擬系統[J].2010(10):25-28.
[2]孫國斌.基于DSO+FPGA架構的DC6000V供電鐵路客車逆變電源的設計與實現[J].鐵道車輛,2013(7):13-15.
[3]黃雪程,王焱,劉春.基于DSP的鐵路信號識別技術[J].鐵路計算機應用,2009(4):46-48.
[4]李方慧,王飛,何佩琨.TMS320C6000系列DSPs原理與應用[M].北京:電子工業出版社,2003.
作者簡介:牛亞莉(1980—),女,陜西,碩士,陜西交通職業技術學院,高級工程師,從事城市軌道交通控制及數字信號處理方面的工作。