《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > TMS320VC5416并行自舉的巧妙實現

TMS320VC5416并行自舉的巧妙實現

2008-08-22
作者:宗戰華 鄭建生

??? 摘 要: 提出了一種巧妙實現DSP并行自舉" title="自舉">自舉的方法,即采用“兩次下載法”,利用DSP自身對FLASH編程,以實現DSP的并行自舉" title="并行自舉">并行自舉。這種在系統編程" title="在系統編程">在系統編程的DSP自舉實現方式無需文件轉換,簡單靈活。以TI公司的TMS320VC5416和閃爍存儲器SST39VF200為例,介紹了該方法的具體實現過程。
??? 關鍵詞: DSP? TMS320VC5416? FLASH SST39VF200? 并行自舉

?

??? 隨著信息技術的飛速發展,數字信號處理器(DSP)得到了廣泛的應用?,F今的高速DSP內部不再基于FLASH結構,而是采用存取速度更快的RAM結構。DSP掉電后其內部RAM中的程序和數據將全部丟失,所以在脫離仿真器的環境中,DSP芯片每次上電后必須自舉,將外部存儲區的執行代碼通過某種方式搬移到內部存儲區,并自動執行。目前應用非常廣泛的是TI公司的5000系列DSP,常用的自舉方式有并行自舉、串行自舉、主機接口(HPI)自舉和I/O自舉。HPI自舉需要有一個主機(如單片機)進行干預,雖然可以通過這個主機對DSP內部工作情況進行監控,但電路復雜、成本高;串口自舉代碼加載" title="加載">加載速度慢;I/O自舉僅占用一個端口地址,代碼加載速度快,但一般的外部存儲器都需要接口芯片來滿足DSP的自舉時序,故電路復雜,成本高;并行自舉加載速度快,雖然需要占用DSP數據區的部分地址,但無需增加其它接口芯片,電路簡單。因此在TI公司的5000系列DSP中,并行自舉得到了廣泛的應用。
??? 將可執行代碼燒錄到外部存儲器,傳統的做法是通過編程器" title="編程器">編程器完成。先利用CCS軟件中的hex500.exe文件將要寫入的*.out文件轉換成編程器能夠識別的*.hex文件格式,再用編程器將轉換后的*.hex文件燒錄到外部EEROM中。然而,隨著芯片制造工藝的不斷提高,芯片集成度越來越高,存儲器正向小型化、貼片式的方向發展,很多貼片封裝的存儲器很難用編程器編程,更不可能頻繁插拔。與傳統的EEROM相比,FLASH存儲器具有支持在線擦寫且擦寫次數多、速度快、功耗低、容量大、價格低廉等優點。目前有很多FLASH芯片采用3.3V單電源供電,與DSP連接時無需采用電平轉換芯片,因此電路連接簡單。在系統編程,利用系統本身的DSP直接對外掛的FLASH存儲器編程,節省了編程器的費用和開發時間、使得DSP執行代碼可以在線更新。
??? 這里,在可執行代碼的FLASH燒錄方面,不再采用hex500.exe文件對*.out文件進行轉換,而是巧妙地采用“兩次下載法”,利用DSP對FLASH的寫操作將可執行代碼直接寫到外掛FLASH中去。
??? 本文以一片TMS320VC5416外掛一片SST69VF200 FLASH存儲器為例,介紹如何通過DSP對FLASH在系統編程,以實現DSP并行自舉的具體方法,并給出了DSP 的C程序部分源碼。
1 DSP和FLASH構成的自舉系統
??? DSP在自舉過程中,是將外部的存儲區當作數據存儲區來訪問的。因此在設計時,雖然FLASH內部存儲的是代碼,但對于DSP而言依然是數據。由于TMS320VC5416的數據總線是16位的,所以選用16位總線接口的FLASH存儲器。數據區中的0x0000~0x7FFF對應為DSP內部的RAM區,所以DSP要對外部的FLASH操作只能訪問0x8000~0xFFFF的32K字存儲區。
??? DSP自舉系統的基本連接如圖1所示。自舉系統中選用的FLASH為SST公司的SS39VF200,該FLASH存儲器為128K字容量,16位總線接口。為了簡化起見,圖中沒有對FLASH進行分頁處理,僅僅是把它當成外部數據存儲區來處理。由于SS39VF200的讀信號和寫信號是分開的,且寫信號的優先級高于讀信號,而DSP的讀寫共用一個引腳,所以將DSP的讀寫信號與FLASH的寫信號相連接,而將其讀信號直接接地,FLASH的片選信號直接與DSP的數據區選擇信號相連接,這表明將FLASH作為DSP的數據存儲區進行訪問。如上所述,DSP只能訪問外部數據區的0x8000~0xFFFF區域的數據,因此對于39VF200而言,可以將最高位地址A16直接接地。對于上述電路連接方法,39VF200存儲器從0x0000開始的32K字的空間是無法訪問的。

