ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:201.89KB ,
资源ID:1496366      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1496366.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(USB通信协议源代码.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

USB通信协议源代码.docx

1、USB通信协议源代码做了一段时间的USB方面的开发,虽然是现成的 方案,我们只需要搞清楚它的架构,再添加我们的代码 就行了。空闲之余,研究了一下USB通信过程,也把 82A851R部分的汇编代码重新用C语言描述了一篇(仅是描述,不代表能真正运行)。发现汇编代码条理性太在太差了,不好读。一把C语言的代码一写,马上觉得清楚很多。废话少说,开始贴图,贴代码。gsu.gg下面是将一些函数重新用C语言描述了一遍#define BYTE unsigned charf / / | w T g j T p、f、T T T T T T1 T T T T T T/基本定义函数/ / / j j p、j j T p

2、、T j T j T T1 j T p、T j T T T T T T1 T T TBYTE FIFO_RD_CHECK (BYTE num)BYTE FIFO_FLAG=O;UCC|=num;/选择 Endpoint, 0, 1,2, 3, 4,MISC&=0xf8;/低 3 位置 0MISC| =0X00;/TX 位置 0;De I ay_3us ();Ml SC|=0X01;/Set RequestDe I ay_28us ();if (MlSC&0X40匸0) FlF0_FLAG=0x0f;/READYif (MlSC&0x80!=0) FlF0_FLAG&=0xf0;/LenO De

3、tectedMISC&=Oxfe;/clear REQreturn FIFO_FLAG;BYTE FIFO_WR_CHECK (BYTE num)BYTE FI FO_FLAG=O;/后 4 位表示 Ready 位,前四位表示LenO位的状态是否有被设置UCC|=num;/选择 Endpoint, 0, 1,2, 3, 4,MISC&=0xf8;/低 3 位置 0MISC| =0X02;/TX 位置 0;De I ay_3us ();Ml SC|=0X01;/Set RequestDe I ay_28us ();if (MISC&0X40!=0)FIFO_FLAG=OxOf;/READYif

4、(MISC&0x80!=0)FIFO_FLAG&=Oxf0;/LenODetectedMISC&二Oxfe;/cI earREQreturn FIFO FLAG;Fifo_Size,BYTE *buffer)int i二0;Ml SC|=0x01;/Set Requestfor(i二0;iFifo_Size;i+)bufferi=Fifo_Addr0;/从 FIFO地址取值De I ay_28us ();if (MlSC&0x40=0) break;/Not ReadyMl SC工0X02;/改变TX位状态De I ay_3us ();MISC&OXFE;/CIear Requestvoid

5、Write_FIF0(BYTE *Fifo_Addr, BYTESendLenth,BYTE *buffer)int i=0;Ml SC|=0X01;/Set Requestfor (i 二0;i data_start 0) /请求的数据超出ROM数据return;data_count二buffer6;if (MlSC&0x40匸0)/是控制指令return;if (data count=0)Send_Hand_Shake ();return;/开始真正的control_readwhi le(1)if(bFIag_RD_HTabIe=0)/Read LowBytebFlag_RD_HTable

6、=1;buffer i = (BYTE )*rom_dataptr;/取其低位i+;data_count-; / 全局 变量,要发送的总长度i f(data_count=1)break;if (i+1=8)/FIF0_size 二 8break;eIse/Read Hight BytebFlag_RD_HTable=O; buffer i = (BYTE ) (*rom_da taptr) 8;/取其高位rom_dataptr+;/将 ROM 指 针前移if (bufferi=0x3f) cont i nue;e I sei+;i f(data_count=1) break;if (i+1=8

7、)break;/填充完毕,结束循环,开始向FIFO发送数 据whi le (1)if (Check Real Cmd()二二TRUE)return;if (FlFO_WR_CHECK(0)&0xff=0) continue;/Not ReadyWrite_FIF0(Fifo_0_Addr, 0x02, buffer);f / / w T T T p、T T T T T T1 T T T T T T定Endpoint地址函数f / / p、p、p、T p、f、T p、g T p、T T p、g Tvoid SetAddress(BYTE *buffer)BYTE Dev_Addr;Dev_Add

8、r=buffer2/FIF0_0UT3, FIF0_WVALUELSIES|=0x01;/主机从设备读操作后将更新在AWR中的地址,否则为0则立即更新Dev_Addr&=OXFE;USB_AWR=Dev_Addr;Send_Hand_Shake();/ / / T T1 T p、j1 T1 j1 p、T j1 T1 T p、Set Conf i gura t i on ():设置配置函数f / / | w T T j T p、f、T T T T T T1 T T T T T Tvoid SetConf igurat i on(BYTE *buffer, BYTE*USB_Conf i gura

9、t i on)USVCl二0x80;PGA_CTRL|二0x80;*USB_Configuration=buffer2;/FIF0_WVALUELSTALL&=0x00;/设置好以上的寄存器Send_Hand_Shake();f / / T j j j j *T j j j *T T j *T Tvoid CIearFeature(BYTE *buffer)BYTE temp;temp=buffer2;/FIF0_wVaIueLif(temp二0x01)Send_Hand_Shake ();e I seSTALLO|=0x01;/SendStaI 10();void CIearFeature_

10、Endpoint(BYTE *buffer)BYTE temp;temp=buffer4;/FIFO_wIndexLif (bFIag_SetConf igurat ion_Ready二二TRUE);/表明已经配置过了temp=GetPipeBit (temp) ;/获取对应位t emp=emp; /取反STALL二temp&STALL;/与 STALL 寄存器相与,将需要的位置0Send_Hand_Shake();/置Feature函数/分SetFeature (): 设包括Endpoint部f f/ / T T T T T j1 T T T T T T T Tvoid SetFeature

11、(BYTE *buffer)BYTE FIF0_wVaIueL=buffer2;BYTE FIF0_wVaIueH=buffer3;if (FIFO wVaIueH=0x00)if (FIF0_wValueL=0x01)Send_Hand_Shake();e I seSTALLO|=0x01;/SendStaI 10 0;else if(FlF0_wVaIueH二0X81二0X84)if(FIF0_wValueL=0x00)Send_Hand_Shake ();e I seSTALLO|二0x01;/SendStaI 10void SetFeature_Endpoint(BYTE *buffer)BYTE temp;temp=buffer4;/FIF0_wIndexLi f(bFIag_SetConf igurat i on_

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1