本文將公司常用的DSP系列芯片作為主要描述對象,內(nèi)容涉及其工程文件的簡介和啟動過程的簡單梳理,文中的內(nèi)容多來自工作實踐和自己的理解,以具體的工程應(yīng)用為主,意在與大家進(jìn)行技術(shù)交流,同時作為簡單的技術(shù)積累,由于內(nèi)容主觀,不免有錯誤的理解和描述,誤導(dǎo)之處還請諒解!并期待大家的提點!首先本文是基于DSP芯片—TMS320F2812進(jìn)行的相關(guān)技術(shù)整理,下文將要提及的地址信息全部是DSP2812默認(rèn)的片內(nèi)地址,可根據(jù)手冊查詢,對于其他系列的芯片而言,文中相關(guān)內(nèi)容僅具備對比和參考價值,特此說明。
對于DSP2812與其他主控芯片相似,其運行模式主要分為分為帶有仿真器的調(diào)試仿真模式和脫離仿真器的獨立運行模式,對于DSP來說兩者的區(qū)別在于程序是分配在RAM中還是分配在FLASH中運行。以下主要討論的是實現(xiàn)脫離仿真器上電自動運行的模式,即將程序和數(shù)據(jù)分配到片內(nèi)FLASH中完成獨立運行,仿真調(diào)試模式下文作為對比也簡單說明僅作參考。
要建立一個完整的DSP程序工程包含需要幾種必要的文件類型,其中涉及DSP啟動過程的主要是CMD文件和asm文件,他們分別用于片內(nèi)地址分配和地址跳轉(zhuǎn),共同引導(dǎo)了DSP從啟動到運行的過程。
由于目前本人所應(yīng)用的DSP都未涉及連接片外存儲設(shè)備,因此本文中僅介紹DSP2812從片內(nèi)flash啟動的引導(dǎo)過程。首先在芯片上電后,默認(rèn)狀態(tài)下會到固定片內(nèi)地址提取已經(jīng)固化好的中斷向量表,然后根據(jù)已固化好的地址指針,再提取程序中可能用到的函數(shù)信息,隨即進(jìn)入片內(nèi)flash的啟動模式,該啟動模式下默認(rèn)跳轉(zhuǎn)到0x3F7FF6處(DSP2812),該地址是片內(nèi)flash的一部分,根據(jù)以上信息,就需要在CMD文件中分配flash模式啟動區(qū)域如下:
MEMORY
{
……
BEGIN : origin = 0x3F7FF6, length = 0x000002
PASSWDS : origin = 0x3F7FF8, length = 0x000008
……
}
該區(qū)域命暫時名為BEGIN,截止到目前DSP默認(rèn)的啟動流程進(jìn)入并停止在該區(qū)域中,用戶需要繼續(xù)添加程序代碼,其目的是將啟動引入自己編寫的C環(huán)境程序中,最終實現(xiàn)在主程序中運行,此處的程序代碼需要寫在asm文件中,同時在asm文件中用戶自定義的代碼名稱也要在CMD文件中映射到BEGIN的地址上,使代碼在該地址中運行,完成啟動引導(dǎo)。需要注意的是根據(jù)DSP2812的片內(nèi)信息,BEGIN區(qū)域距離默認(rèn)的密碼區(qū)僅有2個字的距離,只能放一個跳轉(zhuǎn)指令,實現(xiàn)跳轉(zhuǎn)。
經(jīng)過上文的簡單說明,不難看出含有跳轉(zhuǎn)代碼的asm文件是實現(xiàn)DSP啟動引導(dǎo)的重要組成部分,將啟動引入了C程序的入口,實現(xiàn)了DSP從啟動到運行C程序的過程。如果工程文件下沒有加載正確的asm文件或者類似的跳轉(zhuǎn)指令,DSP將進(jìn)入默認(rèn)啟動區(qū) 0x3F7FF6,失去后續(xù)指令而跳不出來,可能的現(xiàn)象是程序能夠正確編譯和燒寫,但是上電后DSP無法運行編寫的程序,使用戶陷入誤區(qū),找不到程序不運行的真正原因。
因此對于一個正確的能夠燒寫的DSP工程文件來說,文中的CMD文件和asm文件都是必不可少的,在以上條件下如果工程編譯無誤,將生成正確的.out燒寫文件,該文件將分別記錄CMD的地址信息和asm中的跳轉(zhuǎn)信息,正確燒寫后才能夠確保DSP獨立運行。
到此基本能夠?qū)崿F(xiàn)做一個項目的最終目的,核心芯片DSP能夠脫離仿真器獨立運行,而帶有仿真器的調(diào)試模式作為程序測試中的一項重要手段,其運行模式與上文中的獨立運行模式相比有相似之處也有明顯的區(qū)別,此處淺談兩者的異同,以更好的理解獨立模式下程序的啟動與運行。
首先兩者都能夠?qū)崿F(xiàn)芯片上電后進(jìn)入C程序運行的過程,區(qū)別在于兩者CMD文件的地址空間分配不同,仿真模式的程序段全部來自芯片內(nèi)部的RAM區(qū)域掉電消失,同時需要仿真器,其程序RAM地址分配如下(DSP2812RAM):
MEMORY
{
……
PRAMH0 : origin = 0x3f8000, length = 0x002000
……
}
所以調(diào)試狀態(tài)下CMD文件中的映射也全部來自芯片的RAM區(qū)域,因此該模式下無需地址跳轉(zhuǎn)即能夠進(jìn)入C程序中,從而該模式下不需要asm文件指引啟動過程,調(diào)試時需要將該文件移除,只分配正確的RAM空間即可實現(xiàn)調(diào)試。
以上僅僅是個人在實踐過程中對于DSP啟動過程的籠統(tǒng)理解,難免偏頗,同時敘述也比較簡單、粗糙,但仍然希望能與大家分享和討論,以增進(jìn)彼此對于軟硬件方面理解。當(dāng)然其中的錯誤也期待大家的善意批評和指點,最后希望以上的內(nèi)容能夠帶給大家些許幫助或啟發(fā),以達(dá)到技術(shù)交流的目的,彼此都能夠有所收獲,不勝感激!