TMS320C6701 DSP自動(dòng)加載研究
下面是用DSP/BIOS配置工具在DSP內存空間中劃分好的各段開(kāi)始地址及長(cháng)度,其中EDFLASH就是外部FLASH上用于二次加載的地址空間。代碼則存放在FLASH的首地址,也就是0x1400000。
1.2 轉換文件格式,得到燒寫(xiě)文件(.h)
程序編譯好后輸出的是COFF格式的.out文件,這種文件無(wú)法直接寫(xiě)進(jìn)FLASH,所以只能將其轉換為其他FLASH支持的格式。一般來(lái)說(shuō),對FLASH燒寫(xiě)的傳統方法是通過(guò)CCS自帶的格式轉換器hex6x把.out文件轉換為FLASH可識別的十六進(jìn)制格式(如Motorola-S、ASCII-Hex等),再用專(zhuān)門(mén)的編程器將其燒寫(xiě)到FLASH芯片中保存。該方法的實(shí)現需要使用專(zhuān)門(mén)的FLASH燒寫(xiě)器,實(shí)際應用中較為不便,本工程中,在CCS環(huán)境下,通過(guò)JTAG口,完全由DSP控制對FLASH進(jìn)行燒寫(xiě)和擦除,實(shí)現了對外部FLASH的在線(xiàn)編程。
由于燒寫(xiě)是在CCS程序中實(shí)現,所以首先要把.out格式的目標文件轉換為工程中可包含的.h文件。根據前面提到的方法,需要把工作程序編譯后得到的代碼段和數據段分別寫(xiě)進(jìn)FLASH中的不同地址,這就需要將COFF文件中的代碼段和數據段分別提取出來(lái)。具體做法是:使用CCS中“FiIe-Data-Save分別把代碼段和數據段保存為dat文件(code.dat和data.dat),代碼段和數據段的具體起始地址及長(cháng)度可以參考程序連接后自動(dòng)生成的連接過(guò)程結果說(shuō)明文件(后綴為.map,其中記錄了段的各種詳細信息,從中還可以知道各段的地址分配是否正確)。雖然保存下來(lái)的代碼段和數據段都是.dat格式,但其內容已經(jīng)是我們所需要的DSP工作需要的底層機器碼,所以只需要將其作為一個(gè)數組的內容,再給數組加上合適的類(lèi)型定義,就可以直接將其格式改為能在CCS工程中直接調用的.h文件(code.h和data.h)。這樣也就巧妙地解決了格式轉換問(wèn)題。
1.3 燒寫(xiě)FLASH
有了.h格式的燒寫(xiě)文件,下面就只需要再編寫(xiě)一個(gè)用于擦除和燒寫(xiě)FLASFI的DSP工作程序,由DSP控制并通過(guò)JTAG線(xiàn)操作FLASH芯片,燒寫(xiě)和擦除時(shí)要按照FLASH芯片手冊中的要求先向指定地址寫(xiě)入指定關(guān)鍵字。注意代碼和數據應分別寫(xiě)入FLASH中相應的存儲地址。以上三步完成后,DSP就可以在重新加電時(shí)實(shí)現自動(dòng)引導:首先從地址0x1400000處搬移64 KB初始化程序到片內運行,然后再從地址0x1410000處加載剩余的代碼和數據。
2 結 語(yǔ)
實(shí)際工程中的應用證明了上述方法可以使TMS320C6701在脫離上位機的情況下實(shí)現上電后自動(dòng)加載運行,并且穩定可靠,操作方便,使用JTAG線(xiàn)和仿真器就可完成所有操作。該方法只要對一些存儲空間的配置稍作修改即可用于C6000系列其他DSP芯片的自動(dòng)加載。另外,本文思路也可推廣到其他DSP芯片的自動(dòng)加載設計中。
評論