新聞中心

EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > 基于USB2.0總線的TMS320VC5402 HPI自舉的實現(xiàn)

基于USB2.0總線的TMS320VC5402 HPI自舉的實現(xiàn)

——
作者:曹長江 馬雙寶 詹飚 武漢理工大學(xué)自動化學(xué)院 時間:2007-01-26 來源:《電子元器件應(yīng)用》 收藏


引言

當前,dsp(digital signal processor)芯片已經(jīng)廣泛應(yīng)用于通信、信號處理、雷達、圖像處理等多個領(lǐng)域,其強大、高效的運算能力,是其他微處理器無法比擬的。為充分發(fā)揮dsp運算高效的優(yōu)勢,用戶程序通常在dsp內(nèi)部ram中運行,這就需要利用dsp的自舉引導(dǎo)(boot loader)功能。在dsp多機系統(tǒng)中,hpi自舉是首選。目前,采用hpi自舉的實例主要有兩種,一種是用單片機作為主控制器,通過pc機串口或者外掛的存儲器得到要下載的dsp用戶程序數(shù)據(jù),這種方案無法實現(xiàn)系統(tǒng)與pc機之間數(shù)據(jù)的實時高速傳輸;另一種是用pc機并口里控制dsp hpi接口,從而把程序?qū)懭雂sp 的內(nèi)部ram,該方案無法滿足嵌入式系統(tǒng)的即插即用要求。

本文引用地址:http://butianyuan.cn/article/21282.htm

usb接口具有即插即用,速度快(最高可達480mbps)等特點,可成為pc機的外圍設(shè)備擴展中應(yīng)用日益廣泛的接口標準,基于usb總線對dsp實現(xiàn)hpi自舉,可以降低成本,也便于dsp與pc機的高速數(shù)據(jù)通信,鑒于此種考慮,本文介紹一種利用usb2.0接口控制芯片(cy7c68013-56pvc)實現(xiàn)tms320vc5402自舉的實現(xiàn)方案。

芯片介紹

usb2.0芯片及其gpif簡介

本方案采用的usb2.0接口控制芯片是cvpress公司的cy7c6801356pvc,該系列芯片是世界上第一款支持usb2.0的集成微控制器芯片,它集成有usb2.0收發(fā)器、智能串行接口引擎(sie)、增強的8051微處理器,通用可編程接口(gpif)、片上ram和fifo存儲器[1]。該系列芯片的智能引擎也支持usb1.1協(xié)議,因此,它具有很好兼容性。

cy7c68013與外設(shè)有主/從兩種接口方式:可編程接口gpif和slave fifo,可編程接口gpif是一個微狀態(tài)機[2],可由軟件編寫讀寫控制時序,也可以作為usb fifo的主控制器與dsp進行無縫連接,gpif可工作在自動模式,usb總線和gpif接口域直接進行數(shù)據(jù)傳輸,無需8051內(nèi)核直接參入,以此解決usb2.0高速傳輸?shù)摹捌款i”問題,gpif與8051內(nèi)核關(guān)系如圖1所示。

dsp芯片及其hpi簡介

tms320vc5402是ti公司的一款性價比極高的低功耗定點數(shù)字信號處理器(dsp),該芯片的主機接口(hpi,host port interface)被稱為hpi-8。這種hpi-8接口的最大特點是它允許主機訪問dsp的整個片內(nèi)空間。hpi接口通過hpi控制寄存器(hpic)、地址寄存器(hpia)數(shù)據(jù)寄存器(hpid)和hpi內(nèi)存塊來實現(xiàn)與主機的數(shù)據(jù)通信。主處理器對hpi的訪問由內(nèi)外兩部分組成,其中外部主要為主處理與hpi寄存器交換數(shù)據(jù),而內(nèi)部則用于為hpi寄存器與dsp存儲單元交換數(shù)據(jù)(由dma自動完成)。在進行數(shù)據(jù)地實時通信時,dsp與主機可以通過中斷信號進行握手。其具體實現(xiàn)可通過設(shè)置hpic寄存器的hint、dspint位來對對方進行中斷[3]。

硬件設(shè)計

設(shè)計原理

自舉從本質(zhì)上說就是dsp上電后,在bootloader引導(dǎo)下,獲取應(yīng)用程序并開始運行的過程,tms320vc5402上電以后,當mp/mc為低電平時,系統(tǒng)將從片內(nèi)rom的off80h開始執(zhí)行,此處的跳轉(zhuǎn)指令使程序跳轉(zhuǎn)至bootloader程序入口處(of800h處)。bootloader程序先清除ifr,并設(shè)置hpi入口點(0x7f)的值為0,置hint為低,再檢測int2是否置位(置位可以通過將hint和int2相連來實現(xiàn)),如置位則進行hip自舉[4],具過程如圖2所示。

