TMS320C54x DSP在線燒寫FLASH存儲(chǔ)器并實(shí)現(xiàn)自舉引導(dǎo)的方法
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:通過一個(gè)完整的實(shí)例,詳細(xì)闡述了tms320c54x系列dsp芯片在線燒寫flash存儲(chǔ)器。并實(shí)現(xiàn)自舉引導(dǎo)的方法。給出了硬件連接方案和完整的c語(yǔ)言燒寫程序。 關(guān)鍵詞:tms320c54x flash 燒寫 自舉引導(dǎo)在dsp系統(tǒng)中通常貼片式flash存儲(chǔ)器保存程序,并且在上電或復(fù)位時(shí)再將存儲(chǔ)在flash中的程序搬移到dsp片內(nèi)或者片外的ram中全速運(yùn)行。這個(gè)“程序搬移”的過程叫做自舉加載。本文以tms320c5416 dsp對(duì)mbm29lv400bc存儲(chǔ)器的操作為例,詳細(xì)闡述了在線燒寫flash并實(shí)現(xiàn)自舉加載的方法。該方法適合于大多數(shù)c54x系列dsp對(duì)符合jedec標(biāo)準(zhǔn)的flash的操作。為便于讀者使用,本文的程序全部采用c語(yǔ)言編寫。
1 tms320c5416與mbm29lv400bc的硬件接口mbm29lv400bc與tms320c5416的接口很方便,前者只需作為后者的外部數(shù)據(jù)存儲(chǔ)器與其進(jìn)行連接,而中間的邏輯電路采用cpld實(shí)現(xiàn)即可。這里使用16位數(shù)據(jù)寬度,所以byte引腳通過一個(gè)上拉電阻接到3.3v電源。連接電路原理如圖1所示。相應(yīng)的vhdl語(yǔ)言程序?yàn)椋篺lash_ce<=dsp_ds;flash_oe<=(not dsp_r_w)or dsp_mstrb;flash_we<=dsp_r_w or dsp_mstrb;2 tms320c5416自舉引導(dǎo)過程當(dāng)mp/mc=0時(shí),tms320c5416被置于微計(jì)算機(jī)模式。上電或復(fù)位時(shí),程序指針指向片內(nèi)rom區(qū)的ff80h單元,該單元放置了一條跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到f800h單元。而f800h就是自舉加載器(bootloader)引導(dǎo)程序的起始單元。bootloader的任務(wù)就是將存放在外部flash中的程序“搬運(yùn)”到dsp內(nèi)部或外部的ram區(qū),“搬運(yùn)”完后跳轉(zhuǎn)到程序入口處執(zhí)行。存放在外部flash中的用戶程序與一些必要的引導(dǎo)信息組合在一起,稱為boot表示(自舉表)。16位模式下通用的boot表結(jié)構(gòu)如表1所示。
表1 16位模式下通用boot表結(jié)構(gòu)序 號(hào)內(nèi)容及意義110aa(16位存儲(chǔ)格式)2swwsr值3bscr值4boot之后程序執(zhí)行入口偏移地址xpc5boot之后程序執(zhí)行入口地址pc6第一個(gè)程序段的長(zhǎng)度7第一個(gè)程序段要裝入的內(nèi)部ram區(qū)域移地址8第一個(gè)程序段要裝入的內(nèi)部ram區(qū)地址9第一個(gè)程序段代碼…10第二個(gè)程序段的長(zhǎng)度11第二個(gè)程序段要裝入的內(nèi)部ram區(qū)偏移地址12第二個(gè)程序段要裝入的內(nèi)部ram區(qū)地址13第二個(gè)程序段代碼…14boot表結(jié)構(gòu)標(biāo)志:0x0000tms320c5416提供了多種自舉加載的方法。在此使用并行加載模式,因此令int2=1和int3=1。在并行模式下,自舉表放在外部數(shù)據(jù)存儲(chǔ)器的32k高端地址區(qū)間:8000h~0fffh。自舉表首地址放在數(shù)據(jù)空間的0ffffh單元。加載時(shí),bootloader讀取數(shù)據(jù)空間的0ffffh單元中的內(nèi)容,將其作為首地址,從該地址開始復(fù)制數(shù)據(jù)到內(nèi)部的程序空間。復(fù)制完畢后,bootloader便跳轉(zhuǎn)到指定的程序入口地址,開始執(zhí)行用戶程序。