《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > DSP+FLASH引導裝載系統的設計與實現

DSP+FLASH引導裝載系統的設計與實現

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

  摘? 要: 介紹了利用DSP編程實現對FLASH的讀寫操作,設計并實現了一個引導裝載" title="引導裝載">引導裝載系統的模型,給出了一個簡單的測試用的實例。整個方案有較大的靈活性和實用性。?

  關鍵詞: 數字信號處理器? FLASH存儲器? 引導裝載?

?

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

1 系統描述?

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

?

?

2 DSP對FLASH的操作?

2.1 DSP及FLASH簡介?

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

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

2.2 地址映射方式?

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

?

?

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

  現以對FLASH寫入為例。未考慮地址重映射時,命令字序列如下所示:?

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

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

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

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

  由圖2可知,當MP=1和OVLY=1時,FLASH地址0x5555L和0x2AAAL在DSP中位于外部空間之外,是不可見的。這樣DSP執行上述語句時,根本沒有對FLASH進行相應的操作,從而導致即使FLASH地址myaddress是DSP可見的,也無法實現數據寫入的功能。?

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

  #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中就可以對外部FLASH進行寫入操作了,前提是FLASH地址myaddress在DSP中可見。擦除和讀操作也要對照圖2作類似的地址重映射,不一一累述。?

2.3 擦除和讀寫過程描述?

  在DSP將數據寫入FLASH之前,先要刪除數據所在塊,然后才能重新寫入。擦除和寫操作之前都要執行相應的命令字序列,而讀操作則可以直接進行。而且要寫入的數據部分應為引導程序段以及用戶代碼是經過編譯、連接后的目標代碼,且為FLASH可識別的HEX格式。?

3 引導裝載模型設計?

3.1 引導裝載原理?

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

3.2 邏輯功能分塊?

  引導裝載系統包括引導程序段、用戶程序段、中斷向量表和連接命令文件四部分。引導程序段負責將用戶程序段和中斷向量表裝載到目標地址,用戶程序段是實現用戶系統功能的核心代碼,中斷向量表包括加電后的跳轉處理和中斷服務程序的入口,連接命令文件則是分配各個程序段在DSP地址空間中的位置。?

3.3 具體代碼實現?

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

??????? .def load_start ?

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

load_start: ?

??????? ssbx intm?????????? ;關中斷?

??????? rsbx??? sxm?????????;符號擴展模式設置為0?

??? ??? ld #0,dp???????????;定義數據頁指針為0?

??? ??? nop?

??? ??? nop?

??? ??? nop ?

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

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

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

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

??? ??? nop ?

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

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

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

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

endboot: ?

??? ??? orm #020h,@1dh???? ;設置OVLY=1,使得內部RAM同時映射到DSP數據和程序空間?

????? ? 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?????? ? ? ;加電后,跳轉到自啟程序段起始地址?

??????? 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 寫入目標代碼?

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

5 簡單測試實例?

  利用上述方法,使得系統在脫機狀態下實現引導裝載,并且從DSP的XF端口輸出均勻脈沖波形。直接修改用戶程序段可用如下的代碼取代用戶程序段中的USER_PRG。?

??? loop:?? rsbx xf?

?????? nop?

?? ??? ssbx xf?

?? ??? nop?

????? ?b loop?

  經過編譯、連接、格式轉換以及寫入FLASH之后,系統就可以實際脫機運行了。加電一段時間后,可以通過示波器測量得到XF端口的均勻脈沖波形,證明引導裝載成功。?

