<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于TMS320C6416的USB數(shù)據(jù)傳輸系統(tǒng)設(shè)計

          基于TMS320C6416的USB數(shù)據(jù)傳輸系統(tǒng)設(shè)計

          作者: 時間:2009-11-13 來源:網(wǎng)絡(luò) 收藏

          引 言

          由于DSP芯片的不斷發(fā)展,以及它處理數(shù)據(jù)速度快、處理數(shù)據(jù)量大的優(yōu)勢,已經(jīng)廣泛應(yīng)用到數(shù)字信號處理的許多領(lǐng)域。在CT圖像重建系統(tǒng)中,DSP處理的數(shù)據(jù)需要上傳到PC機(jī)進(jìn)行存儲、顯示或進(jìn)行數(shù)據(jù)分析等,這就產(chǎn)生了PC機(jī)和DSP的問題。總線具有傳輸速度高,以及即插即用等特點(diǎn),得到越來越廣泛的應(yīng)用,利用總線實現(xiàn)DSP和PC機(jī)的通信,從而解決圖像信號的實時傳輸問題。Cypress公司生產(chǎn)的CY7C68001通用 2.0接口控制器是基于應(yīng)用層編程的接口器件,使用簡單,開發(fā)方便。

          在此,以為例,討論如何使用CY7C68001對TMS32OC6416進(jìn)行USB接口設(shè)計,實現(xiàn)DSP和PC機(jī)通信,將DSP處理過的圖像信號實時傳到計算機(jī)中。

          1 DSP與USB接口的硬件設(shè)計

          是TI的高性能32位定點(diǎn)DSP,內(nèi)核采用超長指令字(VLIW)體系結(jié)構(gòu),有8個功能單元、64個32 b通用寄存器。一個時鐘周期同時執(zhí)行8條指令,主頻可達(dá)1 GHz,處理性能高達(dá)8 000 MIPS,支持8/16/32/64 b的數(shù)據(jù)類型。

          CY7C68001用來連接微處理器或DSP的DMA從裝置,內(nèi)部不含微處理器;支持高速(480 Mb/s)或全速(12 Mb/s)USB;提供USB 2.0協(xié)議要求的全部4種傳輸方式(控制傳輸、中斷傳輸、批量傳輸和同步傳輸),可以滿足用戶對各種類型的需求。

          1.1 接口的硬件設(shè)計

          在該設(shè)計方案中,CY7C68001通過EMIFB與進(jìn)行異步通信,各個引腳的連接如圖1所示。DSP控制CY7C68001完成DSP與PC之間的異步通信。CY7C68001的相關(guān)引腳在接口中的作用:INT:表明CY7C68001有數(shù)據(jù)將要被讀出,或者有中斷事件發(fā)生;READY:通知TMS320C6416可以對CY7C68001進(jìn)行讀寫;FLAGA,F(xiàn)LAGB,F(xiàn)LAGC:反應(yīng)由FAIFOADR[2:0]選擇的FIFO的狀態(tài);FLAGD:為片選信號;SLOE為CY7C68001驅(qū)動數(shù)據(jù)總線;SLRD:并口讀有效信號,在SLRD有效且同步通信時,F(xiàn)IFO指針在每個IFCLK的上升沿遞增;PKTEND:總是高電平,將當(dāng)前的緩沖區(qū)提交給USB;FD[15:0]:數(shù)據(jù)總線;FIFO[2:0]:提供與TMS320C6416接口的FIFO地址選擇。

          1.2 接口的訪問

          CY7C68001提供給DSP兩種軟件接口:

          (1)命令接口:用來訪問CY7C68001寄存器、End-point0緩沖器及描述表;

          (2)FIFO數(shù)據(jù)接口:用來訪問4個1 KB的FIFO中的數(shù)據(jù)。通過編程直接作為FIFO分配給。EP2,EP4,EP6,EP8。這兩個外部接口均可以通過同步或異步方式進(jìn)行訪問。在此均采用異步的方式進(jìn)行訪問,命令口的命令字如下:

          在表1中,A/D用于地址/數(shù)據(jù)的選擇,當(dāng)其為0時,表示本操作為數(shù)據(jù)讀或?qū)?;?dāng)其為1時,表示本操作為地址寫。R/W用于讀/寫操作的選擇,當(dāng)其為0時,進(jìn)行寫,當(dāng)其為1時,進(jìn)行讀。A[5:0]用于地址/數(shù)據(jù)的選擇,當(dāng)Bit7=0時,D[3:0]為數(shù)據(jù)半字節(jié);D[5:4]為未用,命令字為8位,故命令字?jǐn)?shù)據(jù)分二次讀出或?qū)懭耄划?dāng)Bit7=1時,D[5:0]包含將要尋址的命令寄存器地址。

          2 USB軟件設(shè)計

          USB的軟件設(shè)計包括三方面:固件設(shè)計、驅(qū)動程序設(shè)計和主機(jī)端應(yīng)用程序設(shè)計。

          2.1 固件設(shè)計

          所有基于微控制器及外圍電路功能設(shè)備的正常工作都離不開固件的參與,固件的作用就是輔助硬件工作。沒有固件的參與和控制,硬件設(shè)備無法實現(xiàn)預(yù)期的功能。USB設(shè)備也不例外,必須編寫固件程序來輔助硬件完成USB的通信任務(wù)。由于采用不帶MCU內(nèi)核的USB接口芯片,USB的應(yīng)用層協(xié)議應(yīng)該通過對TMS320C6416的編程來實現(xiàn),USB固件的加載必須靠DSP的控制CY7C68001來完成。在CCS中用C語言完成固件程序的編寫,程序流程圖如圖2所示。

          根據(jù)程序流程圖,固件設(shè)計思路如下:

          (1)初始化工作。包括設(shè)置一些特殊功能寄存器的初值,以實現(xiàn)所需的設(shè)備屬性或功能,例如:配置端口、使能端點(diǎn)、開中斷。該設(shè)計中,使CY7C68001工作于異步FIFO模式,將4 KB的FIFO對應(yīng)到兩個端點(diǎn)(Endpoint),即Endpoint2和Endpoint6。

          (2)輔助硬件完成設(shè)備的重新列舉過程。包括模擬設(shè)備的斷開與重新連接,對接收到的設(shè)置包進(jìn)行分析判斷,從而對主機(jī)的設(shè)備請求做出適當(dāng)?shù)捻憫?yīng),完成主機(jī)對設(shè)備的配置任務(wù)。

          (3)對中斷的處理。CY7C68001有6個中斷源,可以分別通過中斷使能對寄存器的各位進(jìn)行設(shè)置。一旦中斷事件發(fā)生,CY7C68001的INT引腳就被置低,并且置中斷使能寄存器的相應(yīng)位(即中斷使能寄存器同時充當(dāng)中斷標(biāo)志寄存器,中斷使能寄存器具有讀寫屬性)。當(dāng)中斷發(fā)生時,中斷標(biāo)志寄存器的狀態(tài)字映射到FD[7:0];中斷發(fā)生后。DSP對CY7C68001簡單的一次讀操作即可獲取中斷信息,識別中斷源并進(jìn)行相應(yīng)處理。相對于中斷標(biāo)志寄存器的讀操作,其他對CY7C68001寄存器的讀操作通常要先發(fā)送一次請求,并且收到READY響應(yīng)后.才可以讀取數(shù)據(jù)。

          (4)數(shù)據(jù)的接收與發(fā)送。在讀數(shù)據(jù)時,應(yīng)首先判斷CY7C68001的FIFO2是否為空,如果不為空,才將數(shù)據(jù)讀進(jìn)來。在寫數(shù)據(jù)時,還要判斷要寫的數(shù)據(jù)個數(shù)是否為512 B的整倍數(shù),如果不是,則使用PKTEND信號來標(biāo)識數(shù)據(jù)包的結(jié)束。EP2和EP6分別對應(yīng)存放USB需要上傳與接收的數(shù)據(jù)。其中,EP2為OUT型,負(fù)責(zé)從主機(jī)接收數(shù)據(jù);EP6為IN型,負(fù)責(zé)向主機(jī)發(fā)送數(shù)據(jù)。EP2和EP6均采用批量(BULK)傳輸方式,這種傳輸方式具有數(shù)據(jù)可靠,傳輸速率高等特點(diǎn),特別適合大批量數(shù)據(jù)傳輸。部分關(guān)鍵代碼如下:

          DSP讀端點(diǎn)2中的數(shù)據(jù):

          2.2 驅(qū)動程序

          在Windows平臺下,USB驅(qū)動程序由三部分組成:USB設(shè)備驅(qū)動程序、USB總線驅(qū)動程序和USB主控制器驅(qū)動程序。它們必須遵循Win32驅(qū)動程序模型(WDM)。其中,Windows操作系統(tǒng)已經(jīng)提供了處于驅(qū)動程序棧底的USB主控制器驅(qū)動程序和USB總線驅(qū)動程序(USBD.SYS)。USB設(shè)備的驅(qū)動程序主要是通過調(diào)用USBD.SYS來實現(xiàn)PC機(jī)與USB總線的數(shù)據(jù)交換。USB驅(qū)動程序主要完成以下功能:

          (1)發(fā)現(xiàn)、配置、關(guān)閉USB設(shè)備。通過一系列有關(guān)即插即用(Plug and Play)的派遣函數(shù)來完成。例如Ezusb_PnPAddDevice(),Ezusb_DispatchPnp()等函數(shù)。

          (2)驅(qū)動程序與應(yīng)用函數(shù)的接口。像Ezusb_Creat(),Ezusb_Close()等函數(shù)。應(yīng)用程序調(diào)用Ezusb_Create()后,返回惟一的Windows句柄后,才能調(diào)用驅(qū)動程序的其他函數(shù),完成驅(qū)動程序?qū)Y7C68001的一系列操作和數(shù)據(jù)傳送。應(yīng)用程序通過調(diào)用API函數(shù)CreateFile()來實現(xiàn)對Ezusb_Create()的訪問。

          (3)控制與數(shù)據(jù)傳送接口。這是驅(qū)動程序的主要部分。它是Windows的異步I/O操作。應(yīng)用程序使用標(biāo)準(zhǔn)Win32API函數(shù)DeviceIoControl()來執(zhí)行這樣的操作。在驅(qū)動一方,這個DeviceloControl()調(diào)用被轉(zhuǎn)化成一個帶IRP_MJ_DEVICE_CONTROL功能碼的IRP。像讀取與寫入FIFO數(shù)據(jù)、endpoint0的操作均是通過異步I/O的方式來完成的。

          2.3 主機(jī)應(yīng)用程序

          USB主機(jī)應(yīng)用程序是計算機(jī)中完成特定功能的程序,其關(guān)鍵是實現(xiàn)從USB外設(shè)讀取或發(fā)送特定數(shù)量的數(shù)據(jù)、USB標(biāo)準(zhǔn)設(shè)備請求和特定的命令等。另外,可以、對數(shù)據(jù)做進(jìn)一步的處理,如:存儲、顯示、快速傅里葉變換等。主機(jī)應(yīng)用程序的編寫使用VC編譯環(huán)境中的API函數(shù)實現(xiàn)。應(yīng)用程序的編程方法與串口編程類似。首先必須查找設(shè)備,調(diào)用Win32函數(shù)CreateFilea()打開設(shè)備的句柄;然后調(diào)用Win32函數(shù)DeviceloControl()就可以進(jìn)行數(shù)據(jù)讀寫和控制操作;最后關(guān)閉設(shè)備句柄。在VC++6.0中用C++編寫簡單的上位機(jī)測試程序,得到測試結(jié)果如圖3所示。

          3 結(jié) 語

          在CT圖像重建系統(tǒng)中,高性能的DSP芯片具有高速的數(shù)據(jù)處理能力,利用設(shè)計的USB接口,能夠快速方便地實現(xiàn)實時傳輸。經(jīng)測試,該設(shè)計的USB接口傳輸速度可達(dá)35 Mb/s以上,具有較高的實用價值和良好的應(yīng)用前景,而且對于使用其他微處理器開發(fā)基于CY7C68001的USB 2.0接口也有很好的借鑒作用。



          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();