《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > DSP+FLASH引導(dǎo)裝載系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

DSP+FLASH引導(dǎo)裝載系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

2008-10-29
作者:楊力波 潘志鉑

  摘? 要: 介紹了利用DSP編程實(shí)現(xiàn)對(duì)FLASH的讀寫(xiě)操作,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)引導(dǎo)裝載" title="引導(dǎo)裝載">引導(dǎo)裝載系統(tǒng)的模型,給出了一個(gè)簡(jiǎn)單的測(cè)試用的實(shí)例。整個(gè)方案有較大的靈活性和實(shí)用性。?

  關(guān)鍵詞: 數(shù)字信號(hào)處理器? FLASH存儲(chǔ)器? 引導(dǎo)裝載?

?

  在一些脫機(jī)運(yùn)行的DSP系統(tǒng)中,用戶代碼需要在加電后自行裝載運(yùn)行。DSP系統(tǒng)的引導(dǎo)裝載(Bootload)是指在系統(tǒng)加電時(shí),DSP將一段存儲(chǔ)在外部的非易失性存儲(chǔ)器中的代碼移植" title="代碼移植">代碼移植到內(nèi)部的高速存儲(chǔ)單元中去執(zhí)行。這樣既利用了外部的存儲(chǔ)單元擴(kuò)展DSP本身有限的ROM資源,又充分發(fā)揮了DSP內(nèi)部資源的效能。盡管用戶代碼在一段時(shí)期相對(duì)是固定的,但是如果直接將其掩膜到內(nèi)部ROM中去的話,一方面受容量以及價(jià)格的限制,另一方面則在系統(tǒng)代碼升級(jí)上顯得不是很靈活方便。FLASH是一種高密度、非易失性的電可擦寫(xiě)存儲(chǔ)器,而且單位存儲(chǔ)比特的價(jià)格比傳統(tǒng)的EPROM要低,十分適合于低功耗、小尺寸和高性能的便攜式系統(tǒng)。除了可以采用專用的硬件編程器把代碼灌入FLASH中之外,也可以利用現(xiàn)成的DSP通過(guò)軟件編程" title="軟件編程">軟件編程來(lái)實(shí)現(xiàn)同樣的功能。本文論述的正是如何通過(guò)DSP軟件編程來(lái)實(shí)現(xiàn)對(duì)FLASH的讀寫(xiě)操作,并介紹一個(gè)簡(jiǎn)單的系統(tǒng)引導(dǎo)裝載方案的實(shí)現(xiàn)。?

1 系統(tǒng)描述?

  本系統(tǒng)由DSP(TMS320VC5410)及外部的FLASH(M29W400T)以及相關(guān)的電源管理單元等構(gòu)成。DSP與FLASH的連接如圖1所示。DSP與FLASH是主從關(guān)系,由DSP的相關(guān)輸出管腳控制FLASH的擦除和讀寫(xiě)。其中,A0~A17為地址線,D0~D15為數(shù)據(jù)線,/MSTRB為存儲(chǔ)選通信號(hào),R/W是讀寫(xiě)脈沖信號(hào),/OE和/WE分別為讀使能和寫(xiě)使能,/CE為片使能,/BYTE為8位或16位數(shù)據(jù)模式選擇(圖中接高電壓為16位模式)。FLASH用于存放引導(dǎo)程序" title="引導(dǎo)程序">引導(dǎo)程序段和用戶代碼,由DSP軟件編程來(lái)寫(xiě)入。當(dāng)系統(tǒng)脫機(jī)加電時(shí),DSP首先從外部FLASH指定的引導(dǎo)程序段的起始位置處開(kāi)始執(zhí)行引導(dǎo)裝載。所謂引導(dǎo)裝載,就是將原先存儲(chǔ)在FLASH中的用戶代碼移植到DSP內(nèi)部的高速執(zhí)行單元,然后將程序指針設(shè)置為用戶代碼的起始地址。這樣,接下來(lái)就可以利用DSP資源高速執(zhí)行用戶代碼了。?

?

?

2 DSP對(duì)FLASH的操作?

