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