- 相關(guān)推薦
TMS320C6000 DSP自動(dòng)引導(dǎo)的方法和編程實(shí)現(xiàn)
摘要:TI高速信號(hào)處理器TMS320C5X和TMS320C6X需要從外部的存儲(chǔ)器(ROM或FLASH)中引導(dǎo)應(yīng)用程序?這是開發(fā)中的重點(diǎn)和難點(diǎn)之一,關(guān)系到系統(tǒng)的可靠性和處理速度。以TMS320C6000 DSP為例,介紹了應(yīng)用程序的三種引導(dǎo)方式;以實(shí)際工程為背景詳細(xì)敘述了從ROM中引導(dǎo)程序的實(shí)現(xiàn)方法,并鐘對(duì)其中重要的命令文件和用戶引導(dǎo)程序,給出了相應(yīng)的示例文件和程序。關(guān)鍵詞:TMS320C6000 DSP CMD 引導(dǎo)
1 TMS320C6000 DSP硬件結(jié)構(gòu)概述
TMS320C6000是TI公司生產(chǎn)的TMS320系列產(chǎn)品中新一代高性能的DSP芯片,適用于高速數(shù)字信號(hào)處理。TMS320C6000主要由三個(gè)部分組成:CPU內(nèi)核、外設(shè)和存儲(chǔ)器。CPU中8個(gè)功能單元可以并行工作,這些功能單元被分成類似的兩組,每組由4個(gè)基本功能單元組成。CPU有兩組寄存器,每組寄存器由16個(gè)32位寄存器組成。由于在運(yùn)行期間不做硬件數(shù)據(jù)相關(guān)性檢查,所以程序運(yùn)行時(shí)可以同時(shí)執(zhí)行8條指令,極大地提高了芯片處理速度,這使得該系列的芯片在電子測(cè)量、測(cè)控、圖像、雷達(dá)、聲納和軟件無線電等領(lǐng)域得到了廣泛的應(yīng)用。
(范文先生網(wǎng)www.gymyzhishaji.com收集整理)
2 加電后DSP的運(yùn)行過程
系統(tǒng)加電后,RESET信號(hào)為低,芯片復(fù)位。在RESET信號(hào)上升沿處,鎖存BOOTMODE[4:0]信號(hào),借以決定芯片的存儲(chǔ)器映射方式、地址0處的存儲(chǔ)器類型以及復(fù)位后芯片的自舉模式,復(fù)位結(jié)束后,芯片從存儲(chǔ)器的0地址開始執(zhí)行指令。
TMS320C6000器件可以設(shè)置成三種自舉方式,其加載過程分別敘述如下:
(1)不加載。CPU直接從存儲(chǔ)器的0地址處開始執(zhí)行指令。如果系統(tǒng)中使用的是SDRAM,那么CPU會(huì)先掛起,直到SDRAM的初始化完成。TMS320C621X/C671X不具有這類方式。
(2)ROM加載。位于外部空間的ROM中的程序首先通過DMA/EDMA搬入地址0處。盡管加載過程是在芯片外部被復(fù)位信號(hào)釋放以后才開始的,但是當(dāng)芯片仍處于內(nèi)部復(fù)位保持時(shí),就開始了上述的傳輸過程了。用戶可以指定外部ROM的存儲(chǔ)寬度,EMIF會(huì)自動(dòng)將相鄰的8bit/16bit數(shù)據(jù)合并成32bit。ROM中的程序必須以little endian的格式存儲(chǔ)。用DMA/EDMA進(jìn)行的這一加載過程是一個(gè)單幀的數(shù)據(jù)塊傳輸。傳輸過程完成之后,CPU退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。對(duì)于不同的芯片,這一過程略有不同,整個(gè)過程如圖1所示。
對(duì)于TMS320C620X/C670X,DMA使用默認(rèn)的ROM時(shí)序從CE1空間中拷貝64KB數(shù)據(jù)到地址0處。
對(duì)于TMS320C621X/C671X/C64X,EDMA使用默認(rèn)的ROM時(shí)序從CE1空間(C64X從EMIFB CE1空間)拷貝1KB數(shù)據(jù)到地址0處。
(3)主機(jī)(HPI)引導(dǎo)。CPU停留在保持狀態(tài),其余硬件部分均保持正常狀態(tài)。在這期間,外部主機(jī)通過主機(jī)口初始化CPU的存儲(chǔ)空間。主機(jī)完成所有的初始化工作后,將主機(jī)口控制寄存器中的DSPINT位設(shè)置為1,結(jié)束引導(dǎo)過程。此時(shí)CPU退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。在主機(jī)引導(dǎo)過程中,主機(jī)可以對(duì)DSP所有的存儲(chǔ)空間進(jìn)行讀和寫。
此外,用戶應(yīng)選擇存儲(chǔ)器的映射方式(當(dāng)有多種映射方式可供選擇時(shí))和首地址為0存儲(chǔ)空間的類型。TMS320C6201/C6701芯片有專門的BOOTMODE管腳決定芯片的各種設(shè)置。TMS320C6202則通過將擴(kuò)展總線上的XD[4:0]直接映射為BOOTMODE?4?0?確定芯片的設(shè)置,這些管腳可通過電阻上拉或下拉設(shè)置引導(dǎo)方式和存儲(chǔ)器映射方式。TMS320C6211/C6711僅有一種存儲(chǔ)器映射方式,引導(dǎo)方式只需要兩位進(jìn)行設(shè)置,主機(jī)口的HD[4:3}映射為BOOTMODE[4:0]同樣是利用電阻上拉或下拉設(shè)置引導(dǎo)方式實(shí)現(xiàn)的。
圖2 代碼生成流程圖
3 ROM引導(dǎo)模式實(shí)現(xiàn)
在許多基于TMS320C6000 DSP的應(yīng)用程序的開發(fā)中,程序代碼或數(shù)據(jù)表總是保存在ROM、 FLASH或其它非易失存儲(chǔ)器中,以保證掉電時(shí)代碼仍在。但這些存儲(chǔ)器的速度很慢,對(duì)速度性能要求很嚴(yán)格的代碼就需要運(yùn)行到其它快速存儲(chǔ)器中,如片內(nèi)RAM或片外靜態(tài)RAM。這就需要在運(yùn)行前將代碼從ROM存儲(chǔ)器中裝載到RAM中,這是開發(fā)人員遇到的難點(diǎn)之一。從ROM引導(dǎo)的應(yīng)用程序的開發(fā)過程分以下幾個(gè)步驟:
·在CCS環(huán)境中,調(diào)試程序,編寫相應(yīng)的命令文件(.cmd),編譯連接以形成.hex(COFF格式)文件,通過編程器轉(zhuǎn)化成.bin文件(二進(jìn)制文件),燒到ROM中;
·系統(tǒng)加電復(fù)位,芯片從ROM中拷貝固定長度的數(shù)據(jù)塊(其中包括用戶自身的引導(dǎo)代碼)到RAM中,用以初始化部分存儲(chǔ)器;
·執(zhí)行用戶的引導(dǎo)代碼和其它數(shù)據(jù)段以及程序段初始化所必需的段復(fù)制;
·使用包含.cinit段中的數(shù)據(jù)初始化.bss段中C語言變量;
·程序從main()處開始執(zhí)行。
在開發(fā)從ROM引導(dǎo)的應(yīng)用程序時(shí),必須考慮以下幾點(diǎn):用戶引導(dǎo)代碼必須連接到應(yīng)用程序中,這樣在系統(tǒng)加電復(fù)位后,用戶的引導(dǎo)程序才能被合適地加載和執(zhí)行;只有通過編寫自己的引導(dǎo)代碼用戶才能正確地從ROM中拷貝COFF格式的段;在程序連接時(shí),只有通過合理編寫命令文件(.cmd),使這些段被合理地連接后,才能實(shí)現(xiàn)從ROM中加載,從DSP內(nèi)部RAM中執(zhí)行。在這個(gè)過程中,命令文件和用戶引導(dǎo)代碼編寫對(duì)于程序能否正確地執(zhí)行起著非常重要的作用。在某軟件無線電工程的開發(fā)中,筆者就是在C語言環(huán)境下,成功地開發(fā)了TMS320C6701的自引導(dǎo)程序。下面就針對(duì)這兩個(gè)方面加以詳細(xì)說明,以供大家借鑒。
3.1 命令文件
利用TI的代碼產(chǎn)生工具,可以按照?qǐng)D2所示的步驟生成可執(zhí)行文件(.out)。
匯編器接收匯編優(yōu)化器或編譯器產(chǎn)生的.asm文件,經(jīng)過匯編后產(chǎn)生可重新分配地址的COFF格式的目標(biāo)文件.obj。該格式文件包含了匯編器所生成的各個(gè)段(如表1所示),命令文件就是指導(dǎo)連接器如何將各段分配到相應(yīng)的存儲(chǔ)器中。編寫命令文件時(shí),有一點(diǎn)需要注意,那就是在很多情況下需要對(duì)某段說明兩個(gè)不同的地址:加載地址和運(yùn)行地址。加載地址決定了二進(jìn)制程序代碼的存儲(chǔ)位置和程序的引導(dǎo)地址,但在運(yùn)行過程中對(duì)于該段的任何引用則是以它的運(yùn)行地址作為參考的。因此,當(dāng)用戶對(duì)某段分別說明了加載地址和運(yùn)行地址時(shí),只有將該段從加載地址復(fù)制到運(yùn)行地址上,該段才可以被訪問。
表1 編譯器產(chǎn)生的默認(rèn)代碼段和數(shù)據(jù)段
在命令文件中,合理地分配.cinit段對(duì)于整個(gè)程序的正確運(yùn)行起到關(guān)鍵的作用。在TI可查閱的文檔和相關(guān)網(wǎng)站上,很少有涉及這方面內(nèi)容的文章。經(jīng)過反復(fù)實(shí)踐,筆者取得了處理.cinit段的一些經(jīng)驗(yàn),請(qǐng)大家在下面的命令文件和用戶引導(dǎo)程序中注意該段的處理過程。
下面是在實(shí)踐中編寫的命令文件(.cmd)?
-c ;說明復(fù)位后的初始化方式
-stack 0x5000 ;說明堆的大小
-heap 0x400 ;說明棧的大小
-l rts6701.lib ;說明程序中引用的庫文件
MEMORY ;將整個(gè)存儲(chǔ)器分成具有不同名稱的存儲(chǔ)區(qū)域
{
VECS:? origin = 0x00000000, len = 0x00000200
PMEM: origin = 0x00000200, len = 0x0000d000
PCINIT: origin = 0x0000d200, len = 0x00001e00
CE1VECS: origin=0x01400000, len = 0x00000200
CE1PMEM:origin = 0x01400200, len = 0x0000d000
CE1INIT: origin = 0x0140d200, len = 0x00001e00
CE3: origin = 0x03000000, len = 0x01000000
DRAM: origin = 0x80000000, len = 0x00010000
}
SECTIONS ;說明目標(biāo)文件中各段的加載地址和運(yùn)行地址
{
.myBootCode :load=CE1VECS, run=VECS
;用戶的引導(dǎo)代碼段
.text ?: load=CE1PMEM, run=PMEM
.cinit ?: load=CE1INIT, run=DRAM
;裝載到ROM中,在片內(nèi)數(shù)據(jù)區(qū)運(yùn)行
.const > DRAM
.data > DRAM
.bss > DRAM
.sysmem > DRAM
.stack > DRAM
.far > CE3
}
3.2 編寫用戶引導(dǎo)代碼
DSP加電復(fù)位后,自動(dòng)從CE1空間中拷貝64K數(shù)據(jù)(程序代碼)到地址0處,然后從0地址處開始執(zhí)行指令。由于在命令文件中,將.cinit裝載到外部ROM中,但其運(yùn)行地址卻在片內(nèi)數(shù)據(jù)區(qū),所以采用下面這段程序,其主要作用是將Cinit從外部ROM中搬到片內(nèi)數(shù)據(jù)區(qū),使其能在C編程環(huán)境下進(jìn)行正確的初始化工作,保證程序的順利進(jìn)行。
.sect “.myBootCode”
;將用戶引導(dǎo)代碼分配到
myBootCode段中
.global myBootCode
.ref _c_int00
;C程序的入口地址
myBootCode?
......
;EMIF寄存器和DMA寄存器初始化
;使用DMA方式將以原地址0x0000d200開始的0x380長的存儲(chǔ)空間拷貝到目標(biāo)地址上
mvkl DMA0_SRA ,A5 ;裝載原地址0xd200
mvkl 0x0000d200?, B4
mvkh DMA0_SRA ,A5
mvkh 0x0000d200m B4
stw B4,*A5
mvkl DMA0_DSA, A5 ;裝載目標(biāo)地址0x80000000
mvkl 0x80000000, A4
mvkh DMA0_DSA, A5
mvkh 0x80000000, A4
stw A4,*A5
mvkl DMA0_CNT ?A5 ;裝載數(shù)據(jù)長度0x380(這個(gè)長度可以通過查看.map文件中.cinit的長度獲得)
mvkl 0x00000380, B1
mvkh DMA0_CNT ,A5
mvkh 0x00000380, B1
;啟動(dòng)DMA開始傳輸
wait:
mvkl DMA0_PCR ,A5
mvkh DMA0_PCR ,A5
ldw ?*A5 ,B2
mvkl 0x0000000c,A5
mvkh 0x0000000c ,A5
and A5,B2,B2
?b2? b wait
nop 5
;傳輸結(jié)束后,跳轉(zhuǎn)到C程序的入口地址c_int00處,
開始執(zhí)行程序
mvkl .s2 _c_int00?B0
mvkh .s2 _c_int00?B0
B .s2 B0
nop 5
【TMS320C6000 DSP自動(dòng)引導(dǎo)的方法和編程實(shí)現(xiàn)】相關(guān)文章:
在仿真環(huán)境下實(shí)現(xiàn)TMS320C6000系列DSP的程序自引導(dǎo)08-06
DSP56362的雙引導(dǎo)裝載方法研究與實(shí)現(xiàn)08-06
DSP外掛Flash在系統(tǒng)編程及并行引導(dǎo)裝載方法08-06
TMS320C6x DSP的FLASH引導(dǎo)方法研究與實(shí)現(xiàn)08-06
DSP+FLASH引導(dǎo)裝載系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)08-06
TMS320C32 DSP的中斷編程方法及BOOT功能實(shí)現(xiàn)08-06
DSP與慢速設(shè)備接口的實(shí)現(xiàn)08-06