參考文獻?

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

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
一本大道久久a久久精二百| 久久se精品一区二区| 亚洲免费在线看| 亚洲精品综合在线| 亚洲第一精品久久忘忧草社区| 国产乱码精品一区二区三区不卡 | 久久久最新网址| 香港成人在线视频| 亚洲视频免费在线| 亚洲色无码播放| 在线视频一区二区| 一区二区三区四区五区视频| 日韩视频免费观看| 亚洲人体1000| 亚洲精品欧美精品| 久久激五月天综合精品| 亚洲欧美区自拍先锋| 一本久道久久综合婷婷鲸鱼| 亚洲青涩在线| 亚洲全黄一级网站| 91久久久久久久久| 亚洲国产裸拍裸体视频在线观看乱了| 午夜精品影院在线观看| 亚洲欧美日韩精品在线| 亚洲视频观看| 亚洲一区二区欧美| 亚洲一区二区三区乱码aⅴ| 日韩性生活视频| 夜夜嗨av一区二区三区四区| 亚洲美女黄网| 亚洲视频综合| 亚洲欧美视频一区| 性色av一区二区三区在线观看| 亚洲欧美日韩中文视频| 性视频1819p久久| 久久精品一本久久99精品| 亚洲国产成人午夜在线一区| 亚洲精品婷婷| 亚洲网站在线| 欧美一区1区三区3区公司| 久久99在线观看| 裸体素人女欧美日韩| 欧美激情bt| 国产精品va在线播放| 国产精品影视天天线| 国内在线观看一区二区三区| 亚洲国产另类久久久精品极度 | 国产亚洲亚洲| 亚洲第一页在线| 一本不卡影院| 午夜视频一区在线观看| 亚洲黑丝一区二区| 在线一区二区三区做爰视频网站| 亚洲欧美日本日韩| 久久久久久久久一区二区| 免费观看成人| 国产精品成人免费视频| 国产亚洲va综合人人澡精品| 在线观看亚洲精品| 在线一区二区三区做爰视频网站| 亚洲欧美成人精品| 亚洲人成在线影院| 亚洲免费婷婷| 麻豆成人小视频| 欧美视频一区二区| 狠狠色丁香婷婷综合| 亚洲毛片视频| 欧美中文字幕精品| 日韩一区二区久久| 欧美专区第一页| 欧美劲爆第一页| 国产日韩欧美视频| 最新69国产成人精品视频免费| 亚洲永久网站| 亚洲免费高清| 久久成人一区| 欧美三级电影网| 1024成人网色www| 欧美在线综合| 欧美午夜精品理论片a级按摩| 国产精品社区| 亚洲人成亚洲人成在线观看| 亚洲综合99| 日韩午夜在线播放| 欧美中文字幕在线播放| 性视频1819p久久| 欧美~级网站不卡| 国产区精品视频| 一区二区三区四区五区精品| 亚洲国产精品一区二区www| 午夜精品久久| 欧美人与性禽动交情品| 国产在线播精品第三| 一区二区三区欧美视频| 亚洲欧洲在线观看| 久久精品观看| 国产精品欧美激情| 国产自产女人91一区在线观看| 一区二区三区高清| 日韩视频不卡| 欧美aa国产视频| 伊人成人在线视频| 羞羞答答国产精品www一本| 亚洲午夜av| 欧美日韩福利视频| 亚洲电影免费在线| 久久精品一区二区三区中文字幕| 欧美一区二区三区在线免费观看| 欧美另类一区| 91久久黄色| 亚洲日产国产精品| 开元免费观看欧美电视剧网站| 国产精品亚洲综合一区在线观看 | 久久久久网站| 国产午夜精品美女毛片视频| 亚洲综合999| 午夜精品成人在线| 欧美午夜电影网| 亚洲美女中文字幕| 日韩午夜在线视频| 欧美激情 亚洲a∨综合| 欧美乱在线观看| 亚洲人成在线免费观看| 亚洲人成小说网站色在线| 久久综合影音| 一区在线影院| 亚洲国产一区二区三区a毛片| 老色鬼精品视频在线观看播放| 国产一区二区三区久久 | 欧美在线国产| 久久精品国产2020观看福利| 国产美女精品在线| 亚洲一区二区三区在线看 | 亚洲欧美在线高清| 国产欧美短视频| 欧美在线亚洲一区| 老色鬼久久亚洲一区二区| 亚洲第一毛片| 在线一区二区三区四区五区| 欧美午夜精品久久久久久人妖 | 亚洲图片欧洲图片av| 午夜久久电影网| 国产欧美精品日韩精品| 销魂美女一区二区三区视频在线| 久久久久久亚洲综合影院红桃| 一区免费观看视频| 亚洲美女av电影| 欧美特黄一级大片| 亚洲欧美中文另类| 久久中文欧美| 亚洲人成7777| 欧美一区二区免费视频| 激情av一区| 亚洲乱码国产乱码精品精| 欧美色图一区二区三区| 9人人澡人人爽人人精品| 亚洲欧美精品在线观看| 国产精品久久久久7777婷婷| 午夜视频久久久久久| 久久免费少妇高潮久久精品99| 韩国视频理论视频久久| 亚洲精选久久| 欧美日韩亚洲网| 亚洲专区一区| 久久久久久久精| 亚洲精品久久久久久久久久久久久| 一区二区三区视频观看| 国产精品福利影院| 午夜精品久久久久久| 欧美freesex8一10精品| 亚洲精品一区在线观看| 亚洲素人一区二区| 国产精品国产精品国产专区不蜜| 久久激情五月婷婷| 免费亚洲视频| 亚洲精品一区二区三区四区高清 | 亚洲人成精品久久久久| 欧美性大战久久久久久久| 亚洲宅男天堂在线观看无病毒| 久久精品人人做人人爽电影蜜月| 影音先锋久久久| 日韩一级黄色片| 国产亚洲日本欧美韩国| 亚洲激情在线观看视频免费| 欧美日本一道本| 亚洲一级影院| 欧美精品99| 亚洲综合国产精品| 玖玖精品视频| 亚洲国产成人av| 久久精品国产欧美亚洲人人爽| 亚洲第一区在线观看| 亚洲视频一区在线| 国产精品美腿一区在线看| 亚洲日韩欧美视频| 国产精品久久九九| 亚洲国产老妈| 欧美视频在线观看| 亚洲国产成人久久综合| 欧美三区在线|