新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式系統中USB主機控制器的設計

        嵌入式系統中USB主機控制器的設計

        作者: 時間:2009-12-16 來源:網絡 收藏

        為了執行控制轉移,可以使用框架函數send_request(),send_request()函數將分配一個傳遞給TD處理器的URB結構。URB應該包含有關設置狀態的信息,并且借助參數傳遞給send_request()。URB需要的信息包括:

        * 請求類型:表明請求類型的字節,該字節包含表示傳輸方向、傳輸類型以及傳輸接受方的位。

        * 請求:11種標準請求中的一種,這些請求包括:Clear_Feature、Get_Configuration、Get_Descriptor、Get_Interface、Get_Status、Set_Address、Set_Configuration、Set_Descriptor、Set_Feature、Set_Interface、Synch_Frame。

        * 值:特殊請求字段。

        * 索引:特殊請求字段。

        * 長度:相關數據緩沖器的大小

        載入用于URB的設置信息之后,便可將其它設備信息裝入URB,如地址、速度、終點數以及傳輸方向,還有表示傳輸類型的字節和“回調”函數指示器。利用回調函數可以在框架內進行某些并行操作,也可在硬件處理操作的同時執行其它任務。TD需要USB傳輸類型信息,這樣框架就可以安排正確的傳輸類型時序。此外,與批量或中斷傳輸相反,框架一次只允許進行一個控制傳輸操作。

        裝入所有URB信息之后,URB便被提交給TD處理器。TD處理器是框架的組成部分,它與硬件直接通信,處理有關傳輸的低級詳細資料。TD完成任務后,TD處理器將程序控制權由原始調用指定的“回調”函數轉給send_request()函數。

        圖2顯示了調用帶回調函數的send_request()。這里我們使用控制傳輸以獲得某鍵盤的國家代碼,在get_country_code()函數中可看到send_request()的調用,注意send_request()調用中的最后一個參數是回調函數。在TD處理器確定硬件完成處理后執行該函數,此時回調函數將獲得返回的數據緩沖器,將其與HID描述器結構相匹配,并存取與國家代碼對應的字節,然后URB被釋放。

        EZ-Host框架值得注意的最后一個特點是設備驅動程序的使用。在執行過程中,設備驅動程序將執行三個功能,即停止、啟動和運行。啟動某設備驅動程序便是運行它的run()函數,該函數對某些數值進行初始化,并分配一個用于數據傳輸的重復出現的URB。對于鼠標或鍵盤,該URB將每隔10毫秒發生一次。數據傳輸完成后,TD處理器將控制轉交給interrupt_in_complete()函數,通過檢查URB可得知數據是來自鍵盤還是來自鼠標,該回調函數負責將鍵盤或鼠標數據發送至應用層。

        當某驅動程序停止時,其重復出現的URB將從TD列表中除去并釋放出空間,然后傳送一個消息至應用層,去掉相關設備。如果停止的驅動程序相關設備是集線器,則與該集線器相連的所有設備也要去除,且驅動程序同時停止。當然,如果去除的設備中還有集線器,則與該集線器相連的設備將以同樣方式去除。

        在驅動程序運行期間,可執行各種任務。對于集線器設備驅動程序,要檢查集線器的端口,以了解是否有設備插入和去除。這里鍵盤和鼠標驅動程序運行函數不起任何作用。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 伊宁市| 防城港市| 班戈县| 始兴县| 米脂县| 临颍县| 平顺县| 洪湖市| 古浪县| 嘉善县| 清镇市| 赣榆县| 营山县| 莎车县| 印江| 阜阳市| 新密市| 濮阳县| 新宁县| 遂川县| 明溪县| 广宗县| 清水县| 洛扎县| 蓝山县| 沙洋县| 湖州市| 建水县| 湖南省| 建阳市| 牙克石市| 石首市| 丰宁| 中牟县| 青河县| 金溪县| 万源市| 望谟县| 中超| 三门峡市| 荃湾区|