<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > TMS320VC5410的BOOT設(shè)計(jì)與實(shí)現(xiàn)

          TMS320VC5410的BOOT設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2011-10-25 來(lái)源:網(wǎng)絡(luò) 收藏
            TMS320VC54X系列DSP芯片一般都在片內(nèi)設(shè)置有BOOT程序。BOOT程序的主要作用是在開(kāi)機(jī)時(shí)將用戶(hù)程序從外部裝入到程序存貯器。不同型號(hào)的DSP芯片中BOOT引導(dǎo)程序的大小是不同的。內(nèi)部就具有2K字的BOOT程序,下面就介紹方法。

          1 BOOT的模式選擇
            我們使用的BOOT程序時(shí),需要將DSP設(shè)置為微機(jī)工作方式(硬件復(fù)位后采樣MP/MC=0),則當(dāng)執(zhí)行片內(nèi)的引導(dǎo)程序,并且DSP復(fù)位后,程序就從內(nèi)部ROM的FF80H處開(kāi)始執(zhí)行程序。在FF80H處,有一條跳轉(zhuǎn)指令,轉(zhuǎn)向ROM中已掩模的BOOT程序,這樣便開(kāi)始運(yùn)行內(nèi)部的BOOT程序。這個(gè)引導(dǎo)程序首先進(jìn)行初始化。初始化工作包括使中斷無(wú)效(INTM=1)、將內(nèi)部的雙存取塊/單存取塊映射到程序/數(shù)據(jù)空間(OVLY=0),對(duì)程序和數(shù)據(jù)空間都設(shè)置7個(gè)等待狀態(tài)。
          TMS320VC5410程序引導(dǎo)共有5種模式:
           ?。?)HPI模式,這是一種主機(jī)接口模式。主機(jī)通過(guò)寫(xiě)入主機(jī)控制寄存器(HPIC)來(lái)中斷DSP,而  DSP則通過(guò)主機(jī)中斷信號(hào)來(lái)中斷主機(jī)。主機(jī)可以響應(yīng)HINT信號(hào)和清除該信號(hào)。HINT是否為低電平?jīng)Q定了是否選用主機(jī)接口HPI引導(dǎo)模式。
           ?。?)并行I/O口BOOT模式(支持8bits和16bits)。
          (3)串行口模式(標(biāo)準(zhǔn)/TDM/BSP)(支持8bits
          和16bits),串口引導(dǎo)共有8種方式。按字長(zhǎng)8位與16位兩種格式和CLKX/FSX引腳的設(shè)置決定引導(dǎo)模式。采用8位子長(zhǎng)時(shí)需要對(duì)下列控制位置位:
          ·接收復(fù)位信號(hào)RRST;
          ·發(fā)送模式位TXM;
            ·時(shí)鐘模式位MCM(使CLKX由片內(nèi)時(shí)鐘源驅(qū)動(dòng));
            ·幀同步模式位FSM(必須由外部施加幀同步脈沖信號(hào)到FSR引腳);
          ·格式位FO(選擇8位數(shù)據(jù)傳輸方式)。(4)外部并行模式(支持8bits和16bits)?! 。?)WARM BOOT,即熱引導(dǎo)模式,可以使傳輸控制入口地址,也可以在器件熱復(fù)位或用其他方式把程序代碼已經(jīng)傳輸?shù)狡瑑?nèi)或片外存儲(chǔ)器(如DMA)后使用WARM引導(dǎo)模式。在WARM引導(dǎo)模式時(shí),由BRS字中的SRC或ADDR字段指定入口地址的高6位。
            本文主要就8位/16位并行I/O口引導(dǎo)模式作探討。
            I/O口引導(dǎo)模式提供了一種異步地把程序代碼從I/O口地址空間0h處傳輸?shù)絻?nèi)部或外部的程序存儲(chǔ)器的方法。圖1是程序流程圖。
            由圖1的流程圖我們可以看到設(shè)置合理的數(shù)據(jù)區(qū)的FFFFH地址的內(nèi)容,使它成為有效地并行引導(dǎo),就可以實(shí)現(xiàn)我們的并行I/O的BOOT模式。
          2 設(shè)計(jì)FFFFH地址的內(nèi)容使它成為有效的并行引導(dǎo)數(shù)據(jù)

            FFFFH地址所填的內(nèi)容就是所設(shè)計(jì)的應(yīng)用程序開(kāi)始的地址,在所設(shè)計(jì)的程序中起始地址是0頁(yè)的08000h,因此,在此程序中將FFFFH的內(nèi)容設(shè)置為08000h。
          3 設(shè)置08000h的內(nèi)容,實(shí)現(xiàn)引導(dǎo)功能
            我們可以根據(jù)圖2來(lái)得到我們所需要填寫(xiě)的數(shù)據(jù)。

            由圖2的流程圖我們可以知道,要往08000h地址開(kāi)始寫(xiě)入所規(guī)定的值才符合要求。見(jiàn)表1。
          依照表1,我們可以填入符合要求的字。

          4 獲取填入字的信息
            要獲取填入字的信息就要生成一張表,而生成這張表之前需要做一個(gè)批處理文件,批處理文件的做法如下:
          (1)首先編譯通過(guò)生成“.out”文件;
          (2)打開(kāi)UltraEdit-32編輯批處理的軟件;
          (3)用hex命令進(jìn)行編輯。
          hex命令形式如下:
          myfile.out/*輸入的COFF文件名.
          -e 0x0000/*程序的起始地址.
          -a/*ASCII輸出形式.
          -boot/*引導(dǎo)所有的程序單元.
           ?。璪ootorg PARALLEL/*?jiǎng)?chuàng)建PARALLEL的BOOT引導(dǎo).
          -memwidth 16/*16bits的EPROM.
          -o myfile.hex/*輸出文件名.
            這里有一個(gè)小程序可以看出具體操作過(guò)程(程序的起始為0x2000):
            hex500 test1.out-e 0x2000-boot-bootorgPARALLEL-memwidth 16-romwidth 16-o test1.  hex




          這樣可以生成一個(gè)表,如表2所示。
            表2中帶下劃線(xiàn)者代表每一個(gè)Section的起始地址,有框線(xiàn)者是這一個(gè)Section的長(zhǎng)度(注意,當(dāng)我們依據(jù)這張表填的時(shí)候,應(yīng)該將Section的長(zhǎng)度加1,這是應(yīng)用后得出來(lái)的經(jīng)驗(yàn)),最后一個(gè)Section的最后四個(gè)0表示結(jié)束。
          由上,我們就可以使用并行的BOOT模式了。

            參考文獻(xiàn)
          1 李剛主編.?dāng)?shù)字信號(hào)微處理器的原理及其開(kāi)發(fā)應(yīng)用.天津:天津大學(xué)出版社,2000年4月
          2 任麗香,馬淑芬,李方慧編.TMS320C5400系列DSPs的原理與應(yīng)用.北京:電子工業(yè)出版社,2000,7
          3 彭啟琮編.TMS320C54X實(shí)用教程.成都:電子科技大學(xué)出版社,2000,1


          關(guān)鍵詞: TMS320VC5410 BOOT設(shè)計(jì)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();