dsp復(fù)位之后,如檢測到hpi自舉方式有效,就可以進行hpi自舉引導(dǎo),基于usb總線的hpi自舉,就是在bootloader引導(dǎo)下,通過usb接口控制芯片把程序數(shù)據(jù)由主機(pc)寫入dsp內(nèi)部ram(daram)并使dsp開始運行的過程,該自舉過程分為三個步驟:一是寫hpic,以設(shè)置hpi控制參數(shù);二是寫hpia,設(shè)置訪問dsp的首地址;三是通過hpid下載程序。

首先,推動ez-usb control panel下載cy7c68013的固件程序。當重枚舉結(jié)束,驅(qū)動程序(ezusb.sis)重新安裝成功后,在control panel中通過發(fā)送請求的方式由端點0向hpic(主要設(shè)置bob位,確定字節(jié)配合)發(fā)送兩個相同的8位控制字,而當hpic初始化完成之后,再通過端點0設(shè)置欲下載程序段到dsp中的首地址hpia。hpic、hpia設(shè)置好之后,就可以通過端點2下載dsp程序代碼段,程序代碼段需要分段下載,實際上,cy7c68013通過端點2把數(shù)據(jù)寫入hpid,然后,dsp按照hpia指定的地址,由dma自動將hpid中的數(shù)據(jù)寫到ram,接口控制時序可由gpif軟件編程控制,程序數(shù)據(jù)分段下載完畢之后,再將程序的入口地址通過端點0寫入0x7f處,在主機下載程序的過程中,dsp將一直檢測0x7f是否為0,如不為0,即判定dsp已由主機進行了hpi自舉加載,并按照該值跳轉(zhuǎn)pc指針,以開始運行,進而完成hpi自舉。

硬件電路

本設(shè)計用cy7c68013-56pvc與tms320vc5402的hpi口相連接,接口選擇gpif模式,硬件電路如圖3所示,該方案中,hcntl[1:0]與gpif的低位地址線pa3、pa2相連,以選擇需要訪問的hpi的hpia、hpic,hpid寄存器,ctl0接至hr/w,可作為讀寫控制信號,hds1與輸出信號線ctl1相連,以作為hpi訪問的選通信號,hbil與輸出信號線ctl2相連,已用于識別傳輸?shù)氖堑谝粋€字節(jié)還是第二個字節(jié),hrdy接輸入信號線rdy0。用于通過主機查詢hpi口的狀態(tài),hint、int2與int0連接,可確保hpi自舉有效,hcs接gnd,可使hpi片選信號有效,hpiena接高電平時,hpi使能,has、hds2接高電平時,信號線禁用。數(shù)據(jù)線pd[7:0]與hd[7:0]相連,可在控制時序作用下傳輸一切數(shù)據(jù)信號。hpi接口控制時序由ctl0、ctl1、ctl2引腳輸出,在自舉過程中,系統(tǒng)將關(guān)閉cy7c68013所有的中斷,若要通過中斷實現(xiàn)數(shù)據(jù)通信的握手,可以在自舉完畢打開cy7c68013的中斷。

cy7c68013的具體配置為:啟用gpif接口控制數(shù)據(jù)傳輸,gpif接口采用內(nèi)部時鐘(48mhz);端點2設(shè)置為批量傳輸輸出端點,最大傳輸值是512字節(jié),雙緩沖;終端4、8禁用。端點6可作為批量傳輸輸入端點來向主機傳輸數(shù)據(jù),需要說明的是端點6不是自舉所必需的。

軟件設(shè)計

dsp應(yīng)用程序設(shè)計

實現(xiàn)tms320vc5402 hpi自舉的前提是生成dsp應(yīng)用程序的分段hex代碼文件,在ccs中可用匯編語言,c語言等編寫應(yīng)用程序源代碼,經(jīng)匯編、鏈接、編譯后,生成可執(zhí)行的公共目標文件格式(coff)的文件,coff文件不能用于hpi自舉引導(dǎo),而需要利用ti公司的文件格式轉(zhuǎn)換工具hex00.exe,將coff文件轉(zhuǎn)換為hex格式文件[5]。格式轉(zhuǎn)換的關(guān)鍵是正確編寫hex命令文件,下面討論如何編寫這種命令文件,例如將包含text段的源程序鏈接、編譯生成test.out文件,編寫命令文件時,可利用hex500.exe將test.out轉(zhuǎn)換為對應(yīng)text段的hex文件,命令文件test為.cmd如下:

-i      //生成intel格式

test.out   //輸入文件

roms

{

page 0:rom1:org=0x2000,length=0x2000,romwidth=16,memwidth=16,

files={test1.hex}   //text段的起始地址為0x2000

}   //如有多端就可增加多個rom sections

{text:paddr=0x2000} //如有多端就可增加多個部分

在dos環(huán)境下,利用hex500.exe轉(zhuǎn)換命令文件test.cmd,就可得到test1.hex文件,通過cy7c68013把test1.hex文件寫入dsp內(nèi)部ram,再把程序的入口地址寫入0x7f處,便可完成自舉。

usb固件程序設(shè)計