?


2 TMS320VC5416對 SST39VF200的在系統編程
2.1 SS39VF200芯片介紹
??? SST39VF200的操作不像一般的RAM和ROM,除了讀數據的過程一樣外,其它的操作都不相同,必須按照一定的順序來執行。SST39VF200的常用操作如表1所示。

?


2.2 TMS320VC5416對 SST39VF200的編程操作
??? 通常,在對FLASH進行編程之前,必須將FLASH中待寫的區域進行擦除,然后才能進行編程操作。需要注意的是,每次對FLASH發出操作命令后,必須等到FLASH完成本次操作才能發送下一個操作命令。判斷FLASH執行命令完畢的方式有兩種,一是利用數據位D7判斷,如果FLASH尚未完成操作,則讀該位總是為低,完成操作后該位變成高;二是利用數據位D6判斷,如果FLASH尚未完成操作,則相鄰兩次讀到的D6位的值不同。當兩次讀到的D6位的值都是一樣時,表明FLASH完成了本次操作。
??? 下面以數據位D6判斷操作完成與否,說明TMS320VC5416對SST39VF200寫操作的具體過程,其它操作過程與該過程基本相同。
??? void Word_Program(uint *Ad,uint DQ) //Ad為編程地址,DQ為編程數據
??? {
??? ?? uint? *Ad_Temp,Temp1,Temp2;??? ?//定義臨時地址指針和數據變量
??? ?? Ad_Temp=(uint *)(0x5555 );?????? ?//第一個寫周期
??? ?? *Ad_Temp=0x00AA;???????????? ??//給地址0x5555寫數據0x00AA
??? ?? Ad_Temp=(uint *)(0x2AAA );????? ?//第二個寫周期
??? ?? *Ad_Temp=0x0055;????????????? ??//給地址0x2AAA寫數據0x0055
??? ?? Ad_Temp=(uint *)(0x5555);??????? ?//第三個寫周期
??? ?? *Ad_Temp=0x00A0;????????????? ??//給地址0x5555寫數據0x00A0
??? ?? *Ad=DQ;?????????????????????? ???//給編程地址寫編程數據
??? ?? Again: Temp1=*Ad & 0x0040;????? //兩次讀D6(Toggle ?????????Bit)
??? ???????? ?Temp2=*Ad & 0x0040;
??? ?? if(Temp1!=Temp2)??????????????? ??//判斷是否命令執行結束,否則繼續讀Toggle Bit
?? ????? goto Again;
??? }
3? TMS320VC5416的并行自舉
??? 通過在系統編程可以實現將可執行代碼寫入FLASH。如何確定FLASH中用戶程序代碼的存放格式并正確自舉以實現脫機運行是整個在系統編程的重點。
3.1 自舉表
??? 在介紹DSP并行自舉過程之前,必須對DSP的自舉表加以說明。自舉表需按照TI公司規定的格式來創建。該表中存放有DSP初始化時要用到的特殊寄存器如SWWSR、BSCR等的值、程序入口地址、各段的目標首地址和長度以及要執行的代碼。自舉表的格式如表2所示。

?


3.2 并行自舉過程
??? 完整的并行自舉的流程圖如圖 2所示。

?


