【摘要】本文介紹了TMS320C54x系列DSP的存儲結構,詳細討論了存儲器和存儲空間的映射關系,分析了存儲空間的配置方法,并結合實例給出了C5410型DSP的存儲器映射關系和鏈接配置文件。
【關鍵詞】DSP;存儲器;存儲空間;映射;鏈接配置文件
1.引言
根據應用設計的需求,對DSP可用存儲空間的分析和配置是開發(fā)過程的第一步,也是設計者需要考慮的關鍵問題,因此,存儲空間分配的好壞不僅關系到開發(fā)設計的成敗,而且反映了一個DSP程序員的水平和經驗。對于DSP,我們總是遇到這樣的兩個名詞,存儲器(RAM、ROM、EPROM和FLASH等)和存儲空間(程序存儲空間、數據存儲空間和I/O存儲空間)。而這兩個名詞又總是阻礙著DSP設計者前進的腳步,使之望而卻步。為此,本文首先探討存儲器和存儲空間的映射關系的問題。同時,由于DSP的廣泛應用,程序代碼不斷地增大,這就涉及到本文要探討地第二個問題,如何合理地配置DSP的存儲空間,使之更好地利用DSP地內部資源,并以C5410型DSP為例,給出了存儲空間配置的CMD文件。
2.C54x系列DSP的存儲結構
C54x系列DSP一般有192K字的存儲空間,分為三個相互獨立可選擇的空間:64K字的程序存儲空間、64K字的數據存儲空間和64K字的I/O存儲空間[1]。其中程序存儲空間存放待執(zhí)行的指令和執(zhí)行過程中所需要的系數表(數學用表,常數),可使用片內或片外的RAM、ROM或FLASH等來構成;數據存儲空間存放指令執(zhí)行過程中產生的數據,可使用片內或片外的RAM和ROM來構成;I/O存儲空間提供與外部存儲器映射的接口,也可以作為外部數據存儲空間使用。
C54x系列DSP片內都有隨機存儲器(RAM)和只讀存儲器(ROM),而RAM又分為兩種類型:DARAM(雙訪問RAM,每個機器周期可以訪問2次)和SARAM(單訪問RAM,每個機器周期只能訪問1次)。
3.存儲器和存儲空間的映射關系
3.1 片內存儲器映射
針對存儲器和存儲空間兩個不同的概念,本節(jié)詳細分析C54x系列DSP的片內存儲器的映射關系。
C54x通過處理器工作方式的狀態(tài)寄存器(PMST)中的3個狀態(tài)位,來選擇片內存儲器作為程序空間或數據空間。這3個狀態(tài)位是:
(1)MP/MC位,決定是否使能片內ROM。MP/MC=0,片內ROM使能,映射到程序空間;MP/MC=1,則片內ROM不使能,此時將不會用到DSP的自引導程序。系統(tǒng)僅在復位時采樣一次MP/MC引腳,并將引腳值傳遞給MP/MC位,而復位后便可通過軟件設置MP/MC位來禁止或使能片上ROM。在使用仿真器開發(fā)程序時,需要將MP/MC置為1,此時DSP處于微處理器方式,應用程序通過TI公司的DSP開發(fā)軟件CCS(Code Composer Studio)在線寫入程序存儲區(qū);在DSP脫機運行時,需要將MP/MC清0,此時DSP處于微計算機方式,DSP在上電或復位后,其片內ROM中的自舉加載程序將會首先自動運行,將用戶程序代碼移入程序空間后,再將控制權交給用戶代碼[3]。
(2)OVLY位。OVLY=1,則片內RAM映射到程序和數據空間,程序在RAM中運行;OVLY=0,則片內RAM只映射到數據存儲空間,此時可用一個外部FLASH映射到程序空間,程序可在其中運行。顯然這種方式不如程序在片內RAM中執(zhí)行速度快。
(3)DROM位。對于不同型號的DSP,DROM代表不同的意義。C542、C543、C548片內只有2K字ROM,如前所述這2K字的內容是由TI公司定義的,不可修改,也不能用作用戶程序區(qū)和數據區(qū),因此DROM位對此類器件并無影響。對C541、C545、C546、C549、C5402而言,DROM位決定片內的ROM是否部分映射到數據空間:DROM=1,部分片內ROM映射到數據空間;DROM=0,片內ROM不映射到數據空間。而對C5410、C5416、C5420(無片內ROM)而言,片內ROM并不映射到數據空間,此時DROM位決定數據空間的高32K字是由片內的RAM構成還是由片外的RAM構成:DROM=1,片內排列的第二組32K字(片內RAM的排列是先排DARAM,再排SARAM,32K為一組。
3.2 程序存儲空間的分頁擴展
程序設計者可根據片內存儲器的大小和不同的應用需求,相應地配置這3個位,使系統(tǒng)的存儲空間滿足應用要求。但是由于程序代碼的不斷增長,64K的程序空間已不能滿足需要,所以C54x系列DSP從C548開始,地址線增加到了23根(C5402為20根,C5420為18根),具有8M字的尋址空間(引入了頁的概念,每頁64K字),為此還增加了一個額外的存儲器映像寄存器程序計數器擴展寄存器XPC(當前程序空間地址的高7位),以及6條尋址擴展程序空間的指令。
4.存儲空間的配置
4.1 簡單分析
在這里,我們以TMS320C5410為例介紹如何配置存儲空間。C5410片內有16K字ROM,8K字DARAM和56K字SARAM。由于片內ROM的不易修改性和RAM的掉電易失性,因此外加一個64K字的FLASH存儲器(映射到程序空間),用來存儲用戶程序和引導程序。自己編寫上電引導程序,并和用戶程序代碼一起燒寫到位于程序空間的FLASH中
4.2 CMD文件的編寫
匯編器和鏈接器產生的目標文件采用COFF(Common Object File Format)公共目標文件格式,代碼和數據塊是按段(Section)來組織和存儲的,便于模塊化編程。鏈接器的作用是將由匯編器產生的OBJ文件(目標文件)作為輸入塊,將相應的段結合在一起產生可執(zhí)行的輸出模塊,并將輸出的段分配到存儲器中的指定地址[5]。完成這個任務的是CMD文件(鏈接器配置文件或鏈接命令文件),簡稱為命令文件。其中關鍵是MEMORY和SECTIONS兩個偽指令的使用。
CMD文件由3部分組成:
①輸入/輸出文件定義:.obj文件:鏈接器要鏈接的目標文件;.lib文件:鏈接器要鏈接的庫文件;.map文件:鏈接器生成的存儲器映射文件;.out文件:鏈接器生成的可執(zhí)行代碼文件;
②MEMORY命令:配置目標存儲器,建立模型;
③SECTIONS命令:根據這個模型來安排各個段的存放位置。
按照上節(jié)例子,程序中需要定義了四個基本的段,段名分別取為“.text”、“.vectors”、“.boot”和“.table”,它們的內容分別對應于用戶程序、中斷向量表、上電引導程序和引導表。燒寫程序完成把四個段的內容燒寫到FLASH存儲器中。另外,還有“.bss”、“.data”和“.stack”,它們的內容分別對應于未初始化的變量、初始化的數據和堆棧段。本例中,假設“.text”段的長度位1000H,它被燒寫到FLASH中從08000H開始的存儲單元,上電后將被加載到程序空間中從2000H開始的存儲單元中。
5.結束語
隨著DSP應用領域的不斷拓廣,程序代碼的不斷增加,使得存儲空間的配置顯得越來越重要。根據開發(fā)需求選擇合適的DSP芯片,并加以擴展的片外存儲器,正確地劃分程序和數據空間中各段的大小,合理地配置存儲空間,將使空間利用率大大提高。
參考文獻
[1]支長義,程志平,陳書立.等.DSP原理及開發(fā)應用[M].北京航空航天大學出版社,2010.8.
[2]胡海鵬,魏豐.TMS320C54X系列DSP存儲空間的配置方法研究[J].電測與儀表,2012年第6期.