cypress公司提供有usb的輔助開發(fā)工具:ez-usb control panel,gpif designer。通過gpif designer可以生成gpif波形圖及相應(yīng)的c源代碼gpif.c。cypress公司同時提供了固件程序框架,因而可把gpif.c加入固件程序框架進行開發(fā),從而提高開發(fā)效率。本方案中,固件程序設(shè)計的重點是對gpif的編程,以便生成符合hpi接口的時序的波形描述代碼,以用于控制數(shù)據(jù)傳輸,hpi自舉需要的gpif控制波形描述符為:單字節(jié)寫(兩種),fifo寫。hpia、hpic的初始化需要單字節(jié)寫控制時序,程序代碼寫入hpid需要fifo寫控制時序,若要實現(xiàn)二者的數(shù)據(jù)通信,還需要單字節(jié)讀、fifo讀等控制波形描述符。

hpic、hpia的初始值是在ezusb control panel中通過制造商請求工具欄由ep0發(fā)送的,固件程序中還要有相應(yīng)的請求處理程序,以完成具體的設(shè)置,如假定hpic請求類型的id為0xb6.hpic=0x0101(bob位為1),則請求工具欄的具體參數(shù)應(yīng)為:req=0xb6,value=0x0000,index=0xbeef,length=2,dir=0,hex bytes=0101,固件中應(yīng)加入的請求處理程序為:

case 0xb6:

{epobcl=0;          //ep0使能

while(ep01stat&bmep0bsy); //等待epo數(shù)據(jù)接收完畢

while(!hpi_rdy);      //等待hpi處理完畢

ioa=0x00;           //選擇hpic寄存器

gpifwfselect=0x1e;      //選擇寫低字節(jié)的單字節(jié)寫控制波形

while(?。╣piftrig&0x80))

{;}

xgpifsgldatlx=ep0buf[0];   //寫低字節(jié)數(shù)據(jù)

gpifwfselect=0x4e;      //選擇寫高字節(jié)的單字節(jié)寫控制波形

while(?。╣piftrig&0x80))

{;}

xgpifsgldatalx=ep0buf[1];  //寫高字節(jié)數(shù)據(jù)

break;}

設(shè)置程序下載的首地址(hpia值)的請求處理程序與設(shè)置hpic的程序基本相同,只需按照請求類型的id,來改變訪問寄存器的地址即可,訪問hpia時,hcntl[1:0]=10b,即ioa=0x08。

訪問hpid下載程序數(shù)據(jù)時,可采用大端點ep2自動打包方式(autoin=1),即將數(shù)據(jù)發(fā)送到端點后,自動傳到fifo中,等待寫hpid條件具備,再啟動gpif,以將程序數(shù)據(jù)寫入hpid,訪問hpdi可采用地址自動增加模式(hcntl[1:0]=01b),寫數(shù)據(jù)前,地址自動加1,這樣,數(shù)據(jù)便可以經(jīng)過dsp內(nèi)部dma自動寫入內(nèi)部ram,寫hpid的程序如下:

if(gpiftrig&0x80)  //gpif接口是否處于空閑狀態(tài)

{if(!(ep24fifoelgs&0x02)) //自動向量是否可以訪問ep2fifo中數(shù)據(jù)

{ioa=0x04; //選擇hpid寄存器,且訪問時地址自動增加

while(!hpi_rdy);  //等待hpi處理完畢

syncdelay;

gpiftcb1=ep2fifobch; //寫入的字節(jié)數(shù)

syncdelay;

gpiftcb0=ep2fifobcl;

syncdelay;

gpiftrig=gpif_ep2;  //啟動寫數(shù)據(jù)

syncdelay;

while(?。╣piftrig&0x80) //等待寫入完畢

{;}

syncdelay;}}

這樣程序數(shù)據(jù)就可以分段通過端點2寫入dsp內(nèi)部ram,最后再把入口地址寫入0x7f,以完成hpi自舉,值得注意的是,采用此種方式訪問hpid時,寫入hpia的初值為程序入口的一個地址,例如,寫test1.hex時,應(yīng)設(shè)定hpia=0x1fff。

為縮短開發(fā)周期,本設(shè)計采用開發(fā)包中通用驅(qū)動(ezusb.sys)和ezusb control panel進行開發(fā)、調(diào)試、也可以對通用驅(qū)動、控制面板的源程序在vc++環(huán)境(需要ddk的支持)下進行二次開發(fā),以便編譯出開發(fā)者滿意的驅(qū)動程序和上位機程序。

結(jié)束語

通過實踐證明,基于usb2.0總線dsp hpi自舉的方案是可行的,可以達到預(yù)期效果,該方案可以省掉外擴的eprom、flash及ram等程序存儲器,故可節(jié)約成本,也便于dsp軟件算法升級,而且符合嵌入式系統(tǒng)要求,有很好的應(yīng)用前景,當然,該方案還有待進一步優(yōu)化與增強,若要訪問外部存儲器,還需要編寫二次引導(dǎo)程序,以便通過該程序把內(nèi)部存儲器中的數(shù)據(jù)編譯到外部存儲器,若需dsp與主機實時通信,則需要usb固件和dsp源程序中編寫相應(yīng)的中斷服務(wù)程序。



關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