??? SST39VF200 FLASH存儲器是16位的,所以實際采用的是16位并行自舉,DSP內部的引導程序從數據空間地址0xFFFF讀取自舉表首地址,最后從自舉表中將可執行代碼搬移到DSP對應的RAM中。
3.3 “兩次下載法”實現并行自舉
??? 如何按照規定的自舉表格式將表中的各項內容寫入到外掛的FLASH中去?普遍的做法是利用hex500.exe文件將*.out文件轉換成*.hex格式,然后讀取*.hex文件,將其寫入FLASH。這里采用一種更簡便的“兩次下載法”將自舉表寫入FLASH,整個過程無需文件轉換和文件讀取,并且完成此過程的代碼很小,幾乎不占用DSP內部的存儲空間。
??? 所謂的“兩次下載法”就是通過仿真器對DSP進行兩次加載來完成自舉表的建立。第一次加載用戶希望自舉的可執行代碼,稱為代碼1,加載完后不運行此代碼;緊接著加載建立自舉表的代碼,稱為代碼2。代碼1是DSP脫機運行時的代碼,代碼2僅僅是把代碼1按照自舉表的格式寫入到外部FLASH中的代碼。需要注意的是,代碼1和代碼2在分配程序存儲空間時不可以重疊,而且代碼2的數據空間必須包含代碼1和外部FLASH共同占有的空間,因為它要把代碼1按訪問數據的方法寫到外部FLASH中。由于下載完代碼1后并沒有運行,而是緊接著下載代碼2,兩者的程序存儲區又不重疊,因此下載完代碼2后,先前下載的代碼1仍舊在DSP中,只是被代碼2看成數據而已?!皟纱蜗螺d法”的具體操作步驟如下:
??? (1)將DSP的MP/MC引腳置高,讓DSP工作在微處理器方式。
??? (2)將代碼1通過仿真器下載到DSP中,但不運行該代碼。
??? (3)將代碼2通過仿真器下載到DSP中,運行此代碼。
??? (4)代碼2運行結束后,去掉仿真器,并將MP/MC引腳置低,讓DSP工作在微型計算機方式。
??? (5)復位DSP,觀察程序運行的結果是否正常。
??? “兩次下載法”中兩次代碼的存儲區分配情況如圖3所示。

?


