TMS320C6xDSP的FLASH引導方法研究與實現
發布時間:2006/7/11 0:00:00 訪問次數:297
關鍵詞:flash存儲器 上電引導 coff文件格式 dsp
flash存儲器是在eprom和eeprom的基礎上發展起來的一種非易失性存儲器,在掉電情況下仍能保證數據不丟失,并能夠在不離開電路板或據設備的情況下實施擦除和再編程操作。由于其具有結構簡單、維護便利、存取速度快、對環境適應能力強、抗振性能好等優點十分適合于嵌入式系統的設計和開發,并且已成為目前流行的數字信號處理系統的一個基本配置。
在許多dsp的應用中,系統上電后需要將用戶程序從flash存儲器引導到高速數據存儲器中運行。這就需要給用jtag接口調試通過的應用程序添加啟動代碼,將生成的目標文件進行格式轉換使其能在線燒寫,將轉換過的文件利用flash燒寫程序在線燒寫到flash中。
本文將介紹引導過程中數據搬移的幾種方法,包括qdma方式的數據搬移方法、cpu直接數據搬移方法以及基于軟件流水的數據搬移方法。經過比較測試,證明了qdma方式和基于軟件流水的數據搬移方法具有優越性。并且,根據coff文件格式,編寫了比ti公司的hex60更為直接的轉換工具,從而簡化了文件的轉換步驟。
1 應用程序的flash rom引導
當dsp的應用程序從flash rom引導時,目標板都有一個自動的引導程序。例如,對于tms320c6x1x系列,目標板的自動引導程序會在系統上電時將flash rom的前1k空間的內容復制以片內內存自0x00開始的地址空間,并從0x00地址處開始運行。因為需要搬到內存中運行的應用程序的向量表、初始化段等往往超過1k大小,為了能在系統上電時自動引導應用程序運行,就需要在引導的1k代碼中包括自定義的引導代碼,以將額外需要的初始化代碼段和數據段復制到內存中運行。
將flash rom的數據復制到iram(內部ram)中,有兩種方式:一種是直接存儲器訪問(dma),它是在沒有cpu參與的情況下完成映射存儲空間的數據搬移;另一種是利用cpu直接搬移數據。qdma是快速的dma,不需要cpu參與數據傳輸,只需根據要傳遞內容的信息設置qdma的相應寄存器即可。用cpu直接搬移數據也有兩種方式:一種是是不用流水方式,另一種是采用軟件流水方式。
在c6000的匯編中,不同類型指令有不同數目的執行節拍。執行節拍在數量上等于該指令在執行級所需要的時鐘周期。對于所用到的讀取指令ldw的存儲指令stw,分別完成從存儲到通用寄存器的數據搬移和從通用寄存器到存儲器的數據搬移。讀取指令ldw需要執行的步驟為:計算地址、地址送內存、訪問內存、數據送cpu、數據寫寄存器,即執行節拍數為5;而存儲指令stw,執行節拍數為3,需要執行的步驟為ldw的前三步。表1給出了軟件流水前后數據搬移間隔編排的比較表。
由表1可見,要將flash rom中的一個數據搬移到iram中,需要從flash rom中讀取該數據到通用寄存器(ldw),再從通用寄存器中將其讀到iram(指令stw)。在軟件流水優化以前,需要至少8個指令周期。采用軟件流水優化以后,根據指令的特點,第0到第4這5個指令周期可連續續5個數到通用寄存器,從第5到第9這5個指令周期再順序地將讀入通用寄存器的上述5個數讀出到iram。于是,在10個指令周期內,可完成5個數據的搬移,從而使搬移周期下降到了兩個指令周期,提高了cpu的運行效率。
2 qdma方式和cpu直接數據搬移方式的比較
由于前面已比較了cpu直接數據搬移的兩種方式,下面著重對qdma方式和基于流水的cpu直接數據搬移方式進行比較測試。這次測試是在tms320c6711 dsp上進行的,采用的flash型號為sst29le010。首先根據待燒寫應用程序的.map文件找出需搬移的初始化代碼段的大小,其中.text段為0x8c40 byte,.const段為0byte,.cinit段為0x24c byte,共需搬移0x23a3個32bit字。然后利用qdma方式和cpu流水方式
關鍵詞:flash存儲器 上電引導 coff文件格式 dsp
flash存儲器是在eprom和eeprom的基礎上發展起來的一種非易失性存儲器,在掉電情況下仍能保證數據不丟失,并能夠在不離開電路板或據設備的情況下實施擦除和再編程操作。由于其具有結構簡單、維護便利、存取速度快、對環境適應能力強、抗振性能好等優點十分適合于嵌入式系統的設計和開發,并且已成為目前流行的數字信號處理系統的一個基本配置。
在許多dsp的應用中,系統上電后需要將用戶程序從flash存儲器引導到高速數據存儲器中運行。這就需要給用jtag接口調試通過的應用程序添加啟動代碼,將生成的目標文件進行格式轉換使其能在線燒寫,將轉換過的文件利用flash燒寫程序在線燒寫到flash中。
本文將介紹引導過程中數據搬移的幾種方法,包括qdma方式的數據搬移方法、cpu直接數據搬移方法以及基于軟件流水的數據搬移方法。經過比較測試,證明了qdma方式和基于軟件流水的數據搬移方法具有優越性。并且,根據coff文件格式,編寫了比ti公司的hex60更為直接的轉換工具,從而簡化了文件的轉換步驟。
1 應用程序的flash rom引導
當dsp的應用程序從flash rom引導時,目標板都有一個自動的引導程序。例如,對于tms320c6x1x系列,目標板的自動引導程序會在系統上電時將flash rom的前1k空間的內容復制以片內內存自0x00開始的地址空間,并從0x00地址處開始運行。因為需要搬到內存中運行的應用程序的向量表、初始化段等往往超過1k大小,為了能在系統上電時自動引導應用程序運行,就需要在引導的1k代碼中包括自定義的引導代碼,以將額外需要的初始化代碼段和數據段復制到內存中運行。
將flash rom的數據復制到iram(內部ram)中,有兩種方式:一種是直接存儲器訪問(dma),它是在沒有cpu參與的情況下完成映射存儲空間的數據搬移;另一種是利用cpu直接搬移數據。qdma是快速的dma,不需要cpu參與數據傳輸,只需根據要傳遞內容的信息設置qdma的相應寄存器即可。用cpu直接搬移數據也有兩種方式:一種是是不用流水方式,另一種是采用軟件流水方式。
在c6000的匯編中,不同類型指令有不同數目的執行節拍。執行節拍在數量上等于該指令在執行級所需要的時鐘周期。對于所用到的讀取指令ldw的存儲指令stw,分別完成從存儲到通用寄存器的數據搬移和從通用寄存器到存儲器的數據搬移。讀取指令ldw需要執行的步驟為:計算地址、地址送內存、訪問內存、數據送cpu、數據寫寄存器,即執行節拍數為5;而存儲指令stw,執行節拍數為3,需要執行的步驟為ldw的前三步。表1給出了軟件流水前后數據搬移間隔編排的比較表。
由表1可見,要將flash rom中的一個數據搬移到iram中,需要從flash rom中讀取該數據到通用寄存器(ldw),再從通用寄存器中將其讀到iram(指令stw)。在軟件流水優化以前,需要至少8個指令周期。采用軟件流水優化以后,根據指令的特點,第0到第4這5個指令周期可連續續5個數到通用寄存器,從第5到第9這5個指令周期再順序地將讀入通用寄存器的上述5個數讀出到iram。于是,在10個指令周期內,可完成5個數據的搬移,從而使搬移周期下降到了兩個指令周期,提高了cpu的運行效率。
2 qdma方式和cpu直接數據搬移方式的比較
由于前面已比較了cpu直接數據搬移的兩種方式,下面著重對qdma方式和基于流水的cpu直接數據搬移方式進行比較測試。這次測試是在tms320c6711 dsp上進行的,采用的flash型號為sst29le010。首先根據待燒寫應用程序的.map文件找出需搬移的初始化代碼段的大小,其中.text段為0x8c40 byte,.const段為0byte,.cinit段為0x24c byte,共需搬移0x23a3個32bit字。然后利用qdma方式和cpu流水方式
上一篇:讓單片機運行速度更快一些