欢迎来到第一文库网! | 帮助中心 第一文库网-每个人都是第一
第一文库网
全部分类
  • 研究报告>
  • 学术论文>
  • 全科教育>
  • 应用文档>
  • 行业资料>
  • 企业管理>
  • 技术资料>
  • 生活休闲>
  • ImageVerifierCode 换一换
    首页 第一文库网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    USB通信协议源代码.docx

    • 资源ID:260905       资源大小:135.50KB        全文页数:25页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    扫码关注公众号登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    USB通信协议源代码.docx

    做了一段时间的USB方面的开发,虽然是现成的方案,我们只需要弄清晰它的架构,再添加我们的代码就行了。空闲之余,研究了一下USB通信过程,也把82A851R部分的汇编代码重新用C语言描述了一篇(仅是描述,不代表能真正运营)。发现汇编代码条理性太在太差了,不好读。一把C语言的代码一写,立即觉得清晰诸多。废话少说,开始贴图,贴代码。二=下面是将某些函数重新用C语言描述了基本定*A义函数I*aBYTEFIFO_RD_CHECK(BYTEnum)aBYTEFIFO_F1AG=O;UCCI=num;/选择Endpoint,Oz1,2,3,4,MISC&=0xf8;低3位置0MISCI=OX00;/TX位置0;ADe1ay_3us();M1SCI=OXO1;/SetReqUeSMDe1ay_28us()if(MISC8<0X40!=0)FIFO_F1AG=OxOf;/READYif(MISC&0x80!=0)FIFO.F1AG&=0xf0;/1e0DetectcaMISC&=0xfe;/c1earREQreturnFIFO_F1AG;aaBYTEFIFO_WR_CHECK(BYTEnum)(BYTEFIFO_F1AG=0;/后4位表达R号。dy位,前四位表达1en0位的状态与否有被设立AUCC|=num;选择Endpoit0,1,2z3,4,MISC&=OXf8;低3位置OAMISCI=OXO2;/TX位置0;De1ay_3us();MISCI=0X01;/SetRequestDeIay_28us();if(MISC&0x80!=O)FIFO_F1AG&=OXfO;/1e1oDetectedMISC&=Oxfe;/c1erREQareturnF1FC1F1AG;AvoidRead_FIFO(BYTE*Fifo_AddrzBYTEFifo_Size,BYTE*buffer)(inti=0;MISCI=OxO1;/SetRequestafor(i=0;i<Fifo_Size;i+)abufferi=Fifo_Addr0;从FIFO地址取值DeIay_28US();Aif(MISC&0x40=O)break;/NotReady)MISC=0X02;变化TX位状态DeIay_3US();AMISC&=0XFE;/CIearRequesbavoidWrite_FIFO(BYTE*Fifo.AddrzBYTESend1enth,BYTE*buffer)aainti=0;MISCI=OXO1;/SetRequeshfor(i=Oji<Send1eth;i+)aFifo_Addr0=bufferi;/将要发送的数据放至相应的Fifo中DeIQy_28Us();if(MISC&Ox4O=O)breok;/NotReQdyAMISCA=OXO2;/变化TX位状痴DeIay_3us();MISC&=0XFE;/CIearReq1JeStA)BOO1Check_Rea1_Cmd()rBYTEbFIag_Rea1_Cmd=FA1SE;if(MISC&0X20!=0)bF1ag_Rea1Cmd=TRUE;if(MISC&0X8O!=0)bF1ag_Rea1_Cmd=TRUE;returbFIag_Rea1_Cmd;AvoidSend_hand()aaBOO1IsReaICmdzStatus_F1ag;WhiIe(I)AIsReaICmd=Check_Rea1Cmd();Aif(IsReaICmd=TRUE)return;aeI$eaaStatus_FIag=FIFO_WR_CHECK(O)泠if(Status_FIag&OxOf!=O)/Fifo_ReadybreakISacontinues)MISCI=OxO1;/SetRequsetMISCA=OX02;/变化TX位状态ADe1y_3us();aM1SC&=0XFE;/CIearReqUeSta卜voidcontro1_read(WORD*rom_dataptrzBYTE*buffer)/从中读取数据,/rom_dataptr是全局时在其他函数中赋值变化ABYTEtempzi=0;if(buffer7!=0)/FIFO_W1ENGTHHreturn;Aif(buffer6=0)/FIFO_W1ENGTH1return/if(buffer6>data_start0)/祈求的数据超过ROM数据return;data_count=buffer6;if(MISC&0x40。0)/是控制指令return;Aif(data_count=0)ASend_Hand_ShQke();Areturn;a/开始真正的contro1_reacAwhi1e(1)aaif(bF1ag_RD_HTab1e=O)Read1owBytea*rom_dataptr;取其低位Ai+;data_count;/全局变量,要发送的总长度if(dota_cout<=I)Abreak;Aif(i+1=8)FIFO_size=&break;ae1se/ReadHightByteabF1ag_RD_HTabIe=O;bufferi=(BYTE)(*rom_dataptr)>>8;/¢(其高位Arom_dataptr+;将ROM指针前移if(bufferi=0x3f)cotinue;e1saai+;if(dta_cout<=1)abreak;if(i+1=8)abreQk;Aaa/填充完毕,结束循环,开始向F1FO发送数据AwhiI(1)aSif(Check_Rea1Cmd()=TRUE)return/if(FIFO_WR_CHECK(0)&0xff=O)continue;/NotReQdyaaWrite_FIFO(Fifo_0_AddrzOxO2zbuffer);)*aSetAddress():重新设定EndPoint地力卜/*aVoidSetAddress(BYTE*bffe)aBYTEDev_Addr;Dev_Addr=buffer2/FIFO_OUT3zFIFO_WVA1UE1SIES1=OXo1;/主机从设备读操作后将更新在AWR中的地址,否则为0则立即更新ADev_Addr&=OXFE;USB-AWR=Dev_Addr;ASene1HQne1ShQke();AA/*/SetConfigurtion():设立配备函数I*aV0idSetConfiguration(BYTE*bufferzBYTE*USB_Configuration)(USVCI=Ox80;PGA_CTR1=Ox80;A*USB_Cofiguratio=buffer2;/FIFO_WVA1UE1STA11&=0x00设立好以上的寄存器SenC1HQnC1Shake();*/C1earFefure():清徐FeQtUre函数A*4、,Z"XCAVOIGUIearFeature(BYTE*buffer)(BYTEtemp?temp=buffer2;/FIFe1WVC11Ue1Aif(temp=OXOI)aaSend_Hand_Shake();)e1seSTA11OI=OxO1;/SedSta11();aavoidC1earFeature_Endpoint(BYTE*buffer)aaBYTEtemp;temp=buffer4;/FIFO_w1ndex1if(bF1ag_SetConfiguration_Ready=TRUE);表白已经配备过了Atemp=GetPipeBit(temp);获取相应位Atemp=temp;取反ASTA11=temp&STA11;与STA11寄存器相与,将需要的位置0Sed_Hand_Shke();aAI/*/SetFeature():设立Feature函数A/ErdPC)irt吾B分A*avoidSetFeture(BYTE*buffer)aBYTEFIFO_wVa1ue1=bffer2;BYTEFIFO_wVaIueH=buffer3;Aif(FIFO_wVa1ueH=OxOO)aaif(FIFO_WVaIue1=0x01)aSend_Hand_Shake()泠eIsSTA11OI=0x01;/SendStaI10();ae1seif(FIFO_wVa1ueH>=0X81<=0X84)aaif(FIFO_wVa1ue1=0x00)aSene1HQnC1ShQke()?)e1seSTA11O=Ox01;/SendSta1I0();Aae1seSTA11O=0x01;/SendStaII0();)voidSetFeatre-Edpoint(BYTE*buffer)ABYTEtemp;Atemp=buffer4;/FIFO_w1ndex1if(bFIag_SetConfiguration_Ready!=TRUE)return;/有无被SetConfiguration。设立ternp&=Ox7f;temp=GetPipeBit(temp);获取相应位STA11=tempSTA11;将指定的Enpoint置IASend_HQnC1Shke()淮)*A/Set1nterface():设立InterfaCe函数A/*aBOO1SetInterface(BYTE*bufferzBYTE*USBnterfa

    注意事项

    本文(USB通信协议源代码.docx)为本站会员(lao****ou)主动上传,第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第一文库网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 001doc.com网站版权所有   

    经营许可证编号:宁ICP备2022001085号

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



    收起
    展开