資源描述:
《【精品】USB通信協(xié)議.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、做了一?段時(shí)間的USB方面的開發(fā),雖然是現(xiàn)成的方案,我們只需要搞清楚它的架構(gòu),再添加我們的代碼就行了??臻e之余,研究了一下USB通信過程,也把82A851R部分的匯編代碼重新用C語言描述了一篇(僅是描述,不代表能真正運(yùn)行)。發(fā)現(xiàn)匯編代碼條理性太在太差了,不好讀。一把C語言的代碼一寫,馬上覺得清楚很多。廢話少說,開始貼圖,貼代碼。4rtfO.TTTtzMnW.TWUMw>ifoarmxti■8tf"".rm■飩4rtfO.TTTtzMnW.TWUMW■8nvoM4tf>ifoarmxti■14m.trwu??Tm?nTm?nCB4)MIIMICM1
2、M11WC?€SM>Mt11F?^?tvOIf”55????—??.VOIWMy。kw*CMJMMWcucumwtrwAltb-MlI—??亠11nwgem”rit0IMRCHitl9190■■■V*ri>oMMCttHfl9Qgsm”l-{-=4H-f藥?U_1H-■4"bf-J+-Erni^QinvOPfflltf================下面是將一些函數(shù)重新用C語言描述了一?遍===========#defineBYTEunsignedchar//*****★*舟*舟舟舟舟*************舟*舟舟*************舟
3、***水**//基本定義函數(shù)//*******舟*舟*舟舟**比**********舟*舟舟**比**********舟*****比BYTEFlFO_RD_CHECK(BYTEnum){BYTEFIFO_FLAG=0;UCC
4、=num;//選擇Endpoint,0,1,2,3,4,MlSC&=0xf8;//低3位置0MISCI=0X00;//TX位置0;Delay_3us();MISC
5、=0X01;//SetRequestDelay_28us();if(M-SCQO0X40T0)F-FO—FLAGHifv'READYif(M-sceo0x80lr
6、0)F-FO—FLAGeoHoxfov'LenoDe-eciedM-scQOHoxfe八/o-earREQreiurnF-FO—FLAG八F-FO—WR—CHECK(BYTEnum)BYTEF-FolFLAG"07、可4妄如刃Ready之乏匡妄煤刃LenO亠SKS班存芳少器總scoo-"num<、廉?EndpoinioL-2W4M-scf0xf8v、M;3som-sctoxon/、txwm5?De-ay—3us()八M-sc-H0X01V/S2-RequesiDe-ay—28us()八if(M-scco0x40T0)F-FO—FLAGnlfv、R
7、EADYif(M-scoo0x80lr0)F-FO—FLAGQOHoxfov'LenoDeieciedM-scguoxfev/c-earREQreiurnF-FO—FLAG八Read—F-FO(BYTE*Fifo——AdRBYTEFio—sizpBYTE*buffer)M-sc-H0x0二、/SeiRequesiforuHOHAFifo—size=++)亠buffer三HFio—Addro一三歹F_FOaDe_ayl28us()_if(M-scco0x40;0)breakV/N2-ReadyM-sc>H0X027、治焜TX0憲De-ay—3us(
8、)八M-scQO=0XFEV/c-earRequesidWme—F一FOBYTE*Fio—AdRBYTESendLesmBYTE*buffer)in二H0八M-SCTOXOwseiRequesiforuHO八icsendLenih=++)亠Fio—AddroTbuHer三V、讀m沱廉巨鏗蠱富知盤目旨Fio-£De_ay—28us()八if(MISC&0x40==0)break;//NotReady}MlSCJ0X02;//改變TX位狀態(tài)Delay_3us();MlSC&=0XFE;//ClearRequestBOOLCheck_Real_Cmd(
9、){BYTEbRag_Real_Cmd=FALSE;if(MISC&0X20!=0)bHag_Real_Cmd=TRUE;if(MlSC&0X80!=0)bFag_Real_Cmd=TRUE;returnbRag_Real_Cmd;voidSend_hand(){BOOLlsRealCmd,Status_Flag;while(1){lsRealCmd=Check_Real_Cmd();if(lsRealCmd==TRUE)return;else{Status_Flag=FlFO_WR_CHECK(0);if(Status_Flag&0x0f!=0
10、)//Fifo_Readybreak;elsecontinue;}}MISC
11、=0x01;//SetRequsetMISCJ0X02;/