基于TMS320C6713及AM29LV800B的上電自舉設(shè)計
TMS320C6713(以下簡稱C6713)是TI公司推出的高性能浮點運算DSP,采用超常指令字(VLIW)結(jié)構(gòu)。時鐘速率為300 MHz、225 MHz、200 MHz、167 MHz。EMIF作為C6713與外部存儲器之間的接口,可支持與各種外部器件無縫(即可尋址空間已分配完畢,且地址一致連續(xù))連接。EMIF存儲器映射由4個(CE0~CE3)空間組成,這4個空間彼此獨立,實現(xiàn)不同訪問控制。C6713 DSP包含從Ox00000000地址開始的256 KB內(nèi)部RAM,但其內(nèi)部無非易失性存儲器,需要外擴F1ash或ROM等非易失性存儲器。
選用AMD公司的AM29LV800B Flash,具有1 Mx8 bit/512 Kxl6 bit的存儲空間,16位數(shù)據(jù)總線。支持程序?qū)憽⒉脸蛻覓?,支持Flash數(shù)據(jù)集成,兼容普通F1ash接口F1ash In—terface(CEl)。
2 上電自舉硬件設(shè)計
圖1為C6713與AM29LV800B的硬件原理框圖。
2.1 硬件連接說明
圖1中C6713和AM29LV800B數(shù)據(jù)總線、地址總線和控制信號均經(jīng)過33Ω排阻平波后相連接,這樣可有效減小總線上的信號波動,提高系統(tǒng)抗干擾能力。
Flash可提供硬件和軟件2種方法判斷其工作狀態(tài),以確定數(shù)據(jù)寫入或擦除操作是否完成。其軟件方法是利用從F1ash讀取的數(shù)據(jù)判斷其狀態(tài),讀取數(shù)據(jù)中的主要判斷位為SR7~SRl,它們之間的相互組合提供了軟件判斷工作狀態(tài)的方法。硬件判斷方法主要是利用F1ash的外部引腳輸出信號在命令序列的最后一個寫脈沖的上升沿后有效。當(dāng)該引腳輸出低電平時,表示Flash正在編程或擦除,而當(dāng)該引腳輸出高電平時,表示編程或擦除已完成。將此引腳與C6713 DSP的ARDY引腳相連,即可實現(xiàn)編程和擦除完成的硬件自動判斷。
由于Flash是從CEl空間加載程序,因此DSP的CEI與Flash的片選CE相連,這種連接可將Flash的內(nèi)部地址映射到DSP地址0x90000000上。
2.2 引導(dǎo)模式設(shè)定
如圖1和表1所示HD3和HD4(HD[4:3])可通過跳線與3.3 V和地連接。當(dāng)拔去跳線帽時,HD[4:3]引腳輸入電平
“10”,引導(dǎo)模式設(shè)置為16 bit異步外部ROM引導(dǎo),即系統(tǒng)中使用Flash引導(dǎo)。當(dāng)插上跳線帽時,HD[4:3]引腳輸入電平“00”,引導(dǎo)模式設(shè)置為32 bit主機口/仿真器引導(dǎo)
3 上電自舉過程
當(dāng)系統(tǒng)上電時,由引導(dǎo)程序將應(yīng)用程序從外部存儲器引導(dǎo)到DSP應(yīng)用板上的高速存儲器或DSP內(nèi)部RAM中運行,該過程就是上電自舉過程。由于Flash具有電信號刪除功能,且刪除速度快,集成度高,已成為此類外部存儲器的首選。
和以往TI公司的DSP引導(dǎo)方式不同,TMS320C6000系列DSP采用一種新的引導(dǎo)方法。對于C6713,若HD[4:3]引腳輸入電平為“10”,當(dāng)上電或系統(tǒng)復(fù)位時,DSP會自動將位于Flash地址空間(0x90000000~0x9FFFFFFF)開頭的1 KB代碼傳輸?shù)絉AM存儲空間“0”地址處,這就是一次引導(dǎo)。它的數(shù)據(jù)傳輸采用默認(rèn)時序,由DSP中的EDMA通道以單幀形式自動傳輸。傳輸完成后,程序從地址“O”開始運行。這些均由DSP自動完成。很明顯,一次引導(dǎo)的代碼并不能滿足絕大多數(shù)編程者對代碼長度的要求,因此就需要二次引導(dǎo)過程。二次引導(dǎo)是將DSP一次引導(dǎo)的l KB代碼編寫成一個搬移程序,將用戶的主程序搬移到高速RAM中,并且搬移完成后自動跳轉(zhuǎn)至主程序入口處運行主程序。綜上所述,C6713的上電自舉過程分為一次引導(dǎo)和二次引導(dǎo),其中,一次引導(dǎo)由DSP自動完成,而二次引導(dǎo)則由用戶通過編程完成。
4 上電自舉及燒寫軟件設(shè)計
圖2為整個上電自舉過程所需程序和各程序的搬移過程。首先將編譯連接好的引導(dǎo)程序、主程序和燒寫程序按照先后順序由仿真器下載至DSP內(nèi)部RAM,再執(zhí)行燒寫程序,將引導(dǎo)程序和主程序燒寫到Flash,然后斷開仿真器,關(guān)閉CCS.重新上電或復(fù)位DSP板,DSP自動將Ox90000000~0x900003ff(1 KB)地址的數(shù)據(jù)全部搬移到I)SP內(nèi)部“0”地址開始的l KB空間中。搬移結(jié)束后,自動執(zhí)行引導(dǎo)程序進行二次引導(dǎo),將主程序和中斷向量表搬移到內(nèi)部RAM中,從而結(jié)束整個上電自舉過程。
4.1 引導(dǎo)程序
以下為引導(dǎo)程序部分代碼:
[!--empirenews.page--] A行利用匯編偽指令“.sect”為引導(dǎo)程序定義了一個段,通過鏈接命令文件將該段程序準(zhǔn)確定位在指定的地址空間。B行引用_c_int00子程序,是由系統(tǒng)自動生成的復(fù)位中斷服務(wù)子程序,利用該子程序使程序在執(zhí)行完引導(dǎo)程序后跳轉(zhuǎn)到主程序入口地址執(zhí)行主程序。
4.2 C6713對Flash的操作
對Flash的操作有復(fù)位、數(shù)據(jù)讀、擦除、燒寫。Flash的復(fù)位操作相對簡單,只要向Flash任意地址單元寫入數(shù)據(jù)“0xF0”便可實現(xiàn)其復(fù)位操作。數(shù)據(jù)讀與一般的RAM存儲器相同,但Flash的擦除和燒寫操作卻有其自身特點。
4.2.1 Flash的擦除
由于Flash的燒寫操作只能將其內(nèi)部存儲單元由“1”改寫為“0”,反之不行,所以必須先將Flash內(nèi)部存儲單元擦除后才能寫操作。也就是說,擦除操作是將Flash內(nèi)部存儲單元全部寫為“1”。
由Flash擦除命令字看出,F(xiàn)lash的擦除分為片擦除和扇區(qū)擦除,采用片擦除,需要向2個地址寫入不同數(shù),從而擦除整個器件。其擦除子程序代碼如下:
擦除操作完成后,可通過CCS查看0x90000000開始的單元,如均改寫成“0xFFFFFFFFF”則表明擦除成功。
4.2.2 Flash的燒寫
通常燒寫有兩種方式,一種是在燒寫器上對器件燒寫后再插到PCB板上,待調(diào)試完成再將其焊接固定。但目前多采用貼片式元器件,所以方案采用第二種燒寫方法,即在線燒寫法。利用仿真器通過JTAG仿真口按照一定的時序和要求對Flash燒寫。燒寫部分程序代碼如下:
在A行中,0x555左移1位后加到Flash的起始地址,這是因為寫Flash要求向0x555地址寫入數(shù)據(jù)“Oxaa”,該地址為Hash的地址,即要求Flash地址線AO~A18上出現(xiàn)0x555數(shù)據(jù),由于DSP的第l位地址線EA2與Flash的AO相連,32位DSP對指向“short”型數(shù)據(jù)的指針操作時會自動將地址左移1位,以滿足對偶地址操作的要求,所以應(yīng)像A、B行中手動將0x555,0x2aa地址左移l位,再加上DSP自動左移1位,就使地址0x555的第1位出現(xiàn)在EA2上,即AO~A18得到數(shù)據(jù)0x555,而DSP實際輸出地址為Ox90000AAA。D行的操作是將32位DSP內(nèi)部RAM中的n個16位二進制數(shù)搬移到16位Flash中,指針變量“flash_addr,source”均為指向“short”型數(shù)據(jù)的指針變量(16位),所以Flash會使用全部的16位數(shù)據(jù)線,而DSP只使用32位數(shù)據(jù)線的低16位用于傳輸數(shù)據(jù)。
4.3 鏈接命令文件(*.cmd文件)
鏈接命令文件是DSP開發(fā)過程中生成可執(zhí)行文件(.out)必不可少的一個文件。其作用是對DSP固有段和由用戶自定義的段在使用仿真器load程序時定位,將各段程序分配到存儲器的指定地址。這樣用戶就可以知道引導(dǎo)程序、中斷向量表和主程序在DSP內(nèi)存空間的準(zhǔn)確地址。
由于待燒寫的引導(dǎo)程序、中斷向量表和主程序需定位在DSP內(nèi)存Ox00000000~0x00003FFF的地址空間中。燒寫程序需定位在Ox00004000~0x000141FF的地址空間。鏈接命令文件部分程序代碼如下:
5 結(jié)語
以C6713為例,介紹了DSP的上電自舉過程及實現(xiàn)方法,詳細(xì)說明了其中關(guān)鍵問題及技術(shù)難點,并應(yīng)用程序?qū)嵗涂驁D加深讀者的理解。對于讀者開發(fā)TI公司的其他產(chǎn)品也有一定的借鑒作用,特別對于從事DSP設(shè)計的入門級人員會有很大的幫助。所涉及的內(nèi)容均經(jīng)過實踐證明,運行穩(wěn)定可靠。