2.1 DSP及FLASH簡(jiǎn)介?

  TMS320VC5410是TI公司的C54x系列的定點(diǎn)DSP,具有低功耗和高速度,常用于便攜式系統(tǒng)開(kāi)發(fā)。其內(nèi)部存儲(chǔ)資源包括256Kb的可掩膜ROM以及可高速運(yùn)行的128Kb的DARAM和896Kb的SARAM。ROM中固化了TI提供的引導(dǎo)裝載代碼,本方案采用自編的引導(dǎo)程序。?

  ST公司的M29W400系列的FLASH容量為4Mb,分為11個(gè)不同大小的塊結(jié)構(gòu),支持8位或16位操作模式。通過(guò)特殊的命令字序列可以對(duì)每一塊獨(dú)立進(jìn)行擦除和讀寫(xiě)。與以往的FLASH相比,它由外部單電壓供電,無(wú)需額外提供高電壓即可實(shí)現(xiàn)擦除及寫(xiě)入,因而在系統(tǒng)設(shè)計(jì)上無(wú)需考慮特殊的電平匹配。本方案采用16位模式。?

2.2 地址映射方式?

  由于用DSP操作FLASH,必然涉及到FLASH的實(shí)際地址在DSP中的映射方式。TMS320VC5410的地址空間如圖2所示,包括數(shù)據(jù)空間和程序空間,具體的映射方式由DSP內(nèi)部的一些寄存器決定。它使用頁(yè)面擴(kuò)展機(jī)制,最多可以尋址8192Kb的程序空間。假設(shè)FLASH的起始地址0x0000和DSP的起始地址0x0000重合,那么FLASH中只有對(duì)應(yīng)于DSP外部空間的那部分地址,才是DSP可見(jiàn)的。比如,本方案中采用微處理器模式(MP=1)且OVLY=1時(shí),則DSP第0頁(yè)程序空間中可見(jiàn)的FLASH的地址范圍為0x8000~0xFFFF。?

?

?

  在擦除或讀寫(xiě)FLASH之前,必須先執(zhí)行相應(yīng)的命令字序列,即在指定的FLASH地址處寫(xiě)入指定的指令代碼。而整個(gè)FLASH地址空間并非和DSP的地址空間一一對(duì)應(yīng),所以需要考慮地址的重映射。?

  現(xiàn)以對(duì)FLASH寫(xiě)入為例。未考慮地址重映射時(shí),命令字序列如下所示:?

  FlashWrite(0x5555L,0x00AA );//1st cycle? ?

  FlashWrite(0x2AAAL,0x0055 );//2nd cycle ?

  FlashWrite(0x5555L,0x00A0 );//Program command ?

  FlashWrite(myaddress,mydata );//put mydata into myaddress?

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

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

  #define OFFSET 0x8000?

  FlashWrite((0x5555L+OFFSET),0x00AA); //1st cycle? ?

  FlashWrite((0x2AAAL+OFFSET),0x0055); //2nd cycle ?

  FlashWrite((0x5555L+OFFSET),0x00A0);//Program command ?

  FlashWrite(myaddress,mydata);//put mydata into myaddress?

  這樣,在DSP中就可以對(duì)外部FLASH進(jìn)行寫(xiě)入操作了,前提是FLASH地址myaddress在DSP中可見(jiàn)。擦除和讀操作也要對(duì)照?qǐng)D2作類似的地址重映射,不一一累述。?

2.3 擦除和讀寫(xiě)過(guò)程描述?

  在DSP將數(shù)據(jù)寫(xiě)入FLASH之前,先要?jiǎng)h除數(shù)據(jù)所在塊,然后才能重新寫(xiě)入。擦除和寫(xiě)操作之前都要執(zhí)行相應(yīng)的命令字序列,而讀操作則可以直接進(jìn)行。而且要寫(xiě)入的數(shù)據(jù)部分應(yīng)為引導(dǎo)程序段以及用戶代碼是經(jīng)過(guò)編譯、連接后的目標(biāo)代碼,且為FLASH可識(shí)別的HEX格式。?

