freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

官方usb程序和例程(編輯修改稿)

2024-08-03 13:35 本頁面
 

【文章內(nèi)容簡介】 在這個函數(shù)中,首先獲取設(shè)備版本,并轉(zhuǎn)換為Unicode存入版本號字符串?!狦et_SerialNum()。設(shè)備當(dāng)前配置置為0。然后調(diào)用PowerOn(),這個函數(shù)實質(zhì)上將D+上拉,此時USB設(shè)備就能被集線器檢測到了。因此分析進(jìn)入下一個流程。進(jìn)入設(shè)備檢測狀態(tài)(1)在PowerOn()中執(zhí)行的情況。在USB_init()中調(diào)用PowerOn(),而它先調(diào)用USB_Cable_Config(ENABLE),這個函數(shù)實質(zhì)上將USB連接控制線設(shè)置為低電平,然后設(shè)備就可以檢測到設(shè)備了。當(dāng)集線器報告設(shè)備連接狀態(tài),并收到主機指令后,會復(fù)位USB總線,這需要一定的時間(這段時間內(nèi)設(shè)備應(yīng)該準(zhǔn)備好處理復(fù)位指令)。但是現(xiàn)在設(shè)備初始化程序?qū)⒗^續(xù)往下進(jìn)行,因為它還沒有使能復(fù)位中斷。wRegVal = CNTR_FRES。_SetCNTR(wRegVal)。//這句話實際上使能了USB模塊的電源,因為上電復(fù)位時,CNTR寄存器的斷電控制為PDWN位是1,模塊是斷電的。這句話雖然將強制復(fù)位USB模塊,但由于復(fù)位中斷允許位沒有使能,不會引起復(fù)位中斷,而間接上由使PDWN=0,模塊開始工作。_SetCNTR是一個宏,將wRegVal賦值給CNTR寄存器,此時所有的中斷被屏蔽。再接下來兩句指令又將清除復(fù)位信號。然后清除所有的狀態(tài)位。——_SetISTR(0)。接下來是很關(guān)鍵的兩句話:wInterrupt_Mask=CNTR_RESETM| CNTR_SUSPM | CNTR_WKUPM。_SetCNTR(wInterrupt_Mask)。后面一個語句執(zhí)行后,復(fù)位中斷已經(jīng)被允許,而此時集線器多半已經(jīng)開始復(fù)位端口了?;蛘哒f稍微有限延遲,設(shè)備固件還能繼續(xù)初始化一些部件,但已經(jīng)不會影響整個工作流程了。所以接下來,分析直接進(jìn)入復(fù)位中斷。(2)復(fù)位中斷的處理。當(dāng)復(fù)位中斷允許、且總線被集線器復(fù)位的時候,固件程序進(jìn)入USB_LP中斷。中斷程序直接調(diào)用USB_Istr(void)程序。接下來講對中斷位進(jìn)行判斷:if (wIstr amp。 ISTR_RESET amp。 wInterrupt_Mask){_SetISTR((u16)CLR_RESET)。//先清除復(fù)位中斷位()。//進(jìn)入設(shè)備定義的復(fù)位過程。實際上是調(diào)用JoyStick_Reset()函數(shù)進(jìn)行處理。}(3)JoyStick_Reset()函數(shù)的處理。這里將一句句來分析:void Joystick_Reset(void){pInformationCurrent_Configuration = 0。//當(dāng)前配置為0pInformationCurrent_Interface = 0。/當(dāng)前接口為0pInformationCurrent_Feature = Joystick_ConfigDescriptor[7]。//需要總線供電SetBTABLE(BTABLE_ADDRESS)。 //設(shè)置包緩沖區(qū)地址。SetEPType(ENDP0, EP_CONTROL)。//端點0為控制端點SetEPTxStatus(ENDP0, EP_TX_STALL)。//端點狀態(tài)為發(fā)送無效,也就是主機IN令牌包來的時候,回送一個STALL。SetEPRxAddr(ENDP0, ENDP0_RXADDR)。 //設(shè)置端點0描述符表,包括接收緩沖區(qū)地址、最大允許接收的字節(jié)數(shù)、發(fā)送緩沖區(qū)地址三個量。SetEPTxAddr(ENDP0, ENDP0_TXADDR)。 //這是發(fā)送緩沖區(qū)地址Clear_Status_Out(ENDP0)。//清除EP_KIND的STATUS_OUT位,如果改位被設(shè)置,在控制模式下只對0字節(jié)數(shù)據(jù)包相應(yīng)。其它的都返回STALL。主要用于控制傳輸?shù)臓顟B(tài)過程。SetEPRxCount(ENDP0, )。 //接收緩沖區(qū)支持64個字節(jié)。SetEPRxValid(ENDP0)。//使能端點0的接收,因為很快就要接收SETUP令牌包后面跟著的數(shù)據(jù)包了。SetEPType(ENDP1, EP_INTERRUPT)。//端點1為中斷端點。SetEPTxAddr(ENDP1, ENDP1_TXADDR)。 //設(shè)置發(fā)送緩沖區(qū)地址。SetEPTxCount(ENDP1, 4)。//每次發(fā)送四個字節(jié)SetEPRxStatus(ENDP1, EP_RX_DIS)。//接收禁止,只發(fā)送Mouse信息,而不從主機接收。SetEPTxStatus(ENDP1, EP_TX_NAK)。 //現(xiàn)在發(fā)送端點還不允許發(fā)送數(shù)據(jù)。bDeviceState = ATTACHED。//連接狀態(tài)改為已經(jīng)連接,默認(rèn)地址狀態(tài)。SetDeviceAddress(0)。 //地址默認(rèn)為0.}復(fù)位中斷執(zhí)行完成后,開發(fā)板的USB接口能夠以默認(rèn)地址對主機來的數(shù)據(jù)包進(jìn)行響應(yīng)了。這個階段的分析到此結(jié)束,下一個階段就是正式分析代碼實現(xiàn)的枚舉過程了。四、USB的“JoyStickMouse”工作過程詳細(xì)分析枚舉第一步:獲取設(shè)備的描述符從USB_init()開始(1)先要允許數(shù)據(jù)傳輸完成中斷在poweron()函數(shù)后面緊跟著幾句話:PowerOn()。//這句執(zhí)行完,設(shè)備被主機檢測到,并且能夠響應(yīng)復(fù)位中斷了。_SetISTR(0)。/* clear pending interrupts */wInterrupt_Mask = IMR_MSK。_SetCNTR(wInterrupt_Mask)。 /* set interrupts mask *///以上這兩句話將允許所有的USB中斷bDeviceState = UNCONNECTED。//設(shè)備狀態(tài)置位為未連接狀態(tài)。這里我不太理解。這時候即使復(fù)位中斷未發(fā)生,最起碼設(shè)備已經(jīng)算是連接入總線了,為什么這個狀態(tài)還要設(shè)置為“未連接”呢?(2)主機獲取描述符主機進(jìn)入控制傳輸?shù)牡谝浑A段:建立事務(wù),發(fā)setup令牌包、發(fā)請求數(shù)據(jù)包、設(shè)備發(fā)ACK包。主機發(fā)出對地址0、端點0發(fā)出SETUP令牌包,首先端點0寄存器的第11位SETUP位置位,表明收到了setup令牌包。由于此時端點0數(shù)據(jù)接收有效,所以接下來主機的請求數(shù)據(jù)包被SIE保存到端點0描述附表的 RxADDR里面,收到的字節(jié)數(shù)保存到 RxCount里面。端點0寄存器的CTR_RX被置位為1,ISTR的CTR置位為1,DIR=1,EP_ID=0,表示端點0接收到主機來的請求數(shù)據(jù)。此時設(shè)備已經(jīng)ACK主機,將觸發(fā)正確傳輸完成中斷,下面就進(jìn)入中斷看一看。_SetISTR((u16)CLR_CTR)。 /*首先清除傳輸完成標(biāo)志 */EPindex = (u8)(wIstr amp。 ISTR_EP_ID)。 //獲取數(shù)據(jù)傳輸針對的端點號。if (EPindex == 0)//如果是端點0,這里的確是端點0{SaveRState = _GetEPRxStatus(ENDP0)。 //保存端點0狀態(tài),原本是有效狀態(tài)。SaveTState = _GetEPTxStatus(ENDP0)。 _SetEPRxStatus(ENDP0, EP_RX_NAK)。 //在本次數(shù)據(jù)處理好之前,對主機發(fā)來的數(shù)據(jù)包以NAK回應(yīng)_SetEPTxStatus(ENDP0, EP_TX_NAK)。 if ((wIstr amp。 ISTR_DIR) == 0) //如果是IN令牌,數(shù)據(jù)被取走{_ClearEP_CTR_TX(ENDP0)。In0_Process()。//調(diào)用該程序處理固件數(shù)據(jù)輸出后的工作。_SetEPRxStatus(ENDP0, SaveRState)。_SetEPTxStatus(ENDP0, SaveTState)。return。}Else//DIR=1時,要么是SETUP包,要么是OUT包。{//這里先分析SETUP包。wEPVal = _GetENDPOINT(ENDP0)。//獲取整個端點0狀態(tài)if ((wEPVal amp。 EP_CTR_TX) != 0)//這種情況一般不太可能,{//如果出現(xiàn)表示同時 TX和RX 同時置位。}else if ((wEPVal amp。EP_SETUP) != 0)//我們的程序會執(zhí)行到這里{_ClearEP_CTR_RX(ENDP0)。Setup0_Process()。 //主要是調(diào)用該程序來處理主機請求。_SetEPRxStatus(ENDP0, SaveRState)。_SetEPTxStatus(ENDP0, SaveTState)。return。}else if ((wEPVal amp。 EP_CTR_RX) != 0) //暫時不執(zhí)行的代碼先刪除掉。{}}}/* if(EPindex == 0) */后面處理其他端點的代碼就先不看了。}/* while(...) */(3)Setup0_Process()函數(shù)的執(zhí)行分析這個函數(shù)執(zhí)行的時候,主機發(fā)來的請求數(shù)據(jù)包已經(jīng)存在于RxADDR緩沖區(qū)了。大部分的標(biāo)志位已經(jīng)清除,除了SETUP位,這個味將由下一個令牌包自動清除。進(jìn)入處理函數(shù): = PMAAddr + (u8
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1