由于DSP芯片的不斷發展,以及它處理數據速度快、處理數據量大的優勢,已經廣泛應用到數字信號處理的許多領域。在CT圖像重建系統中,DSP處理的數據需要上傳到PC機進行存儲、顯示或進行數據分析等,這就產生了PC機和DSP的數據傳輸問題。USB總線具有傳輸速度高,以及即插即用等特點,得到越來越廣泛的應用,利用USB總線實現DSP和PC機的通信,從而解決圖像信號的實時傳輸問題。Cypress公司生產的CY7C68001通用USB 2.0接口控制器是基于應用層編程的接口器件,使用簡單,開發方便。 在此,以TMS320C6416為例,討論如何使用CY7C68001對TMS32OC6416進行USB接口設計,實現DSP和PC機通信,將DSP處理過的圖像信號實時傳到計算機中。 1 DSP與USB接口的硬件設計 TMS320C6416是TI的高性能32位定點DSP,內核采用超長指令字(VLIW)體系結構,有8個功能單元、64個32 b通用寄存器。一個時鐘周期同時執行8條指令,主頻可達1 GHz,處理性能高達8 000 MIPS,支持8/16/32/64 b的數據類型。 CY7C68001用來連接微處理器或DSP的DMA從裝置,內部不含微處理器;支持高速(480 Mb/s)或全速(12 Mb/s)USB數據傳輸;提供USB 2.0協議要求的全部4種傳輸方式(控制傳輸、中斷傳輸、批量傳輸和同步傳輸),可以滿足用戶對各種類型數據傳輸的需求。 1.1 接口的硬件設計 在該設計方案中,CY7C68001通過EMIFB與TMS320C6416進行異步通信,各個引腳的連接如圖1所示。DSP控制CY7C68001完成DSP與PC之間的異步通信。CY7C68001的相關引腳在接口中的作用:INT:表明CY7C68001有數據將要被讀出,或者有中斷事件發生;READY:通知TMS320C6416可以對CY7C68001進行讀寫;FLAGA,FLAGB,FLAGC:反應由FAIFOADR[2:0]選擇的FIFO的狀態;FLAGD:為片選信號;SLOE為CY7C68001驅動數據總線;SLRD:并口讀有效信號,在SLRD有效且同步通信時,FIFO指針在每個IFCLK的上升沿遞增;PKTEND:總是高電平,將當前的緩沖區提交給USB;FD[15:0]:數據總線;FIFO[2:0]:提供與TMS320C6416接口的FIFO地址選擇。 1.2 接口的訪問 CY7C68001提供給DSP兩種軟件接口: (1)命令接口:用來訪問CY7C68001寄存器、End-point0緩沖器及描述表; (2)FIFO數據接口:用來訪問4個1 KB的FIFO中的數據。通過編程直接作為FIFO分配給。EP2,EP4,EP6,EP8。這兩個外部接口均可以通過同步或異步方式進行訪問。在此均采用異步的方式進行訪問,命令口的命令字如下: 在表1中,A/D用于地址/數據的選擇,當其為0時,表示本操作為數據讀或寫;當其為1時,表示本操作為地址寫。R/W用于讀/寫操作的選擇,當其為0時,進行寫,當其為1時,進行讀。A[5:0]用于地址/數據的選擇,當Bit7=0時,D[3:0]為數據半字節;D[5:4]為未用,命令字為8位,故命令字數據分二次讀出或寫入;當Bit7=1時,D[5:0]包含將要尋址的命令寄存器地址。 2 USB軟件設計 USB的軟件設計包括三方面:固件設計、驅動程序設計和主機端應用程序設計。 2.1 固件設計 所有基于微控制器及外圍電路功能設備的正常工作都離不開固件的參與,固件的作用就是輔助硬件工作。沒有固件的參與和控制,硬件設備無法實現預期的功能。USB設備也不例外,必須編寫固件程序來輔助硬件完成USB的通信任務。由于采用不帶MCU內核的USB接口芯片,USB的應用層協議應該通過對TMS320C6416的編程來實現,USB固件的加載必須靠DSP的控制CY7C68001來完成。在CCS中用C語言完成固件程序的編寫,程序流程圖如圖2所示。 根據程序流程圖,固件設計思路如下: (1)初始化工作。包括設置一些特殊功能寄存器的初值,以實現所需的設備屬性或功能,例如:配置端口、使能端點、開中斷。該設計中,使CY7C68001工作于異步FIFO模式,將4 KB的FIFO對應到兩個端點(Endpoint),即Endpoint2和Endpoint6。 (2)輔助硬件完成設備的重新列舉過程。包括模擬設備的斷開與重新連接,對接收到的設置包進行分析判斷,從而對主機的設備請求做出適當的響應,完成主機對設備的配置任務。 (3)對中斷的處理。CY7C68001有6個中斷源,可以分別通過中斷使能對寄存器的各位進行設置。一旦中斷事件發生,CY7C68001的INT引腳就被置低,并且置中斷使能寄存器的相應位(即中斷使能寄存器同時充當中斷標志寄存器,中斷使能寄存器具有讀寫屬性)。當中斷發生時,中斷標志寄存器的狀態字映射到FD[7:0];中斷發生后。DSP對CY7C68001簡單的一次讀操作即可獲取中斷信息,識別中斷源并進行相應處理。相對于中斷標志寄存器的讀操作,其他對CY7C68001寄存器的讀操作通常要先發送一次請求,并且收到READY響應后.才可以讀取數據。 (4)數據的接收與發送。在讀數據時,應首先判斷CY7C68001的FIFO2是否為空,如果不為空,才將數據讀進來。在寫數據時,還要判斷要寫的數據個數是否為512 B的整倍數,如果不是,則使用PKTEND信號來標識數據包的結束。EP2和EP6分別對應存放USB需要上傳與接收的數據。其中,EP2為OUT型,負責從主機接收數據;EP6為IN型,負責向主機發送數據。EP2和EP6均采用批量(BULK)傳輸方式,這種傳輸方式具有數據可靠,傳輸速率高等特點,特別適合大批量數據傳輸。部分關鍵代碼如下: DSP讀端點2中的數據: 2.2 驅動程序 在Windows平臺下,USB驅動程序由三部分組成:USB設備驅動程序、USB總線驅動程序和USB主控制器驅動程序。它們必須遵循Win32驅動程序模型(WDM)。其中,Windows操作系統已經提供了處于驅動程序棧底的USB主控制器驅動程序和USB總線驅動程序(USBD.SYS)。USB設備的驅動程序主要是通過調用USBD.SYS來實現PC機與USB總線的數據交換。USB驅動程序主要完成以下功能: (1)發現、配置、關閉USB設備。通過一系列有關即插即用(Plug and Play)的派遣函數來完成。例如Ezusb_PnPAddDevice(),Ezusb_DispatchPnp()等函數。 (2)驅動程序與應用函數的接口。像Ezusb_Creat(),Ezusb_Close()等函數。應用程序調用Ezusb_Create()后,返回惟一的Windows句柄后,才能調用驅動程序的其他函數,完成驅動程序對CY7C68001的一系列操作和數據傳送。應用程序通過調用API函數CreateFile()來實現對Ezusb_Create()的訪問。 (3)控制與數據傳送接口。這是驅動程序的主要部分。它是Windows的異步I/O操作。應用程序使用標準Win32API函數DeviceIoControl()來執行這樣的操作。在驅動一方,這個DeviceloControl()調用被轉化成一個帶IRP_MJ_DEVICE_CONTROL功能碼的IRP。像讀取與寫入FIFO數據、endpoint0的操作均是通過異步I/O的方式來完成的。 2.3 主機應用程序 USB主機應用程序是計算機中完成特定功能的程序,其關鍵是實現從USB外設讀取或發送特定數量的數據、USB標準設備請求和特定的命令等。另外,可以、對數據做進一步的處理,如:存儲、顯示、快速傅里葉變換等。主機應用程序的編寫使用VC編譯環境中的API函數實現。應用程序的編程方法與串口編程類似。首先必須查找設備,調用Win32函數CreateFilea()打開設備的句柄;然后調用Win32函數DeviceloControl()就可以進行數據讀寫和控制操作;最后關閉設備句柄。在VC++6.0中用C++編寫簡單的上位機測試程序,得到測試結果如圖3所示。 3 結 語 在CT圖像重建系統中,高性能的DSP芯片具有高速的數據處理能力,利用設計的USB接口,能夠快速方便地實現實時傳輸。經測試,該設計的USB接口傳輸速度可達35 Mb/s以上,具有較高的實用價值和良好的應用前景,而且對于使用其他微處理器開發基于CY7C68001的USB 2.0接口也有很好的借鑒作用。 |