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