??? 圖中,代碼1中的數據段起始地址為0xA,數據段結束地址為0xB,代碼段起始地址為0xC,代碼段結束地址為0xD,其中0xB和0xC可以是同一地址,也可以是不同地址;代碼2中的數據段起始地址為0xG,數據段結束地址為0xFFFF,代碼段起始地址為0xE,代碼段結束地址為0xF,其中0xF和0xG可以是同一地址,也可以是不同地址。對TMS320VC5416而言,因其0x0000~0x7FFF對應的是內部的32K字空間,所以兩個表中的地址大小關系為0xG<0xC<0xD<0x8000。
??? 基于上述思想,假設代碼1的程序段為0x4000~0x7FFF,數據段為0x3000~0x3FFF,代碼2的程序段為0x2000~0x2FFF,數據段為0x3000~0xFF7F(需要注意的是,代碼2的數據段必須包含代碼1的代碼段和FLASH所占據的地址空間,代碼2的代碼段絕對不能與代碼1的代碼段有重疊),外部FLASH占據的地址空間為0x8000~0xFF7F,自舉表的首地址從0x8000開始,并且SWWSR和BSCR的值分別為0x0E38和0x8806,程序入口地址為0x004089,代碼1長度為16K字,代碼1的存放起始地址為0x004000,那么代碼2在FLASH中建立自舉表的程序如下:
??? UINT? I;??????????????????? ??//定義臨時變量
??? UINT? *Addr1,*Addr2;????? ?//定義臨時地址指針變量
??? Addr1=(uint *)0xffff;
??? Word_Program(Addr1,0x8000);? //在數據空間0xffff地址寫自舉表起始地址0x8000
??? Addr1=(uint *)0x8000;????? ?? //自舉表首地址
?? ? Word_Program(Addr1,0x10AA); //自舉總線寬度為16位,即第一個字為為0x10AA
? ?? Addr1++;????????????????????? ? ?//累加地址
? ?? Word_Program(Addr1, 0x0E38); //SWWSR的值
? ?? Addr1++;????????????????????? ??//累加地址
? ?? Word_Program(Addr1, 0x8806);? //BSCR的值
? ?? Addr1++;????????????????????? ??//累加地址
? ?? Word_Program(Addr1,0); ??//程序入口地址XPC為0
? ?? Addr1++;????????????????????? ??//累加地址
? ?? Word_Program(Addr1,0x4089);?? //程序入口地址PC為0x4089
? ?? Addr1++;????????????????????? ??//累加地址
?? ? Word_Program(Addr1,0x4000);?//代碼長度為0x4000
? ?? Addr1++;????????????????????? ??//累加地址
? ?? Word_Program(Addr1,0);????? ?//目標程序入口地址XPC為0
? ?? Addr1++;????????????????????? ??//累加地址
?? ? Word_Program(Addr1,0x4000);?? //目標程序入口地址PC為0x4000
? ?? Addr1++;????????????????????? ??//累加地址
? ?? Addr2=(uint *)0x4000;??????? ?//代碼1起始地址
? ?? for(I=0;I<0x4000;I++)?????? ?//寫代碼1到FLASH,長度為16K字
? ????? Word_Program(Addr1++,*(Addr2++));
? ?? Word_Program(Addr1,0x0000);?? //自舉表結尾的一個字寫入0x0000,自舉表建立結束
??? 代碼2除了上面的自舉表的建立外還包括FLASH的擦除和自舉表數據的校驗。需要注意的是,在對FLASH進行寫操作之前,必須對其進行擦除,擦除部分的程序可參考前面的Word_Program()子函數。
??? 這樣,通過簡單的“兩次下載法”,利用代碼2將要脫機運行的代碼1以自舉表的格式寫到FLASH存儲器中,校驗正確后DSP即可脫機工作了。
??? 采用“兩次下載法”利用DSP自身對FLASH進行編程,可實現DSP的并行自舉。這種在系統編程的DSP自舉實現方式簡單靈活。文中給出的硬件電路僅適用于程序代碼小于32K字的系統中。在一般DSP系統中,都會有FPGA等可編程器件,利用它們可以靈活地對FLASH進行分頁操作。這樣,在程序量超過32K字的情況下,此方法也適用。
參考文獻
1 C5000 Applications:TMS320VC5416 Bootloader. Application?Report SPRA602D, March 2002
2 Data Manual:TMS320VC5416 Fixed-Point Digital Signal?Processor. Literature Number:SPRS095J,March 1999, Revised? April 2003
3 Data Sheet: 2Mbit/4Mbit/8Mbit(x16) Multi-Purpose Flash? SST39VF200/SST39VF400/ SST39 VF800. Silicon Storage?Technology Inc., 2001

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 曰批免费视频播放免费| 美女被艹免费视频| 在线观看中文字幕一区| 中国体育生gary飞机| 日本高清不卡免费| 亚洲一级毛片中文字幕| 波多野结衣中文字幕电影| 制服丝袜日韩中文字幕在线| 色欲AV无码一区二区三区| 国产成人a人亚洲精品无码| 2019中文字幕在线视频| 在线播放无码高潮的视频| 《调教办公室》在线观看| 成年人免费网站在线观看| 久久久国产乱子伦精品| 最好看的中文字幕视频2018| 亚洲伊人久久大香线蕉AV| 毛片毛片毛片毛片出来毛片| 人禽无码视频在线观看| 精品在线观看免费| 嗯啊~被触手怪女性灌液漫画| 色综合热无码热国产| 国产国产精品人在线视| 国产曰批免费视频播放免费s| 国产精品国语对白露脸在线播放| 91精品国产高清久久久久久| 大象视频在线免费观看| www.99re| 女网址www女大全小| 三级理论中文字幕在线播放| 无码av大香线蕉伊人久久| 久久亚洲春色中文字幕久久久| 日韩在线看片免费人成视频播放| 亚洲AV无码无在线观看红杏| 欧美6699在线视频免费| 亚洲人成电影网站| 欧美性猛交xxxx免费看| 亚洲欧美偷自乱图片| 毛片A级毛片免费播放| 亚洲精品成人片在线播放| 热re99久久精品国产66热|