基于DM642的FLASH分頁二級引導(dǎo)程序設(shè)計(jì)
0 引 言
TMS320DM642是TI公司推出的一款高性能的數(shù)字多媒體處理器,具有二級存儲器和高速緩沖器,以及超長指令字結(jié)構(gòu)。其運(yùn)算速度快、體積小、功耗低的優(yōu)點(diǎn)使得它在多媒體處理領(lǐng)域得到了廣泛的應(yīng)用。開發(fā)基于FLASH引導(dǎo)DM642的應(yīng)用系統(tǒng),在系統(tǒng)上電后,系統(tǒng)的自動(dòng)引導(dǎo)機(jī)制將FLASH中的應(yīng)用程序自動(dòng)加載到片內(nèi)RAM中去運(yùn)行。但是,由于自動(dòng)引導(dǎo)機(jī)制只能將片外FLAH中的1 KB代碼加載到RAM中。這就要求必須開發(fā)能夠?qū)?yīng)用程序全部加載的引導(dǎo)程序,即二級引導(dǎo)程序。
1 DM642的引導(dǎo)方式
DM642主要有三種引導(dǎo)方式:
(1)不加載。CPU直接開始執(zhí)行地址0處存儲器中的指令。如果該處存儲器是SDRAM,CPU會先掛起,直到SDRAM初始化完成。
(2)ROM加載。位于外部CE1空間的ROM中的1 KB程序首先通過DMA/EDMA被搬入地址0處。盡管加載過程是在芯片從復(fù)位信號被釋放以后才開始的,但是當(dāng)芯片仍處于復(fù)位時(shí),就開始準(zhǔn)備上述傳輸了。傳輸完成后,CPU退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。ROM中的程序存儲格式應(yīng)當(dāng)與芯片的端點(diǎn)模式一致。
(3)主機(jī)加載。核心CPU停留在復(fù)位狀態(tài),芯片其余部分保持正常。外部主機(jī)通過主機(jī)接口初始化CPU的存儲空間,包括片內(nèi)配置寄存器。所有初始化工作完成后,向接口控制寄存器的DSPINT寫“1”,結(jié)束引導(dǎo)。CPU退出復(fù)位狀態(tài)后,從地址0處開始執(zhí)行指令。
在基于DM642的應(yīng)用系統(tǒng)中,主要采用ROM加載的引導(dǎo)方式,通過外掛FLASH芯片,將應(yīng)用程序存儲在FLASH中。系統(tǒng)斷電后應(yīng)用程序依然存在,使得系統(tǒng)能夠脫機(jī)運(yùn)行。并且,借助于二級引導(dǎo)程序,基于DM642的大規(guī)模應(yīng)用程序的開發(fā)也將更加方便、靈活。
2 DM642與FLASH的連接
在本文中,DM642采用TI公司的TMS320DM642AGDK,F(xiàn)LASH采用AMD公司的AM29LV033C。
TMS320DM642的工作時(shí)鐘最高可以達(dá)到720 MHz,處理性能可達(dá)5 760 MIPS,其通過外部存儲器接口(EMIF)訪問片外存儲器。EMIF接口分成四個(gè)空間,即CE0~CE3。FLASH映射到CE1空間,上電時(shí)采用8位ROM加載方式。AM29LV033C是一款4 M×8 b,3 V單電源供電的非易失存儲器。
CE1子空間配置成8位異步靜態(tài)存儲器接口連接FLASH,由于DM642的外部地址總線只有20根,所以CE1的最大尋址范圍為1M×8 b。CE1只將前一半尋址空間分配給FLASH,后一半空間分配給了其他資源,即最大可尋址范圍是512K×8 b。為了尋址FLASH的所有空間,可對FLASH進(jìn)行分頁管理,將FLASH分成8頁,由位于CPLD中的頁地址寄存器通過PA19,PA20,PA21控制選頁。DM642與FLASH的連接示意圖如圖1所示。
用分頁技術(shù)尋址FLASH所有空間,F(xiàn)LASH的每一頁均映射到CE1的相同地址空間(0x90000000~0x9007FFFF)。在二級引導(dǎo)程序進(jìn)行引導(dǎo)的過程中,每當(dāng)FLASH當(dāng)前頁到達(dá)頁末時(shí),通過頁地址控制寄存器改變PA19,PA20,PA21的輸出電平來激活下一頁,完成引導(dǎo)過程。在本文中,以基于DM642的視頻采集、編碼和傳輸程序?yàn)槔?,詳?xì)說明DM642的二級引導(dǎo)程序的設(shè)計(jì)過程。
3 二級引導(dǎo)程序
3.1 引導(dǎo)過程
二級引導(dǎo)裝載程序被放置在FLASH的起始地址處,一旦DSP上電復(fù)位,二級引導(dǎo)程序就會通過DM642的自動(dòng)加載機(jī)制加載到RAM的地址0處,且此時(shí)CPU復(fù)位,開始執(zhí)行二級引導(dǎo)程序。二級引導(dǎo)程序的引導(dǎo)過程為:首先對EMIF寄存器進(jìn)行配置,包括全局控制寄存器、CEx空間控制寄存器、SDRAM控制寄存器、時(shí)序控制寄存器以及擴(kuò)展控制寄存器等。然后,獲取程序入口地址,接著按照數(shù)據(jù)塊的格式獲取每個(gè)塊的字節(jié)數(shù)和目標(biāo)地址,開始拷貝代碼。當(dāng)獲取的字節(jié)數(shù)為0時(shí),引導(dǎo)結(jié)束,CPU跳轉(zhuǎn)到C_int00處,建立C語言運(yùn)行環(huán)境,從main()處開始執(zhí)行。引導(dǎo)過程如圖2所示。
3.2 二級引導(dǎo)程序設(shè)計(jì)
根據(jù)二級引導(dǎo)程序的引導(dǎo)過程編寫二級引導(dǎo)程序的實(shí)現(xiàn)代碼,二級引導(dǎo)程序用匯編語言編寫。下面是各部分的具體實(shí)現(xiàn)。
(1)配置EMIF寄存器。定義EMIF寄存器基地址EMIF BASE=0x01800000,定義各個(gè)寄存器的配置值為:
(2)拷貝應(yīng)用程序代碼。定義引導(dǎo)表的地址為COPY_TABLE=0x90000400,實(shí)現(xiàn)代碼如下:
(3)判斷是否到達(dá)頁末的代碼。頁地址控制寄存器的地址為0x90080011。在代碼拷貝的過程中,時(shí)刻判斷加載指針是否指向下一頁的開始,如果是,則返回到0x9000400,如果不是,則繼續(xù)拷貝。實(shí)現(xiàn)代碼如下:
(4)執(zhí)行跳轉(zhuǎn)。代碼拷貝完成后,引導(dǎo)結(jié)束,執(zhí)行跳轉(zhuǎn)指令。代碼如下:
另外,必須編寫相應(yīng)的命令文件以配合引導(dǎo)程序完成引導(dǎo)過程。在本例中,將二級引導(dǎo)程序放在.boat-load段中,并在命令文件中添加如下代碼:
4 實(shí)驗(yàn)結(jié)果
將二級引導(dǎo)程序的匯編文件加入實(shí)際工程中,并且在命令文件中為二級引導(dǎo)程序申請相應(yīng)的內(nèi)存空間后,編譯、連接生成可執(zhí)行文件(.out)。然后,通過hex6x轉(zhuǎn)換工具將可執(zhí)行文件轉(zhuǎn)換為CCS可加載的數(shù)據(jù)文件。
建立CCS仿真環(huán)境與DM642開發(fā)板的連接,通過CCS仿真平臺,將數(shù)據(jù)文件燒寫到FLASH中。燒寫完成后,斷開開發(fā)板與CCS的連接,加電測試程序能夠正常運(yùn)行。
5 結(jié) 語
本文介紹了DM642的FLASH分頁引導(dǎo)的二級引導(dǎo)程序的設(shè)計(jì)方法,并給出部分實(shí)現(xiàn)代碼。實(shí)踐證明,該方法是可行的。這為基于DM642的實(shí)際應(yīng)用開發(fā)提供了一個(gè)途徑。