新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ISP1581的USB數據采集系統的實現

        基于ISP1581的USB數據采集系統的實現

        作者: 時間:2013-09-11 來源:網絡 收藏

          本設計中選用了Philips公司的2.0接口芯片,該芯片屬于純粹的接口芯片。這類接口芯片價格較低,接口方便,靈活性高,針對不同的硬件環境可以配合多種MCU使用,如單片機、DSP、FPGA。支持2種工作模式:通用處理器模式和斷開總線模式。本設計中采用DSP來控制,連接方式選用通用處理器模式,原理圖如圖3所示。


          2 USB接口軟件開發

          軟件分為USB固件程序開發和USB設備驅動程序開發兩大部分。

          2.1 USB固件程序開發

          所有基于微處理器及其外圍電路的功能設備的正常工作都離不開固件的參與,固件的作用就是輔助硬件,即控制硬件來完成預期的功能,如沒有固件的參與和控制,硬件設備只是芯片簡單的堆砌,無法實現預期的功能,如同一臺沒有安裝操作系統的計算機,無法正常工作。因此,用戶必須編寫固件程序來輔助硬件完成USB通信任務。具體如下:

          (1)初始化。主要是設置一些特殊寄存器的初值,以實現所需的設備屬性或功能,例如開中斷、使能端點、配置端口等。

          (2)輔助硬件完成設備的重新枚舉(ReNumeration)過程。包括模擬設備的斷開與重新連接,對收到的設置包進行分析判斷,從而對主設備請求做出適當的響應,完成對設備的配置任務。

          (3)對中斷的處理。

          (4)數據的接收和發送。

          (5)外圍電路的控制。

          固件程序設計成中斷驅動模式,采用模塊化設計,其總體結構如圖4所示。


          各模塊的主要功能如下:

          (1)主程序:完成DSP及USB接口芯片的初始化、數據發送/接收標志位的判斷及中斷請求等待。

          (2)中斷服務程序:中斷服務程序是整個固件程序設計的重點。首先通過讀取ISP1581中斷寄存器的值判斷所發生中斷的類型,然后根據具體的中斷類型進入相應的處理子程序或設置相應的標志位。中斷服務程序中需要處理的有總線復位中斷、高速狀態變化中斷、SETUP中斷及端點的IN/OUT中斷。在所有的中斷處理程序中,EP0SETUP中斷處理是最重要的,它是USB設備與PC機間建立通信鏈路的基礎。

          (3)請求處理程序:USB標準請求處理程序負責處理枚舉階段主機發給設備的標準請求,以及正常工作時主機發送的廠商請求。USB2.0協議中規定了11種USB標準請求,對這11種標準請求作出正確的響應是設備成功枚舉的重中之重。當固件接收到第1個SETUP中斷后,就進入USB枚舉過程,其過程是由主機發出一系列USB標準設備請求并要求及時得到設備響應,如果不需要進行操作,也必須指示一個空響應,使主機能為該設備準備其所請求的資源,建立好兩者之間的信息溝通機制。

          (4)數據接收/發送程序:當用戶通過主機端應用程序向設備索要數據或向設備發送數據時,DSP調用數據發送/接收子程序完成數據的發送/接收。數據的發送和接收過程如下:

          發送數據:選擇端點索引→寫發送緩沖區長度寄存器→寫發送數據到數據端口寄存器→等待發送完畢標志。

          接收數據:選擇端點索引→讀接收緩沖區長度寄存器→從數據端口寄存器讀取接收到的數據。

          (5)硬件接口訪問程序:硬件接口程序負責完成DSP對ISP1581的讀寫操作,它是整個固件程序中最底層也是使用最頻繁的部分,在這里主要定義了2種類型的函數:ISP1581常用寄存器訪問函數和數據端口寄存器訪問函數。

          常用寄存器訪問函數:

          void outport(unsigned int *reg_addr, unsigned short value);

          unsigned short inport(unsigned int *reg_addr);

          數據端口寄存器訪問函數:

          void write_ep(unsigned short *addr, unsigned short size);

          unsigned short read_ep(unsigned short *addr);

          write_ep為寫端點發送緩沖區函數,其中參數*addr為指向待發送緩沖區的起始地址指針,參數size為要發送數據的字節數;read_ep為讀端點接收緩沖區函數,參數含義與write_ep函數相同,返回值為接收數據的字節數。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 荆门市| 乌鲁木齐县| 襄樊市| 凤山市| 镶黄旗| 平罗县| 谷城县| 馆陶县| 和政县| 尼木县| 清苑县| 黔江区| 荔浦县| 濮阳市| 麟游县| 台北县| 四川省| 任丘市| 库伦旗| 乌拉特前旗| 定兴县| 沙雅县| 镶黄旗| 屏边| 永登县| 会理县| 德化县| 左权县| 旬邑县| 竹山县| 平湖市| 宁河县| 通渭县| 崇仁县| 东光县| 石台县| 祁东县| 库伦旗| 会昌县| 罗田县| 九龙县|