基于TMS320C6713的USB數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)
其中,通過Read_SX2reg()可判斷FIFO中的數(shù)據(jù)是否被發(fā)送,若被發(fā)送,則FIFO寄存器標(biāo)志為空,反之,標(biāo)志為滿。SX2_Fifo_Write()向相應(yīng)的FIFO中寫入傳輸數(shù)據(jù)。其中ENDPOINT6表示使用EP6端點(diǎn)進(jìn)行發(fā)送,ping+pingcnt表示要發(fā)送數(shù)據(jù)的首地址,F(xiàn)ifoLength為發(fā)送數(shù)據(jù)的長(zhǎng)度。系統(tǒng)采用USB 2.0進(jìn)行數(shù)據(jù)傳輸,每個(gè)EP的FIFO緩沖大小為512 B,CY7C68001采用16位數(shù)據(jù)線與TMS320C613相連,故FifoLength大小設(shè)為256 B。
由于TMS320C6713通過EMIF的CE3存儲(chǔ)空間可以外擴(kuò)USB 2.0接口,還需對(duì)。EMIF接口的CE3寄存器進(jìn)行配置,將USB接口設(shè)為16位異步存儲(chǔ)接口,設(shè)定讀/寫的建立時(shí)間(Setup)、促發(fā)時(shí)間(Strobe)、保持時(shí)間,使其滿足CY7C68001的讀/寫時(shí)序要求。具體配置如下:
4 PC端應(yīng)用程序
PC主機(jī)端需要編寫USB設(shè)備驅(qū)動(dòng)程序和應(yīng)用程序。USB設(shè)備驅(qū)動(dòng)程序主要通過調(diào)用微軟的USBD.SYS來(lái)實(shí)現(xiàn)PC機(jī)于USB總線的數(shù)據(jù)交換,采用WDM(Windows Driver Mode)驅(qū)動(dòng)程序進(jìn)行編寫,分為USB底層驅(qū)動(dòng)程序和USB功能驅(qū)動(dòng)程序。USB底層驅(qū)動(dòng)程序由操作系統(tǒng)提供,USB功能驅(qū)動(dòng)程序由設(shè)備開發(fā)者進(jìn)行編寫。
PC端應(yīng)用程序采用VC++6.0編寫應(yīng)用程序,首先調(diào)用OpenDriver()打開USB接口設(shè)備,獲得設(shè)備的句柄hDevice,之后調(diào)用Sx2SendVendor Req()函數(shù)向外設(shè)發(fā)出命令,讀取USB配置,最后調(diào)用Sx2BulkdataTrans()進(jìn)行數(shù)據(jù)傳輸,通過調(diào)用CFile類將接收到的數(shù)據(jù)存放在文件名為“Collection.txt”的文本文件中。程序使用多線程技術(shù),使得應(yīng)用程序?qū)SB數(shù)據(jù)傳輸在后臺(tái)進(jìn)行處理,應(yīng)用程序前臺(tái)還可進(jìn)行其他操作。
程序簡(jiǎn)單實(shí)現(xiàn)如下功能:當(dāng)點(diǎn)擊“Start Sample”按鈕時(shí),開始進(jìn)行USB數(shù)據(jù)傳輸,點(diǎn)擊“Stop Sample”按鈕時(shí),停止USB數(shù)據(jù)傳輸。采樣的多通道數(shù)據(jù)在應(yīng)用程序中進(jìn)行圖像顯示,方便對(duì)數(shù)據(jù)的判斷。
程序關(guān)鍵函數(shù)如下:
函數(shù)中myRequest的成員變量與DSP中斷程序中SetupBuff緩沖區(qū)的 8 B數(shù)據(jù)相對(duì)應(yīng),Sx2SendVendotReq()通過調(diào)用Windows API函數(shù)Devi ceIoControl()向DSP中發(fā)送命令,DSP端程序需與之配合,返回相應(yīng)的數(shù)據(jù),完成讀取USB配置。
通過對(duì)函數(shù)中bulkControl的成員變量pipenumber設(shè)置,確定PC主機(jī)端與CY7C68001的哪個(gè)端點(diǎn)進(jìn)行數(shù)據(jù)傳輸,Sx2BulkdataTrans()也通過調(diào)用Windows API函數(shù)DeviceIoControl()向DSP中發(fā)送讀/寫數(shù)據(jù)命令,被傳輸?shù)臄?shù)據(jù)保存在buffer中。
評(píng)論