Chap 13 補充資料
很多德州儀器DSP的使用者對於stand alone或者燒錄方式有很多疑問, 第一步應該先認識DSP晶片的開機模式, 第二步了解編譯所產生的輸出檔案, 其內容格式的排列方式, 第三步才是如何燒錄到flash上面. 其實, stand alone只不過是DSP晶片開機模式的一種, 在"數位信號處理平台"書中的第二章2-2-3和2-3-4詳細提到模式的使用, 模式的設定...等等, 這對使用者將有很大的幫助. 其次, 一個輸出檔案的內容到底是什麼, 書中的11-1-1也介紹了COFF格式, 每個區塊是如何安排的. 最後, 將輸出的檔案燒錄到flash, 這部分也是有一些小細節需要留意的, 例如:為何需要一小段的開機程式放在flash的最前面, 在書中的13-2-5說明stand alone模式. 德州儀器為了方便使用者學習, 所以開發一個小工具flashburn, 當然有助於使用者快速上手, 如果使用者能熟悉上述的流程, 相信在業界開發產品會更加得心應手.
另外, 有讀者問到書中第十三章的實驗範例中, 曾提到更改CSL模組, 範例只提示從C6711改成C6416. 為了讓讀者更加清楚, 提供下列的步驟以饋讀者. 步驟如下:
1. 打開CCS開發環境, 載入project專案檔, 在Project選單下有個Build Options子選單.
2. 接著會彈跳出一個小視窗, 在視窗的category中有個Preprocessor裡面定義一個"CHIP_6711", 意思是說整個編譯過程採用CHIP_6711的定義, 相當於在header檔裡面定義 #define CHIP_6711 , 在Preprocessor裡面定義的好處就是不用擔心有些程式沒有include這個定義, 如果放在header檔案, 必須留意有沒有include "xxx.h", 否則可能出現編譯錯誤.
3. CHIP_6711的定義改成CHIP_6416之後, 再把專案檔所載入的Libraries (csl6711.lib, rts6700.lib)移除, 換成csl6416.lib, 以及 rts6400.lib. 至於, csl6416.lib是隨CCS套件安裝進來的, 可以在 \C6000\bios\lib 目錄下找到該檔案. rts6400.lib則放在\C6000\cgtools\lib 目錄下.
4. 上述的方式只不過將CSL模組換成6416, 至於各個週邊的控制還是依照C6416控制來修改, 並非只是改個CSL模組這麼簡單.
製作開機程式
根據開機模式技術手冊的敘述,如果C6416 DSP選擇
flash的開機設定,當電源接上之後EDMA會從外部記憶體CE-1的位置(∵DSK上的EMIF CE-1連接著快閃記憶體晶片),搬運一小段程式碼1 Kbytes到內部記憶體位址0h做為開機之用,然後CPU再從位址0h開始執行。在flash開機模式下的DSP具有這種開機的特性,所以在快閃記憶體的最前面1 Kbytes要保留給開機程式,如圖13-17的右半邊所示。因此一開機時,這一小段開機程式先被搬運到DSP內部記憶體,然後開始執行。接下來我們希望這段開機程式做些什麼事情呢?撇開開機程式不說,我們最終的希望是DSP能執行我們的程式碼,也就是我們設計的程式組譯後所產生的
COFF執行檔,通常稱這個執行檔為應用程式(application code)。在前面的章節曾介紹到COFF檔案格式,這種格式將每個程式區塊的長度與位址作詳盡的定義,如圖13-17的左半邊所示,以利於載入到DSK開發板所對應的位址。除了開機程式放在flash的前端,這段應用程式碼也需要存放在flash裡面,緊接在開機程式的後頭,如圖13-17的右半邊所示。從圖的右半邊觀察,開機程式放在64000000h起始的1 Kbytes,而程式碼區塊與資料區塊則從64000400h開始。當開機程式被載入DSP執行時,最重要的動作就是搬運程式碼區塊以及資料區塊到指定的位址上,該放到內部記憶體的部份就搬運到內部記憶體,該放到外部記憶體的部份就搬運到外部記憶體,我們通常稱這個動作為boot loader,也就開機程式的主要工作。搬運所有的區塊之後,開機程式便要直接跳到應用程式的進入點(entry point),這個點代表的是一個位址,位址的數值存放在64000400h 這個地方,由圖13-17可觀察出來。為了清楚明瞭開機後的每一個動作,底下列出開機程式的程式碼。
總而言之,開機程式主要的動作就是將應用程式的每個區塊複製到DSP的記憶體上面,應用程式除了包含各個區塊之外,還有一個程式的進入點也要燒在
Flash裡。當開機程式搬完所有區塊之後,要跳到應用程式的進入點,如此一來應用程式就能在DSK板子上面執行了。
應用程式的專案檔
要讓應用程式變成 standalone模式,必須修改一下專案檔,絕不能採用原先的專案檔,因為那只能適用在CCS環境下載入的格式。對於standalone的專案檔裡面除了加入應用程式檔案之外,還要加入開機程式,然後在一起編譯,如圖所示。區塊的規劃方面,開機區塊放在最前面的1 Kbytes,緊接後面才放應用程式的區塊。組譯之後產生的map檔如下,應用程式的進入點在00001560h,開機區塊放在最前面,程式碼區塊放在00000400h之後,資料區塊則放在00030000h之後。
OUTPUT FILE NAME: <./Debug/Tone.out>
ENTRY POINT SYMBOL: "_c_int00" address: 00001560
MEMORY CONFIGURATION
name origin length used attr fill
----- -------- --------- -------- ---- --------
BOOT 00000000 00000400 00000060 RWIX
IP_MEM 00000400 0002fc00 00001768 R X
ID_MEM 00030000 000d0000 000013fc RW
SDRAM 80000000 01000000 00000000 RW
|
燒入flash
為了方便開機程式搬運每個區塊,我們觀察在圖13-17的右半邊,開機區塊與應用程式區塊存放的方式似乎與COFF格式有些不一樣,要怎麼轉換COFF格式變成boot loader所想要的格式呢?在TI的工具中,有個轉換的軟體『hex6x.exe』可以容易地轉換COFF格式成16進制的檔案。該軟體放在\CCStudio\C6000\cgtools\bin\目錄下,此外本書也提供範例程式讓讀者瞭解其用法。
轉換 COFF檔案的第一步驟,把hex6x.exe、tone_hex.cmd(指令檔)、以及tone.out(COFF檔)放在同一個目錄下。在命令列的模式下,輸入“hex6x tone_hex.cmd”執行後,就可產生tone.hex檔案作為開機程式之用,其中tone_hex.cmd就是轉換的指令檔,底下列出tone_hex.cmd檔案的內容。
全站熱搜
留言列表