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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用DSP軟件編程實(shí)現(xiàn)的引導(dǎo)裝載系統(tǒng)設(shè)計(jì)

          用DSP軟件編程實(shí)現(xiàn)的引導(dǎo)裝載系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2012-07-03 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/257389.htm

          2.3 對(duì)FLASH的操作

          對(duì)照?qǐng)D1的地址映射關(guān)系,如果采用的是微處理器模式(MP/MC=1),并且設(shè)置寄存器OVLY=I,那么由于連接的關(guān)系使得FLASH的起始地址0x0000和的起始地址0x0000重合,在第0頁程序空間中可見的FLASH的地址范圍應(yīng)為0x8000-0xFFFF。

          在擦除或讀寫FLASH之前,必須先執(zhí)行相應(yīng)的命令字序列,即在指定的FLASH地址處寫入指定的指令代碼,M29W400T的命令字序列如表2所示。


          表2中的某些FLASH地址空間對(duì)照?qǐng)D1恰好對(duì)應(yīng)于DSP的內(nèi)部地址空間,即對(duì)DSP而言是不可見的,所以需要考慮地址的重映射。文中以對(duì)FLASH寫人為例,F(xiàn)lashWrite表示一次底層的總線寫操作。

          未考慮地址重映射時(shí),命令字序列為:

          FlashWrite(0x5555L,0x00AA);// lst cycle
          FlashWrite(0x2AAAL.0x0055);// 2nd cycle
          FlashWrite(Ox5555L,OxOOAO);// 3rd cycle
          (寫入命令)
          FlashWrite(myaddress,mydata);// 將數(shù)據(jù)
          mydata寫入FLASH地址myaddress

          由圖1可知,當(dāng)MP=1和OVLY=1時(shí),F(xiàn)LASH地址0x5555L和0x2AAAL在DSP中不屬于外部空間,即對(duì)DSP是不可見的。這樣DSP執(zhí)行上述語句時(shí),根本沒有對(duì)FLASH進(jìn)行相應(yīng)的操作,從而導(dǎo)致即使FLASH地址myaddress是DSP可見的,也無法實(shí)現(xiàn)數(shù)據(jù)寫入的功能。

          仔細(xì)分析FLASH的命令字序列可知,其實(shí)前三句命令字序列中真正起作用的地址位是A0-A14,而高地址位A15-A17可以是任意值,于是考慮加一個(gè)地址偏移量0x8000,以使得重映射后的FLASH地址在DSP中是可見的。修改后的代碼為:

          #define OFFSET Ox8000
          FlashWrite(((k5555L+OFFSET),0x00AA);// 19tcycle
          FlashWrite((0x2AAAL+OFFSET),0x0055);// 2ndcycle
          FlashWrite((0x5555L+OFFSET),0x00A0);
          // 3rdf cycle(重映射的寫入命令)
          FlashWrite(myaddress,mydata): // 將數(shù)據(jù)mydata
          寫入FLASH地址myaddress

          這樣,在DSP中就可以對(duì)外部FLASH進(jìn)行寫入操作了,而其前提是FLASH地址myaddress在DSP中可見。其它的擦除和讀操作也要對(duì)照?qǐng)D1作類似的地址重映射。

          在DSP將數(shù)據(jù)寫入FLASH之前,只有先刪除數(shù)據(jù)所在塊,然后才能重新寫入。擦除和寫操作之前都要執(zhí)行如表2所示的相應(yīng)命令字序列。其中要寫入的數(shù)據(jù)部分即為引導(dǎo)程序以及用戶程序經(jīng)過編譯、連接后的目標(biāo)代碼,為M29W400T可識(shí)別的HEX格式。


          3 軟件描述

          3.1 功能分析

          系統(tǒng)主要由引導(dǎo)程序和用戶程序兩部分構(gòu)成,最后都存儲(chǔ)在外擴(kuò)的M29W400T的指定地址中。以上主要敘述的是如何將目標(biāo)代碼寫入M29W400T,下面敘述如何設(shè)計(jì)引導(dǎo)程序和用戶程序,以及生成最后目標(biāo)代碼的方法。

          由于DSP采用微計(jì)算機(jī)工作模式。因此,在加電后,DSP將首先執(zhí)行0xFF80處的中斷向量表起始處的跳轉(zhuǎn)命令,然后轉(zhuǎn)向0xF800處的引導(dǎo)程序并實(shí)現(xiàn)代碼移植功能。完畢后,再次跳轉(zhuǎn)到移植后的用戶程序的起始地址并執(zhí)行。

          以一個(gè)完整的系統(tǒng)為例,設(shè)用戶程序是從TMS320VC5410的XF管腳輸出一個(gè)均勻方波。此段代碼也可以被其它用戶程序替代,因此本文的系統(tǒng)具有一定的通用性。

          3.2 代碼實(shí)現(xiàn)

          利用TI公司的DSP集成開發(fā)套件CCS可以生成*.out格式的目標(biāo)代碼,首先要建立引導(dǎo)程序段、用戶程序段、中斷向量表和連接命令文件四部分。引導(dǎo)程序段負(fù)責(zé)將用戶程序段和中斷向量表裝載到目標(biāo)地址,用戶程序段是實(shí)現(xiàn)用戶系統(tǒng)功能的核心代碼(本文僅以實(shí)現(xiàn)輸出一個(gè)方波為例),中斷向量表包括自啟時(shí)的跳轉(zhuǎn)處理和中斷服務(wù)程序的人口;連接命令文件則是分配各個(gè)程序段在DSP地址空間中的位置,協(xié)助生成目標(biāo)代碼,在這四部分中,引導(dǎo)程序段是設(shè)計(jì)重點(diǎn),它負(fù)責(zé)將中斷向量表和用戶代碼段從片外的M29W400T移植到片內(nèi)的RAM中,并且將程序指針指向用戶代碼段起始地址。其引導(dǎo)程序段(1Oad.a(chǎn)sm)的命令代碼如下:

          .def load_start
          .sect,load_prg
          load_start:
          ssbx intm ;關(guān)中斷
          rsbx sxm ;符號(hào)擴(kuò)展模式設(shè)置為0
          ld #0,dp ;定義數(shù)據(jù)頁指針為0
          nop
          nop
          nop
          1d #0ff80h,a ;移植中斷向量表,
          0xff80為中斷向量表的舊起始地址
          stm # VECT_NEW,arl;VECT_NEW表示中斷向量表的新起始地址
          rpt#(VECT_LEN_1);VECT_LEN表示中斷向量表的長(zhǎng)度
          reada * arl+
          nop
          ld # MAIN_OLD,a ;移植用戶程序段,
          MAm_OlD表示用戶程序段的舊起始地址

          stm # MAIN-NEW,arl ;MAIN_NEW表示用戶程序段的新起始地址
          rpt#(MAIN_LEN_1) ;MAIN_LEN表示用戶程序段的長(zhǎng)度
          reada * arl+
          endboot:
          orm # 020h,@ldh ;

          設(shè)置OVLY=1,使得內(nèi)部RAM同時(shí)映射到DSP數(shù)據(jù)和程序空間
          ld # MAIN_NEW,a
          bacc a ;程序指針指向用戶程序段的起始地址
          .end
          用戶程序段(main.asm)代碼如下:
          .def main_start
          .sect main_prg
          main_start:
          loop: rsbx xf ;實(shí)現(xiàn)XF的復(fù)位和置位
          nop
          ssbx Xf
          nop
          b loop
          .end
          中斷向量表(vect.asm)如下:
          .mmregs
          .Ief main_ start
          .ref lOad_start
          .def reset
          .def nmi
          .sect''.vectors''
          reset: bd load_start ;加電后,跳轉(zhuǎn)到自啟程序段起始地址
          stm #200,sp
          nmi: rete ;
          此表中只包含NMI中斷入口,也可以類似添加其他中斷入口

          nop
          nop
          nop
          .end
          連接命令文件(boot.cmd)的配置如下:
          vect.obj
          main.obj
          load.obj
          -O boot.out
          SECTIONS

          {
          main_prg:load=MAIN_OID,run=MAIN_NEW
          vectors: load=0ff80h,run=VECF_NEW
          load_prg:load=0f800h
          }

          上述引導(dǎo)程序經(jīng)過CCS編譯及連接后,生成的目標(biāo)文件boot.out是TMS320VC5410能夠識(shí)別的COFF格式,但是M29W400T不支持這種格式,所以不能直接寫入FLASH中。而CCS自身帶有多種HEX類型的轉(zhuǎn)換程序。因此,在經(jīng)過格式轉(zhuǎn)換后,即可得到對(duì)應(yīng)于上文提到的一系列數(shù)據(jù)和地址mydata和myaddress,此時(shí)就可以在聯(lián)機(jī)情況下利用CCS以DSP方式將目標(biāo)代碼寫入到M29W400T之中。一旦寫入成功,便可以脫機(jī)加電自啟系統(tǒng)。同時(shí),在經(jīng)一段時(shí)間后,還可用示波器測(cè)得XF管腳輸出的均勻脈沖方波,以證明引導(dǎo)裝載成功。


          上一頁 1 2 下一頁

          關(guān)鍵詞: DSP 軟件編程 引導(dǎo)裝載

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(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); })();