1 / 32
文档名称:

2021年USB通信协议源代码.doc

格式:doc   大小:93KB   页数:32页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

2021年USB通信协议源代码.doc

上传人:读书之乐 2020/11/4 文件大小:93 KB

下载得到文件列表

2021年USB通信协议源代码.doc

相关文档

文档介绍

文档介绍:做了一段时间USB方面开发,即使是现成方案,我们只需要搞清楚它架构,再添加我们代码就行了。空闲之余,研究了一下USB通信过程,也把82A851R部分汇编代码重新用C语言描述了一篇(仅是描述,不代表能真正运行)。发觉汇编代码条理性太在太差了,不好读。一把C语言代码一写,立即认为清楚很多。废话少说,开始贴图,贴代码。================下面是将部分函数重新用C语言描述了一遍============#defineBYTEunsignedchar//**************************************************//            基础定义函数//**************************************************BYTEFIFO_RD_CHECK(BYTEnum){   BYTEFIFO_FLAG=0;   UCC|=num;//选择Endpoint,0,1,2,3,4,   MISC&=0xf8;//低3位置0   MISC|=0X00;//TX位置0;   Delay_3us();   MISC|=0X01;//SetRequest   Delay_28us();   if(MISC&0X40!=0)   FIFO_FLAG=0x0f;//READY   if(MISC&0x80!=0)   FIF0_FLAG&=0xf0;//Len0Detected   MISC&=0xfe;//clearREQ   returnFIFO_FLAG;}BYTEFIFO_WR_CHECK(BYTEnum){   BYTEFIFO_FLAG=0;//后4位表示Ready位,前四位表示Len0位状态是否有被设置   UCC|=num;//选择Endpoint,0,1,2,3,4,   MISC&=0xf8;//低3位置0   MISC|=0X02;//TX位置0;   Delay_3us();   MISC|=0X01;//SetRequest   Delay_28us();   if(MISC&0X40!=0)   FIFO_FLAG=0x0f;//READY   if(MISC&0x80!=0)   FIF0_FLAG&=0xf0;//Len0Detected   MISC&=0xfe;//clearREQ   returnFIFO_FLAG;}voidRead_FIFO(BYTE*Fifo_Addr,BYTEFifo_Size,BYTE*buffer){   inti=0;   MISC|=0x01;//SetRequest   for(i=0;i<Fifo_Size;i++)   {      buffer[i]=Fifo_Addr[0];//从FIFO地址取值      Delay_28us();      if(MISC&0x40==0)   break;//NotReady   }   MISC^=0X02;//改变TX位状态   Delay_3us();   MISC&=0XFE;//ClearRequest}voidWrite_FIFO(BYTE*Fifo_Addr,BYTESendLenth,BYTE*buffer){   inti=0;   MISC|=0X01;//SetRequest   for(i=0;i<SendLenth;i++)   {      Fifo_Addr[0]=buffer[i];//将要发送数据放至对应Fifo中      Delay_28us();      if(MISC&0x40==0)   break;//NotReady   }   MISC^=0X02;//改变TX位状态   Delay_3us();   MISC&=0XFE;//ClearRequest}BOOLCheck_Real_Cmd(){   BYTEbFlag_Real_Cmd=FALSE;   if(MISC&0X20!=0)   bFlag_Real_Cmd=TRUE;   if(MISC&0X80!=0)   bFlag_Real_Cmd=TRUE;   returnbFlag_Real_Cmd;}voidSend_hand(){   BOOLIsRealCmd,Status_Flag;   while(1)   {      IsRealCmd=Check_Real_Cmd();      if(IsRealCmd==TRUE)         return;      else            {         Status_Flag=FIFO_WR_CHECK(0);         if(Status_Flag&0x0