基于TMS320C6678 的多核DSP 上電加載技術(shù)
3 二級(jí)Loader 程序和FLASH燒寫(xiě)程序
二級(jí)Loader 是一段小代碼程序,其功能就是將FLASH 的根表數(shù)據(jù)如圖1 中從0×70000400 開(kāi)始按表2的格式保存的數(shù)據(jù)搬移到DSP的RAM中。該Loader比較簡(jiǎn)單,一般是一小段匯編代碼,代碼如下:
需要注意的是,由于DDR 沒(méi)有初始化,所以二級(jí)Loader不能加載DDR數(shù)據(jù),DDR只作數(shù)據(jù)存儲(chǔ)器用,確實(shí)要加載到DDR中,只能將DDR數(shù)據(jù)存在FLASH一指定段中,待Core0運(yùn)行開(kāi)始初始化DDR 后,將該數(shù)據(jù)讀到RAM中。
對(duì)于FLASH 的燒寫(xiě)程序,主要任務(wù)就是把多核的合成文件燒寫(xiě)到外部Emif16 NOR-FLASH 存儲(chǔ)器中。
由于TI大部分的Emif并口加載都是開(kāi)放式的,開(kāi)發(fā)者完全可以根據(jù)自己的思路和格式來(lái)產(chǎn)生和燒寫(xiě)映像文件,故燒寫(xiě)器TI公司是不提供的。其實(shí),一旦合成根表文件產(chǎn)生后,燒寫(xiě)器也顯得容易了。燒寫(xiě)器一般使用輸出legacy COFF格式的CCS工程即可。從圖1的加載過(guò)程看,要燒寫(xiě)的映像文件內(nèi)容包括二級(jí)加載器Loader的代碼和表2 的根表文件兩部分。二級(jí)Loader可以放到燒寫(xiě)器的開(kāi)頭main()函數(shù)之前,也可以放到Core0的應(yīng)用程序同樣位置,本研究采用前者,將二級(jí)Loader代碼映射到燒寫(xiě)工程中指定的存儲(chǔ)器。boot_load段。燒寫(xiě)器的編程流程如圖2所示。
4 輔助核的觸發(fā)
多核的加載,如果圖1 中僅僅只是進(jìn)入Core0 的_C_int00地址運(yùn)行而其他核還未激活,加載仍然是失敗的。輔助核的觸發(fā),必須兩個(gè)條件,一是將各核工程的入口地址_C_int00 寫(xiě)到各核的Boot Magic Address 處;二是向各核的核間中斷觸發(fā)寄存器IPCx(1
一旦輔助核被觸發(fā),在輔助核應(yīng)用程序中,須向各自核的Boot Magic Address 寫(xiě)入數(shù)據(jù)0xbabeface 替換各自的_C_int00.
5 結(jié)語(yǔ)
多核DSP 加載是一項(xiàng)比較復(fù)雜但又很重要的過(guò)程,也是多核技術(shù)的應(yīng)用難點(diǎn)之一,一個(gè)多核DSP開(kāi)發(fā)人員,如果要成功走向應(yīng)用,上電加載這一關(guān)是必須要過(guò)的。各核的應(yīng)用工程可以是輸出elf格式sysbios工程,也可以不是sysbios 工程。上面的多核Emif16NOR-FLASH 加載方法,在自研的C6678 圖像信號(hào)處理系統(tǒng)中已成功加載。
評(píng)論