<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于USB接口設備的固件程序設計

基于USB接口設備的固件程序設計

作者: 時(shí)間:2009-12-29 來(lái)源:網(wǎng)絡(luò ) 收藏

主程序和中斷服務(wù)程序(ISR)之間任務(wù)分配是,ISR從D12收集數據,主程序將處理這些數據。ISR只在它收集了足夠的數據才通知主程序準備處理,這樣會(huì )減少不必要的主程序服務(wù)時(shí)間,也簡(jiǎn)化了主程序。
總線(xiàn)重置和空閑在ISR里面不需要特殊的處理。ISR要么設置總線(xiàn)重置標志,要么在EPPFLAG里暫停這一位并退出。
控制型傳輸總是以setup階段開(kāi)始的,接著(zhù)是數據階段。然后以狀態(tài)階段結束。

本文引用地址:http://dyxdggzs.com/article/202578.htm

下面以處理Control OUT和Control IN這兩個(gè)最復雜最重要的中斷子程序為例,說(shuō)明編寫(xiě)中斷服務(wù)程序的一些問(wèn)題。
Control OUT主要是主機用來(lái)傳遞控制請求的,也可用于傳輸數據,進(jìn)入服務(wù)程序后首先要發(fā)送控制字Read Last Transaction Status(40H)給PDID12,讀取管道狀態(tài),根據讀取的狀態(tài)判斷是因為有數據包還是有SETUP包的到來(lái)而中斷。當SETUP包被設備的D12接收后,設備將會(huì )向MCU產(chǎn)生中斷。微控制器將通過(guò)讀取D12中斷寄存器的內容判斷封包是送到Control端點(diǎn)還是Genric端點(diǎn)而進(jìn)行處理。如果封包是送到Control端點(diǎn),MCU將會(huì )進(jìn)一步通過(guò)讀D12的“Read Last Transaction Status Register”判斷數據是不是SETUP 封包。對于獲取描述符設備請求,第一個(gè)封包必須是SETUP封包。
之后,MCU需要讀出SETUP封包的內容通過(guò)選擇Control Out端點(diǎn)來(lái)判斷這個(gè)端點(diǎn)是滿(mǎn)的還是空的。如果控制端點(diǎn)是滿(mǎn)的,MCU就從緩沖區中讀出它的內容并將它存在存儲器里。然后,它將從存儲器里去驗證主機設備請求是否合法。如果是合法請求,MCU必須送“Acknowledge Setup command”到Control Out端點(diǎn)使能接收下一個(gè)封包。下一步,MCU需要確定控制傳輸是控制讀還是控制寫(xiě)。這可以通過(guò)從SETUP 封包里讀bmRequestType的8個(gè)字節來(lái)完成??刂苽鬏斒强刂谱x,設備需要在下一個(gè)數據時(shí)相回送數據包給主機。MCU需要建立一個(gè)標志,表明設備現在正處于傳送模式。應主機的要求準備送數據。
Control IN主要是用來(lái)向主機傳送數據的,進(jìn)入服務(wù)子程序后,首先要通過(guò)讀Read Last Transaction Status(40H)來(lái)清除Control-In interrupt Bit,在確認D12是處于傳送模式下后,MCU將數據包送往主機。但是,由于D12只有16字節的FIFO,所以MCU必須控制好傳送的總量,如果要求的長(cháng)度大于16字節的話(huà)。MCU必須檢查當前和剩下的要送往主機的數據,如果剩下的字節大于16字節的話(huà),MCU將先送頭16字節。在下一個(gè)Control-IN令牌包到來(lái)的時(shí)候,MCU將先判斷剩下的字節是否為0,如果是,MCU將發(fā)一個(gè)空包給主機,通知它數據已經(jīng)傳送完畢。

結束語(yǔ):

功能強大的USB規格已經(jīng)成為PC的眾多標準之一,鉆研計算機科技的種種發(fā)展,都離不開(kāi)USB的相關(guān)知識。本文創(chuàng )新點(diǎn):使用USB通信方面的具體協(xié)議,用單片機匯編語(yǔ)言編程,利用單片機的指令系統去實(shí)現USB設備與PC主機的具體通信,設計出適合用戶(hù)需求的USB設備。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: USB 接口設備 程序設計

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>