基于DSP的USB數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)
2.2 驅(qū)動(dòng)程序
在Windows平臺(tái)下,USB驅(qū)動(dòng)程序由三部分組成:USB設(shè)備驅(qū)動(dòng)程序、USB總線驅(qū)動(dòng)程序和USB主控制器驅(qū)動(dòng)程序。它們必須遵循Win32驅(qū)動(dòng)程序模型(WDM)。其中,Windows操作系統(tǒng)已經(jīng)提供了處于驅(qū)動(dòng)程序棧底的USB主控制器驅(qū)動(dòng)程序和USB總線驅(qū)動(dòng)程序(USBD.SYS)。USB設(shè)備的驅(qū)動(dòng)程序主要是通過(guò)調(diào)用USBD.SYS來(lái)實(shí)現(xiàn)PC機(jī)與USB總線的數(shù)據(jù)交換。USB驅(qū)動(dòng)程序主要完成以下功能:
(1)發(fā)現(xiàn)、配置、關(guān)閉USB設(shè)備。通過(guò)一系列有關(guān)即插即用(Plug and Play)的派遣函數(shù)來(lái)完成。例如Ezusb_PnPAddDevice(),Ezusb_DispatchPnp()等函數(shù)。
(2)驅(qū)動(dòng)程序與應(yīng)用函數(shù)的接口。像Ezusb_Creat(),Ezusb_Close()等函數(shù)。應(yīng)用程序調(diào)用Ezusb_Create()后,返回惟一的Windows句柄后,才能調(diào)用驅(qū)動(dòng)程序的其他函數(shù),完成驅(qū)動(dòng)程序?qū)Y7C68001的一系列操作和數(shù)據(jù)傳送。應(yīng)用程序通過(guò)調(diào)用API函數(shù)CreateFile()來(lái)實(shí)現(xiàn)對(duì)Ezusb_Create()的訪問(wèn)。
(3)控制與數(shù)據(jù)傳送接口。這是驅(qū)動(dòng)程序的主要部分。它是Windows的異步I/O操作。應(yīng)用程序使用標(biāo)準(zhǔn)Win32API函數(shù)DeviceIoControl()來(lái)執(zhí)行這樣的操作。在驅(qū)動(dòng)一方,這個(gè)DeviceloControl()調(diào)用被轉(zhuǎn)化成一個(gè)帶IRP_MJ_DEVICE_CONTROL功能碼的IRP。像讀取與寫入FIFO數(shù)據(jù)、endpoint0的操作均是通過(guò)異步I/O的方式來(lái)完成的。
2.3 主機(jī)應(yīng)用程序
USB主機(jī)應(yīng)用程序是計(jì)算機(jī)中完成特定功能的程序,其關(guān)鍵是實(shí)現(xiàn)從USB外設(shè)讀取或發(fā)送特定數(shù)量的數(shù)據(jù)、USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求和特定的命令等。另外,可以、對(duì)數(shù)據(jù)做進(jìn)一步的處理,如:存儲(chǔ)、顯示、快速傅里葉變換等。主機(jī)應(yīng)用程序的編寫使用VC編譯環(huán)境中的API函數(shù)實(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++編寫簡(jiǎn)單的上位機(jī)測(cè)試程序,得到測(cè)試結(jié)果如圖3所示。本文引用地址:http://butianyuan.cn/article/152289.htm
3 結(jié) 語(yǔ)
在CT圖像重建系統(tǒng)中,高性能的DSP芯片具有高速的數(shù)據(jù)處理能力,利用設(shè)計(jì)的USB接口,能夠快速方便地實(shí)現(xiàn)實(shí)時(shí)傳輸。經(jīng)測(cè)試,該設(shè)計(jì)的USB接口傳輸速度可達(dá)35 Mb/s以上,具有較高的實(shí)用價(jià)值和良好的應(yīng)用前景,而且對(duì)于使用其他微處理器開發(fā)基于CY7C68001的USB 2.0接口也有很好的借鑒作用。
評(píng)論