1、引言
在極低譜密度,高頻譜利用率的大容量無線傳輸技術(shù)中,高速實(shí)時(shí)信號(hào)處理成為技術(shù)的關(guān)鍵。當(dāng)前市場(chǎng)上,能滿足對(duì)高速實(shí)時(shí)信號(hào)處理的需要有足夠的優(yōu)點(diǎn)TMS320C6000系列DSP是TI公司推出的一種高性能的數(shù)字信號(hào)處理器,包含定點(diǎn)和浮點(diǎn)兩個(gè)系列,其中定點(diǎn)系列包括TMS320C62xx和TMS320C64xx,浮點(diǎn)系列包括TMS320C67xx。 C6000系列DSP有三種啟動(dòng)方式:
(1)主機(jī)啟動(dòng)
如果選擇主機(jī)啟動(dòng)模式,在復(fù)位信號(hào)結(jié)束后,DSP的CPU被內(nèi)部“一塊”而其他部分都被釋放。在此期間,一個(gè)外部的主機(jī)在必要時(shí)可以通過主機(jī)接口初始化CPU的主機(jī)完成了所有必須的初始化,它必須將HPIC寄存器的DSPINT位置“ 1”來完成啟動(dòng)過程。在程序加載完后,CPU被從“復(fù)制”中在CPU被喚醒后,CPU需要將DSPINT位清零。
(2)ROM啟動(dòng)是否采用
ROM啟動(dòng)模式,則C6000系列的DSP(C621x / C671x / C64x)。該副本過程由EDMA完成,使用替換的Rom時(shí)鐘。在此過程中CPU一直處于“重疊”狀態(tài),直到復(fù)制完成后才被被喚醒,然后從地址0處開始執(zhí)行程序[1]。
(3)無啟動(dòng)如果選擇無啟動(dòng)模式,CPU復(fù)位后直接從地址0處開始執(zhí)行指令。C6000系列DSP的器件配置情況決定了選擇的啟動(dòng)方式。具體來說就是DSP的啟動(dòng)模式
以C6416為例,BEA [19:18]是啟動(dòng)模式管腳,它們?nèi)〔煌闹担ㄉ侠?a target="_blank">電阻代表“ 1”,下拉電阻代表“ 0 ”)的代表如表1-1所示:
如果DSP的程序會(huì)大于1K字節(jié),那么上述ROM啟動(dòng)機(jī)制已經(jīng)可以完成程序的加載。而事實(shí)上大部分DSP的程序會(huì)大于1K字節(jié),這時(shí)就需要?jiǎng)?chuàng)建一個(gè)特定的啟動(dòng)程序來完成更多代碼的加載。該特定啟動(dòng)程序又被稱作二級(jí)引導(dǎo)加載器。
在需要二級(jí)引導(dǎo)程序的程序中,這段特定啟動(dòng)代碼通常駐留在ROM存儲(chǔ)器的起始位置以便在DSP復(fù)位后能自動(dòng)被加載到內(nèi)存地址0處。當(dāng)1K字節(jié)代碼被加載完成后,CPU開始從地址0處執(zhí)行,也就是執(zhí)行二級(jí)bootloader的內(nèi)容。二級(jí)bootloader的功能就是將程序的剩余部分復(fù)制到內(nèi)存中。
2、啟動(dòng)方法的設(shè)計(jì)與實(shí)現(xiàn)
圖1為實(shí)施方法的詳細(xì)說明。啟動(dòng)方法的設(shè)計(jì)與實(shí)現(xiàn)采用二級(jí)引導(dǎo)程序的DSP啟動(dòng)方法的實(shí)現(xiàn)大體分為四步:配置存儲(chǔ)器;編寫輔助引導(dǎo)程序代碼;編譯程序,轉(zhuǎn)換目標(biāo)文件的格式;將程序燒寫進(jìn)Flash。該啟動(dòng)方法的硬件平臺(tái)示意圖,其中DSP的型號(hào)選擇C6416,F(xiàn)lash的型號(hào)選擇AM29LV800B。
2.1配置存儲(chǔ)器
2.1.1定義存儲(chǔ)分區(qū)
為了實(shí)現(xiàn)使用二級(jí)bootloader的ROM啟動(dòng),需要將閃存劃分為FLASH_BOOT,F(xiàn)LASH_REST兩個(gè)區(qū)。這兩個(gè)區(qū)分別存儲(chǔ)由片上bootloader復(fù)制的程序段和由secondary bootloader復(fù)制的程序段。對(duì)于BIOS程序,對(duì)于非BIOS程序,內(nèi)存段定義在鏈接器命令文件中。一個(gè)C6416的內(nèi)存段定義的示例如下所示:
MEMORY
{…
FLASH_BOOT:o = 0x64000000 l = 00000400h
FLASH_REST :o = 0x64000400 l = 0000fc00h
}
2.1.2 COFF段的定位
DSP程序通過COFF段的形式在內(nèi)存中存放的。一個(gè)COFF段就是一個(gè)代碼或數(shù)據(jù)塊,它在內(nèi)存中占據(jù)連續(xù)空間。為自定義段,初始化段和未初始化段類型。COFF段可以有各種屬性,其中,負(fù)載屬性和運(yùn)行屬性與DSP啟動(dòng)有密切的關(guān)系。負(fù)載屬性指定段的存儲(chǔ)地址,運(yùn)行屬性指定段的執(zhí)行地址例如:
.text:LOAD = FLASH,RUN = IRAM表示代碼段.text被存儲(chǔ)在flash中,DSP啟動(dòng)時(shí)二級(jí)bootloader將該段拷貝拷貝到IRAM中。
2.2編寫輔助Bootloader代碼
對(duì)于C6416,外部存儲(chǔ)器接口(EMIF)需要正確配置以后才可以訪問外部存儲(chǔ)器件。在此工作完成后,二級(jí)bootloader應(yīng)該將所有的初始化段從其的負(fù)載地址拷貝到run地址,之后再替換二級(jí)Bootloader用匯編語言編寫,因?yàn)榇藭r(shí)C環(huán)境尚未建立。
二級(jí)bootloader必須知道所有初始化段的大小,在Flash中存儲(chǔ)的位置以及應(yīng)該被加載到何處實(shí)際上,二級(jí)bootloader通過讀取段拷貝表獲得了上述信息。此處第三部分詳細(xì)說明了有關(guān)段拷貝表的內(nèi)容。
完成二級(jí)bootloader代碼的編寫后,應(yīng)將它添加入工程,與工程的其他代碼一同編譯鏈接生成的.out文件。
2.3目標(biāo)轉(zhuǎn)換文件的格式
編譯鏈接生成的的英文的.out格式文件,然而閃存一般接收的是ASCII格式的文件[3] .CCS附帶的工具六角轉(zhuǎn)換實(shí)用程序可將.out文件轉(zhuǎn)換為ASCII格式的.hex文件,Hex6x以命令行文件的形式執(zhí)行。Hex命令行文件中,首先指定輸入文件(.out),輸出文件的格式和ROM的大小及類型一個(gè)Hex命令行文件的示例如下所示(注釋內(nèi)容用“ / *”和“ * /”括起):
-a / *輸出文件采用ASCII格式* /
-圖片/ *基本模式* /
-memwidth 8 / * ROM數(shù)據(jù)寬度8bit * /
ROMS
{
FLASH:org = 0x64000000,len = 0x100000,romwidth = 8,files = {。\ rom_boot.hex}
} SECTIONS / *列出所有需要固化在Flash中的COFF段* /
2.4將程序燒寫進(jìn)Flash
將2.3節(jié)生成的ASCII文件燒寫進(jìn)Flash可以使用CCS自帶的FlashBurn工具。FlashBurn是一個(gè)帶圖形界面的軟件,它首先將一個(gè)FlashBurn TargetComponent(FBTC)的程序下載到DSP內(nèi)存中,通過與FBTC的實(shí)時(shí)數(shù)據(jù)交換完成對(duì)Flash的編程編程等操作。針對(duì)不同的硬件(DSP,F(xiàn)lash Model)修改FBTC是該方法的關(guān)鍵。所需的修改位置包括Flash的基地址,
3、段拷貝表
復(fù)制表二級(jí)bootloader使用一個(gè)段復(fù)制表(段復(fù)制表)進(jìn)行段的復(fù)制。段復(fù)制表包含每個(gè)需要復(fù)制的段的必要信息,如段的加載地址。 ,段的runaddress,段的大小。段拷貝表被插入在secondary bootloader的末尾。生成段拷貝表的方法有兩種:
1)使用十六進(jìn)制轉(zhuǎn)換實(shí)用程序的-boot選項(xiàng)
在2.3節(jié)中我們討論了程序文件格式的轉(zhuǎn)換和hex命令行文件,實(shí)際上Code Composer Studio自帶的工具h(yuǎn)ex轉(zhuǎn)換實(shí)用程序提供了一種更加方便的生成段拷貝表的方法,只要在hex命令行文件中使用一些特殊的選項(xiàng)即可。特殊的選項(xiàng)有–boot,-bootorg和–bootsection,這三個(gè)選項(xiàng)的指示分別如下:-boot
使用該選項(xiàng)時(shí)hex轉(zhuǎn)換實(shí)用程序?qū)⒆詣?dòng)轉(zhuǎn)換所有初始化段的格式-bootorg指定段拷貝表的地址-bootsection。規(guī)范二級(jí)引導(dǎo)程序所在的段的名稱
2)使用鏈接器選項(xiàng)(LOAD_START,RUN_START,SIZE)
涉及段拷貝表的生成的三個(gè)選項(xiàng):LOAD_START,RUN_START和SIZE,可分別獲得一個(gè)段的交換地址,運(yùn)行地址和大小。例如,可以使用以下代碼段的文本段的替換地址(存于_text_ld_start中) ,,運(yùn)行地址(_text_rn_start)和段的大小(存于_text_size)
.text:load = FLASH_REST,run = IRAM
LOAD_START(_text_ld_start),
RUN_START(_text_rn_start),
SIZE(_text_size)
4、結(jié)束語
此處針對(duì)于極低譜密度,高頻譜利用率的大容量無線傳輸技術(shù)研究中C6000系列DSP的應(yīng)用程序大于1K字節(jié)的情況,提出了一種使用二級(jí)引導(dǎo)程序從Flash啟動(dòng)DSP的方法。該方法可采用了C6000系列DSP的嵌入式系統(tǒng)中,不需要額外的閃存編程器,具有廣泛的適用性。
本文作者創(chuàng)新點(diǎn):在二級(jí)引導(dǎo)程序中引入段拷貝表用以控制程序加載過程,并利用CCS自身的編譯功能獲取段復(fù)制表的內(nèi)容,該方法可提高效率且準(zhǔn)確高。
責(zé)任編輯:gt
評(píng)論
查看更多