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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式USB接口的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)

          基于嵌入式USB接口的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)

          作者: 時間:2012-02-09 來源:網(wǎng)絡(luò) 收藏

          1)設(shè)備識別。設(shè)備的識別過程分別由操作和設(shè)備驅(qū)動兩個部分通過協(xié)議的標(biāo)準(zhǔn)設(shè)備請求來完成。操作設(shè)備連接時加載設(shè)備驅(qū)動程序并分配通信地址,驅(qū)動程序啟動后通過中斷讀取相關(guān)描述符進(jìn)行資源配置并使能傳輸端點(diǎn),從而為應(yīng)用程序提供
          2)與傳輸。通過單片機(jī)的定時器可對數(shù)據(jù)的采集頻率進(jìn)行設(shè)置。本頻率為1 000 Hz,因此設(shè)置定時器每一毫秒中斷一次進(jìn)行,而主機(jī)端對USB設(shè)備的讀寫操作則通過外部中斷實(shí)現(xiàn),定時器中斷優(yōu)先級高于外部中斷以保證采集頻率固定為1 000 Hz。主機(jī)端通過寫操作向USB設(shè)備發(fā)送控制信息,包括設(shè)備啟動和停止的相關(guān)初始化與清理的工作,其中在對USB設(shè)備進(jìn)行讀操作前要先在端點(diǎn)的緩沖區(qū)填寫64字節(jié)數(shù)據(jù)并通過命令使其有效,不然主機(jī)端對USB設(shè)備進(jìn)行讀操作時,無效的緩沖區(qū)將導(dǎo)致PDIUSBD12芯片不會產(chǎn)生中斷,從而導(dǎo)致讀操作失敗。

          2 驅(qū)動程序
          Windows CE下的USB設(shè)備驅(qū)動模型由3個層次組成,其中由操作系統(tǒng)實(shí)現(xiàn)的有兩層,它們分別是HCD模塊(USBHost Controller Driver)和USBD模塊(USB Bus Driver),而第三層則被稱為USB客戶端驅(qū)動(USB Client Driver),由驅(qū)動開發(fā)人員實(shí)現(xiàn)。HCD模塊處于最底層,是CPU中USB控制器的驅(qū)動,為USBD模塊提供底層的功能訪問服務(wù)。USBD模塊處于HCD模塊的上層,它根據(jù)HCD模塊提供的功能USB驅(qū)動函數(shù),并提供給第3層使用。USB客戶端驅(qū)動處于USB驅(qū)動模型的最頂層,也是本文所要的USB驅(qū)動程序,它向上為應(yīng)用程序提供以方便對USB設(shè)備進(jìn)行控制,向下利用USBD模塊提供的接口函數(shù)傳遞控制信息和數(shù)據(jù)。因此,要成功開發(fā)USB設(shè)備的驅(qū)動程序,在操作系統(tǒng)定制的時候就需要把HCD和USBD的相關(guān)組件添加進(jìn)去。
          本文開發(fā)的USB設(shè)備驅(qū)動程序是流接口形式的驅(qū)動程序,它被設(shè)計(jì)用來與通常的文件系統(tǒng)API(如CreateFile、ReadFile和WriteFile等)進(jìn)行通信,應(yīng)用程序通過對文件系統(tǒng)的操作來完成對設(shè)備的控制。本驅(qū)動所設(shè)計(jì)的流接口如表1所示。

          本文引用地址:http://www.ex-cimer.com/article/149746.htm

          c.jpg

          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); })();