国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

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

1 系統描述

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



2 DSP對FLASH的操作

2.1 DSP及FLASH簡介

TMS320VC5410是TI公司的C54x系列的定點DSP,具有低功耗和高速度,常用于便攜式系統開發。其內部在座資源包括256Kb的可掩膜RO鳳及可高速運行的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地址空間并非和FSP的地址空間一一對應,所以需要考慮地址的重映射。 現以對FLASH寫入為例。未考慮地址重映射時,命令字序列如下所示: Flash Write(0x5555L,0x00AA);//1st cycle Flash Write(0x2AAAL,0x0055);//2nd cycle Flash Write(0x5555L,0x00A0);//Program command Flash Write(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 Flash Write ((0x5555L+OFFSET),0x00AA);//1st cycle Flash Write((0x2AAAL+OFFSET),0x0055);//2 nd cycle Flash Write((0x5555L+OFFSET),0x00A0);//Program command Flash Write((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處的中斷向量表起始處的跳轉命令,轉向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端口的均勻脈沖波形,證明引導裝載成功。
本文地址:http://m.qingdxww.cn/thread-41637-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品午夜久久久久久99热 | 国产成人高清在线观看播放 | 女人与禽交视频免费看 | 欧美亚洲国产一区二区 | 亚洲欧美一二三区 | 9久久精品 | 久久综合一个色综合网 | 国产精品久久久久9999赢消 | 日韩亚射 | 国产精品香蕉在线 | 日韩精品久久久久影院 | 日本xxxxx高清免费观看 | 国产亚洲欧美另类一区二区三区 | 亚洲欧美日本综合 | 欧美成人hd | 中文字幕在线看视频一区二区三区 | 日韩天堂网 | 欧美国产高清欧美 | 1国产精品卡1卡2卡3 | 久伊人网| 中文字幕在第10页线观看 | 91瑟瑟| 日本视频二区 | 在线观看免费精品国自产 | 精品卡1卡2卡三卡免费视频 | 国产免费自拍视频 | 尤物久久99热国产综合 | 四虎小视频 | 国产满18av精品免费观看视频 | 在线动漫网站 | 五月婷婷开心综合 | 国产91精品一区二区麻豆网站 | 久久久噜噜噜www成人网 | 日本亚州视频在线八a | h漫在线免费观看 | 亚洲香蕉久久 | 成年美女黄网站色视频大全免费 | 亚洲最大情网站在线观看 | 不卡的在线视频 | 操老逼网| 日韩欧美在线精品 |