3 引導(dǎo)裝載模型設(shè)計(jì)?

3.1 引導(dǎo)裝載原理?

  加電前,DSP設(shè)置為微處理器模式(MP=1)。加電后,DSP首先執(zhí)行0xFF80處的中斷向量表" title="向量表">向量表起始處的跳轉(zhuǎn)命令,轉(zhuǎn)向0xF800處的引導(dǎo)程序段并實(shí)現(xiàn)代碼移植功能。完畢后,再次跳轉(zhuǎn)到移植后的用戶程序段的起始地址并執(zhí)行之。?

3.2 邏輯功能分塊?

  引導(dǎo)裝載系統(tǒng)包括引導(dǎo)程序段、用戶程序段、中斷向量表和連接命令文件四部分。引導(dǎo)程序段負(fù)責(zé)將用戶程序段和中斷向量表裝載到目標(biāo)地址,用戶程序段是實(shí)現(xiàn)用戶系統(tǒng)功能的核心代碼,中斷向量表包括加電后的跳轉(zhuǎn)處理和中斷服務(wù)程序的入口,連接命令文件則是分配各個(gè)程序段在DSP地址空間中的位置。?

3.3 具體代碼實(shí)現(xiàn)?

  引導(dǎo)程序段(load.asm)如下:?

??????? .def load_start ?

??? ??? .sect ″load_prg″ ?

load_start: ?

??????? ssbx intm?????????? ;關(guān)中斷?

??????? rsbx??? sxm?????????;符號(hào)擴(kuò)展模式設(shè)置為0?

??? ??? ld #0,dp???????????;定義數(shù)據(jù)頁(yè)指針為0?

??? ??? nop?

??? ??? nop?

??? ??? nop ?

?????? ?ld #0ff80h,a?? ??????? ;移植中斷向量表,0xff80為中斷向量表的舊起始地址?

??????? stm #VECT_NEW, ar1 ??? ;VECT_NEW表示中斷向量表的新起始地址?

??????? rpt #(VECT_LEN-1) ? ;VECT_LEN表示中斷向量表的長(zhǎng)度?

??????? reada *ar1+ ?

??? ??? nop ?

?? ???? ld #MAIN_OLD,a?? ;移植用戶程序段,MAIN_OLD表示用戶程序段的舊起始 地址?

??????? stm #MAIN_NEW,ar1 ;MAIN_NEW表示用戶程序段的新起始地址?

??????? rpt #(MAIN_LEN-1) ? ;MAIN_LEN表示用戶程序段的長(zhǎng)度?

??????? reada *ar1+ ?

endboot: ?

??? ??? orm #020h,@1dh???? ;設(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:?

??????? USER_PRG??????????? ;此處添加用戶程序段?

??????? .end?

??? 中斷向量表(vect.asm)如下:?

??????? .mmregs ?

??? ??? .ref 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_OLD,run=MAIN_NEW ?

??? ?? vectors:??????? load=0ff80h,run=VECT_NEW ?

??? ?? load_prg:????? ? load=0f800h ?

??? }?

4 寫(xiě)入目標(biāo)代碼?

  上述引導(dǎo)程序經(jīng)過(guò)CCS編譯及連接后,生成的目標(biāo)文件boot.out是DSP能夠識(shí)別的COFF格式。但是FLASH不支持這種格式,所以不能直接寫(xiě)入FLASH中。CCS自帶有多種HEX類型的轉(zhuǎn)換程序,比如常見(jiàn)的有Intel格式等。但是不同的HEX類型有不同的格式和頭尾開(kāi)銷,比如Intel格式中除了數(shù)據(jù)之外還有起始符、字節(jié)個(gè)數(shù)、起始地址、類型以及校驗(yàn)位等各種信息,并非純粹數(shù)據(jù)的HEX格式表示。了解了Intel格式的文件結(jié)構(gòu)之后,就可以從中提取出需要寫(xiě)入FLASH中的代碼的HEX格式及相應(yīng)的地址,即對(duì)應(yīng)上面提到的mydata和myaddress。然后就可以利用上面的方法,用DSP將引導(dǎo)系統(tǒng)各個(gè)部分的代碼在脫機(jī)運(yùn)行前寫(xiě)入FLASH。?

