新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > USB數據通信接口模塊的程序設計

        USB數據通信接口模塊的程序設計

        作者: 時間:2016-12-21 來源:網絡 收藏

        中斷服務處理函數代碼如下

        USB數據通信接口模塊的程序設計3

        USB數據通信接口模塊的程序設計4

        4.主端點操作

        這部分代碼較多,包括各個端口的發送/接收函數,端點1和主端點(端點2)的收發函數相對較簡單。

        USB數據通信接口模塊的程序設計5

        (2)主端點接收函數。

        5.程序說明

        在端點0的發送函數中,MCU首先需要通過讀DI2的最后處理狀態寄存器,清0Control_In中斷標志位,接著 MCU在確認DI2處于傳輸模式后進行數據所的發送。由于D12的控件端點只有16bit,如果傳輸的長度大于 16bit,MCU在傳輸階段就必須控制數據的數量,其流程如圖2所示。MCU必須檢查要發送到主機的當前和剩余 的數據大小,如果剩下的字節數大于16,MCU將先發送16字節并減去參考長度(要求的長度)16。

        當下一個Control_In標志來時,MCU將確定剩余的字節是否為0,如果已經沒有數據要發送,MCU需要發送一 個空的包以指示主機數據已發送完畢。

        USB數據通信接口模塊的程序設計0

        圖2 控制點發送函數流程

        · 如果是一個有效的請求,MCU必須向控制輸出端點發送應答建立命令,以重新使能下一個建立階段。接 下來,MCU需要證實控制傳輸是控制讀還是寫,這可以通過讀建立包中bmRequestType的第8位來實現。

        · 如果控制傳輸是一個控制讀類型,那就是說器件需要在下一個數據階段向主機發回數據包。MCU需要設 置一個標志以指示USB設備現在正處于傳輸模式,即準備在主機發送請求時發送數據。建立階段結束之后, 主機會執行數據階段,D12等待接收Control In包。

        · 如果建立包為SetesDescriptor()請求,那么建立包中的控制傳輸將指示此包為控制寫類型。在執行 完Setpescnptor請求過程后,MCU等待數據階段主機發送一個ControlOut標志,MCU從D12緩沖區中減去數據 。流程現在處于ControleOut處理程序的右端,MCU首先確認D12是否處于USB Receive模式,然后MCU通過檢 查選擇控制輸出端點,確認緩沖區是否已滿,并將數據從緩沖區讀出。

        設備標準請求STANDARDASK,C。此部分代碼用于實現各種USB協議的標準請求。對應每一個請求,用不同 的函數實現。在主循環中,當建立包標志為真時,利用control_handler()函數進入不同的標準請求處理 函數。雖然此處函數較多,但每個函數結構較簡單,在此不做詳細說明。

        主循環MAINLOOP.C。主循環檢查事件標志并進入對應的子程序進行進一步的處理。在主循環中,MCU首先 對其所有端口、存儲區、定時器和中斷服務程序進行初始化,之后MCU將重新連接USB,包括將SofteCo nnect寄存器設置為ON。這些過程是很重要的,它確保了在MCU準各好服務D12之前,D12不會進行操作。初始 化后,進入循環,輪詢各種狀態。當輪詢到了檢測建立包時,它確認建立標志是否被中斷服務程序所置位。 如果建立標志被置位,它將向協議層發送一個器件請求進行處理。圖3所示為主程序在前臺執行的流程。

        USB數據通信接口模塊的程序設計1

        圖3 主循環流程


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 大埔县| 乳山市| 浦县| 布尔津县| 伽师县| 凤阳县| 盐源县| 鄂尔多斯市| 灵川县| 浦城县| 湘潭市| 曲沃县| 钟山县| 六枝特区| 景洪市| 田林县| 鲁甸县| 西充县| 吉隆县| 通海县| 桃江县| 二连浩特市| 许昌市| 菏泽市| 长宁区| 类乌齐县| 伊吾县| 舟山市| 工布江达县| 筠连县| 扎兰屯市| 台江县| 镇江市| 鄂托克旗| 岑溪市| 佛坪县| 清水县| 永和县| 武义县| 永修县| 龙南县|