<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式系統(tǒng)中USB主機控制器的設(shè)計

          嵌入式系統(tǒng)中USB主機控制器的設(shè)計

          作者: 時間:2009-12-16 來源:網(wǎng)絡(luò) 收藏

          為了執(zhí)行控制轉(zhuǎn)移,可以使用框架函數(shù)send_request(),send_request()函數(shù)將分配一個傳遞給TD處理器的URB結(jié)構(gòu)。URB應(yīng)該包含有關(guān)設(shè)置狀態(tài)的信息,并且借助參數(shù)傳遞給send_request()。URB需要的信息包括:

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

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

          * 值:特殊請求字段。

          * 索引:特殊請求字段。

          * 長度:相關(guān)數(shù)據(jù)緩沖器的大小

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

          裝入所有URB信息之后,URB便被提交給TD處理器。TD處理器是框架的組成部分,它與硬件直接通信,處理有關(guān)傳輸?shù)牡图壴敿氋Y料。TD完成任務(wù)后,TD處理器將程序控制權(quán)由原始調(diào)用指定的“回調(diào)”函數(shù)轉(zhuǎn)給send_request()函數(shù)。

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

          EZ-Host框架值得注意的最后一個特點是設(shè)備驅(qū)動程序的使用。在執(zhí)行過程中,設(shè)備驅(qū)動程序?qū)?zhí)行三個功能,即停止、啟動和運行。啟動某設(shè)備驅(qū)動程序便是運行它的run()函數(shù),該函數(shù)對某些數(shù)值進行初始化,并分配一個用于數(shù)據(jù)傳輸?shù)闹貜?fù)出現(xiàn)的URB。對于鼠標或鍵盤,該URB將每隔10毫秒發(fā)生一次。數(shù)據(jù)傳輸完成后,TD處理器將控制轉(zhuǎn)交給interrupt_in_complete()函數(shù),通過檢查URB可得知數(shù)據(jù)是來自鍵盤還是來自鼠標,該回調(diào)函數(shù)負責(zé)將鍵盤或鼠標數(shù)據(jù)發(fā)送至應(yīng)用層。

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

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

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


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();