5 簡(jiǎn)單測(cè)試實(shí)例?

  利用上述方法,使得系統(tǒng)在脫機(jī)狀態(tài)下實(shí)現(xiàn)引導(dǎo)裝載,并且從DSP的XF端口輸出均勻脈沖波形。直接修改用戶程序段可用如下的代碼取代用戶程序段中的USER_PRG。?

??? loop:?? rsbx xf?

?????? nop?

?? ??? ssbx xf?

?? ??? nop?

????? ?b loop?

  經(jīng)過(guò)編譯、連接、格式轉(zhuǎn)換以及寫(xiě)入FLASH之后,系統(tǒng)就可以實(shí)際脫機(jī)運(yùn)行了。加電一段時(shí)間后,可以通過(guò)示波器測(cè)量得到XF端口的均勻脈沖波形,證明引導(dǎo)裝載成功。?

參考文獻(xiàn)?

1 TMS320VC5410 Fixed-point Digital Signal Processor Data Manual.TI Inc.,Dec.,2000?

2 M29W400 Data Sheet.ST Inc.,Nov.,1999?

3 Software Drivers for M29F400 and M29W400 FLASH Memories.ST Inc.,March,2000?

4 TMS320C54x Assembly Language Tools User’s Guide.TI Inc.,Dec.,1999

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲欧洲日夜超级视频| 久久久国产成人精品| 欧美中在线观看| 亚洲欧美一级二级三级| 国产精品99久久久久久有的能看| 亚洲人成高清| 亚洲九九爱视频| 亚洲伦理中文字幕| 亚洲裸体视频| 9色精品在线| 一区二区三区四区五区精品| 一区二区福利| 在线中文字幕一区| 亚洲综合国产激情另类一区| 亚洲一区欧美二区| 午夜精品视频在线观看一区二区| 午夜精品久久一牛影视| 久久av一区二区三区| 欧美在线视频在线播放完整版免费观看| 性欧美办公室18xxxxhd| 欧美在线观看一区二区三区| 久久精品国产一区二区电影| 久久精品免费| 亚洲欧洲一区二区在线观看| 日韩一区二区免费看| 这里只有精品视频| 亚洲欧美日韩天堂| 久久精品视频在线看| 麻豆av一区二区三区久久| 欧美激情久久久久| 欧美另类在线观看| 欧美日韩国产区| 国产精品美女主播| 国产欧美一区二区精品婷婷 | 亚洲国产成人精品视频| 最新国产乱人伦偷精品免费网站| 日韩一区二区精品视频| 亚洲一区二区精品在线| 先锋亚洲精品| 亚洲区中文字幕| 亚洲一区在线免费| 久久久久久久久久久久久女国产乱| 欧美 日韩 国产在线| 欧美三级午夜理伦三级中视频| 国产欧美一区二区精品性色| 在线欧美小视频| 一本大道av伊人久久综合| 欧美在线www| 一区二区久久| 久久国产精品久久久| 欧美成人综合一区| 国产精品一二三四| 亚洲国产精品久久久久婷婷884| 亚洲视频免费| 亚洲激情校园春色| 午夜精品免费| 欧美国产日韩一区二区| 国产欧美日韩免费看aⅴ视频| 在线不卡a资源高清| 亚洲婷婷国产精品电影人久久| 亚洲高清成人| 亚洲欧美日本伦理| 欧美国产另类| 国产视频一区在线观看一区免费| 亚洲三级毛片| 久久精品国产久精国产思思| 亚洲婷婷国产精品电影人久久| 久久精品在线免费观看| 欧美视频一区二区三区| 精品av久久707| 亚洲无毛电影| 99re热这里只有精品视频| 久久久夜精品| 国产精品毛片va一区二区三区 | 一区二区欧美视频| 亚洲人成在线观看一区二区| 欧美在线国产| 欧美视频在线观看视频极品| 韩国在线视频一区| 亚洲欧美日韩中文播放| 一区二区免费看| 巨胸喷奶水www久久久免费动漫| 国产精品乱子乱xxxx| 亚洲精品无人区| 亚洲国产精品免费| 久久精品国产精品| 国产精品丝袜91| 99视频精品全部免费在线| 亚洲人体影院| 久久久久一区二区三区| 国产精品网站在线| 在线视频你懂得一区二区三区| 91久久精品日日躁夜夜躁欧美| 久久久国产午夜精品| 国产精品视频第一区| 99视频+国产日韩欧美| 亚洲美女视频在线观看| 六十路精品视频| 一区免费观看| 亚洲国产成人在线播放| 久久精品视频一| 国产丝袜一区二区| 亚洲欧美偷拍卡通变态| 亚洲欧美在线观看| 国产精品美女午夜av| 亚洲午夜电影| 亚洲一区二区在线视频| 欧美日韩一区二区视频在线| 亚洲精品国产品国语在线app| 亚洲日本一区二区| 欧美大色视频| 亚洲人成亚洲人成在线观看| 亚洲精品在线视频| 欧美激情一区二区三区在线| 亚洲国产美女| 日韩午夜剧场| 欧美日韩亚洲一区二| 一片黄亚洲嫩模| 亚洲欧美激情四射在线日 | 国产精品一区二区久久久| 一区二区三区免费网站| 亚洲天堂网在线观看| 国产精品国产三级欧美二区 | 欧美一级网站| 久久久久久9| 在线精品视频免费观看| 亚洲人www| 欧美日韩精品一区二区三区| 一区二区黄色| 欧美一区二区三区视频免费| 国产日韩一区二区三区在线播放 | 亚洲精品美女免费| 欧美日韩国产综合视频在线观看中文| 日韩一级黄色av| 亚洲欧美日韩天堂一区二区| 国产视频久久久久| 亚洲国产精品久久久久婷婷884| 欧美大片一区二区三区| 亚洲精选中文字幕| 先锋影音久久| 国产综合久久久久久鬼色| 亚洲人成毛片在线播放女女| 欧美日韩日日骚| 亚洲一区在线观看免费观看电影高清| 欧美在线一二三区| 亚洲成人自拍视频| 亚洲香蕉伊综合在人在线视看| 国产精品自拍小视频| 久久精品国产一区二区电影| 欧美黑人一区二区三区| 一本色道久久99精品综合 | 亚洲精品少妇网址| 欧美日韩直播| 亚欧成人精品| 欧美精品成人一区二区在线观看| 一区二区冒白浆视频| 久久九九全国免费精品观看| 亚洲国产精品精华液网站| 亚洲一区二区三区在线| 国内精品美女在线观看| 亚洲免费成人| 国产精品一级在线| 亚洲精品少妇| 国产麻豆日韩| 亚洲精品在线三区| 国产精品亚洲人在线观看| 亚洲激情在线播放| 国产精品久久久久永久免费观看| 久久精品一区二区| 欧美日韩在线视频一区二区| 久久国产视频网| 欧美午夜一区二区| 亚洲电影免费在线| 欧美视频中文在线看| 亚洲国产精品传媒在线观看| 欧美日韩精品免费观看视一区二区| 性做久久久久久久久| 欧美女同在线视频| 欧美亚洲综合另类| 欧美三级中文字幕在线观看| 亚洲国产成人高清精品| 国产精品亚洲综合一区在线观看 | 国内精品福利| 亚洲欧美精品在线| 亚洲国产一区二区精品专区| 性做久久久久久| 99精品国产在热久久下载| 久久只有精品| 亚洲欧美日韩国产一区| 欧美日韩国产综合视频在线观看| 久久精品1区| 国产精品网站在线观看| 一区二区不卡在线视频 午夜欧美不卡'| 国产一区日韩欧美| 亚洲一区二区日本| 最新亚洲视频| 久久综合九色综合欧美就去吻| 亚洲欧美国产高清| 欧美色图五月天| 日韩一区二区精品葵司在线|