⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch375.lst

📁 使用ch375和stc 51写的usb鼠标的代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 192   1      
 193   1              if(0!=len)
 194   1              {
 195   2                      CH375_WR_CMD_PORT( CMD_WR_USB_DATA5 );
 196   2                      CH375_WR_DAT_PORT( len );
 197   2                      for(i=0; i<len; i++)
 198   2                      {
 199   3                              CH375_WR_DAT_PORT( ep1Buf[i] );
 200   3                      }       
 201   2              }       
 202   1      }       
 203          //-----------------------------------------------------
 204          //函数名:       mCh375DesUp
 205          //作用:         复制描述符放到request结构中
 206          //                      变量*VarSetupDescr指向描述中
 207          //参数:         无
 208          //----------------------------------------------------
 209          void mCh375DesUp(void)
 210          {
 211   1              unsigned char k;
 212   1              for (k=0; k!=8; k++ )
 213   1              {
 214   2                      request.buffer[k]=*VarSetupDescr;   //依次复制8个描述符,
 215   2                      VarSetupDescr++;
 216   2              }
 217   1      }
 218          //-------------------------------------------------------
 219          //函数名:       rdData
 220          //作用:         读取当前结点的数据
 221          //参数:         无
 222          //返回:         读取得数据的长度
 223          //-------------------------------------------------------
 224          uint8 rdData()
 225          {
 226   1              uint8 length, *ret_buf;
 227   1              CH375_WR_CMD_PORT( CMD_RD_USB_DATA );   // 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 
 228   1              length = CH375_RD_DAT_PORT();                   // 首先读取后续数据长度 
 229   1              if ( 0 != length )                                      // 如果长度为0则不处理 
 230   1              {
 231   2                      RECV_LEN = length;                                      // 命令包的数据长度 
 232   2                      ret_buf = RECV_BUFFER;                          // 接收缓冲区 
 233   2                      while ( length -- )
 234   2                      {
 235   3                              *ret_buf =      CH375_RD_DAT_PORT();
 236   3                              ret_buf++;
 237   3                      }
 238   2                      return(RECV_LEN);
 239   2              }
 240   1              else
C51 COMPILER V7.06   CH375                                                                 04/07/2006 09:06:59 PAGE 5   

 241   1              {
 242   2                      return(0);
 243   2              }       
 244   1      }       
 245          //-------------------------------
 246          //函数名:       mCh375Interrupt
 247          //作用:         CH375中断处理  
 248          //参数:         无                      
 249          //-------------------------------
 250          void mCh375Interrupt(void)
 251          {
 252   1              unsigned char InterruptStatus;
 253   1              unsigned char length, len;
 254   1      
 255   1              CH375_WR_CMD_PORT(CMD_GET_STATUS);      // 获取中断状态并取消中断请求 
 256   1              InterruptStatus = CH375_RD_DAT_PORT();  // 获取中断状态 
 257   1              RECV_LEN=0;
 258   1              switch( InterruptStatus )                               // 分析中断状态
 259   1              {
 260   2                      case  USB_INT_EP2_OUT:                          // 批量端点/端点2收到数据, 下传成功
 261   2                              if(0x00!=(rdData()))                            // 收到数据非空
 262   2                              {
 263   3                                      if(0x11==RECV_BUFFER[0])
 264   3                                      {
 265   4                                              led=!led;
 266   4                                      }
 267   3                              }               
 268   2                              if(debug) uartPutStr("EP2_OUT\n\r");
 269   2                              break;
 270   2                      case   USB_INT_EP2_IN:                          //批量端点/端点2数据上传成功, 未处理
 271   2                              if(debug) uartPutStr("EP2_IN\n\r");
 272   2                              CH375_WR_CMD_PORT (CMD_UNLOCK_USB);
 273   2                              break;
 274   2                      case   USB_INT_EP1_IN:                          //中断端点/端点1数据上传成功,未处理
 275   2                              if(debug) uartPutStr("EP1_IN\n\r");
 276   2                              CH375_WR_CMD_PORT (CMD_UNLOCK_USB);
 277   2                              break;
 278   2                      case   USB_INT_EP1_OUT:                         //中断端点/端点1数据下传成功
 279   2                              if(debug) uartPutStr("EP1_OUT\n\r");
 280   2                              if(0x00!=rdData())
 281   2                              {
 282   3                                      break;
 283   3                              }       
 284   2                              break;
 285   2                      case   USB_INT_EP0_SETUP:                       //控制端点建立成功, 端点0接受到数据, setup成功
 286   2                              if(debug&DBG_SETUP)     uartPutStr("#SETUP\n\r");
 287   2                              CH375_WR_CMD_PORT( CMD_RD_USB_DATA );
 288   2                              length=CH375_RD_DAT_PORT();
 289   2                              for( len=0; len<length; len++ )
 290   2                              {
 291   3                                      request.buffer[len] = CH375_RD_DAT_PORT();              // 取出数据
 292   3                              }       
 293   2                              if(debug&DBG_SETUP)     uartPrint("setup dat: %\n\r", request.buffer, length);
 294   2                              if( 0x08==length )
 295   2                              {
 296   3                                  mVarSetupLength=(request.buffer[6]&0x7f);                   //控制传输数据长度最大设置为128
 297   3                                      if( !(request.r.bmReuestType&0x60) )                    //标准请求
 298   3                                      {
 299   4                                              mVarSetupRequest=request.r.bRequest;                    //暂存标准请求码, 标准请求码有12种, 其中有2种是为将来保留的
 300   4                                              switch( request.r.bRequest )                                    //分析标准请求
 301   4                                              {
 302   5      //标准请求, 1                                           
C51 COMPILER V7.06   CH375                                                                 04/07/2006 09:06:59 PAGE 6   

 303   5                                                      case DEF_USB_CLR_FEATURE:                                                       //请求, 清除特性, 现在只支持端口
 304   5                                                              if(debug) uartPutStr("clr feature\n\r");
 305   5                                                              if((request.r.bmReuestType&0x1F)==0x02)                 //接受者, 0-设备, 1-接口, 2-端点, 3-其他
 306   5                                                              {
 307   6                                                                      switch( request.buffer[4] )                                     //表明是哪一个接口或节点, bit7-表方向, 1-入; bit0-3端点号
 308   6                                                                      {
 309   7                                                                              case 0x82:                      //端点2, 入
 310   7                                                                                      CH375_WR_CMD_PORT( CMD_SET_ENDP7 ); //设置端点2发送器, 清除端点2上传
 311   7                                                                                      CH375_WR_DAT_PORT( 0x8E );          //发命令清除端点
 312   7                                                                                      break;
 313   7                                                                              case 0x02:                      //端点2, 出
 314   7                                                                                      CH375_WR_CMD_PORT( CMD_SET_ENDP6 );
 315   7                                                                                      CH375_WR_DAT_PORT( 0x80 );                      //清除端点2下传
 316   7                                                                                      break;
 317   7                                                                              case 0x81:                      //
 318   7                                                                                      CH375_WR_CMD_PORT( CMD_SET_ENDP5 ); //清除端点1上传
 319   7                                                                                      CH375_WR_DAT_PORT( 0x8E );
 320   7                                                                                      break;
 321   7                                                                              case 0x01:
 322   7                                                                                      CH375_WR_CMD_PORT( CMD_SET_ENDP4 ); //清除端点1下传
 323   7                                                                                      CH375_WR_DAT_PORT( 0x80 );
 324   7                                                                                      break;
 325   7                                                                              default:
 326   7                                                                                      break;
 327   7                                                                      }
 328   6                                                              }
 329   5                                                              else
 330   5                                                              {
 331   6                                                                      CH375FLAGERR=1; //不支持的清除特性,置错误标志
 332   6                                                              }
 333   5                                                              break;
 334   5      //标准请求, 2                                                                   
 335   5                                                      case DEF_USB_GET_STATUS:                //标准请求, 获得状态
 336   5                                                              if(debug) uartPutStr("G_STATUS\n\r");
 337   5                                                              request.buffer[0]=0;
 338   5                                                              request.buffer[1]=0;            //上传状态
 339   5                                                              break;
 340   5      //标准请求, 3                                                   
 341   5                                                      case DEF_USB_SET_ADDRESS:               //标准请求, 设置地址
 342   5                                                              VarUsbAddress=request.buffer[2]; //暂存USB主机发来的地址
 343   5                                                              break;
 344   5      //标准请求, 4                                                   
 345   5                                                      case DEF_USB_GET_DESCR:                 //标准请求, 获得描述符
 346   5                                                      /*      if(request.buffer[3]==1)                                                        //设备描述符上传
 347   5                                                                      VarSetupDescr=DevDes;
 348   5                                                              else if(request.buffer[3]==2)                                                   //配置描述符上传
 349   5                                                                      VarSetupDescr=ConDes;
 350   5                                                              else if(request.buffer[3]==3) {
 351   5                                                                      if ( request.buffer[2]== 0 ) VarSetupDescr=LangDes;
 352   5                                                                      else VarSetupDescr=SerDes;                                              //做字符串处理
 353   5                                                              }
 354   5                                                              mCh375DesUp();*/
 355   5                                                      
 356   5                                                              switch(request.buffer[3])
 357   5                                                              {
 358   6                                                                      case USB_DEVICE:                        //设备描述苻
 359   6                                                                              if(debug) uartPutStr("DEVICE\n\r");
 360   6                                                                              VarSetupDescr=DevDes;
 361   6                                                                              break;
 362   6                                                                      case USB_CONFIGURATION:         //配置描述符
 363   6                                                                              if(debug) uartPutStr("CONFIG\n\r");
 364   6                                                                              VarSetupDescr=ConDes;
C51 COMPILER V7.06   CH375                                                                 04/07/2006 09:06:59 PAGE 7   

 365   6                                                                              break;
 366   6                                                                      case USB_STRING:                        //字符串描述符
 367   6                                                                              if(debug) uartPutStr("STRING\n\r");
 368   6                                                                              if(0==request.buffer[2])                        
 369   6                                                                                      VarSetupDescr=LangDes; 
 370   6                                                                              else
 371   6                                                                                      VarSetupDescr=SerDes;   
 372   6                                                                              break;
 373   6                                                                      case USB_HID:                           //HID描述符
 374   6                                                                              if(debug) uartPutStr("HID\n\r");
 375   6                                                                              VarSetupDescr=Class_Descriptor;
 376   6                                                                              break;
 377   6                                                                      case USB_REPORT:                        //
 378   6                                                                              if(debug) uartPutStr("REPORT\n\r");
 379   6                                                                              VarSetupDescr=hid_report_desc_table;
 380   6                                                                              break; 
 381   6                                                                      default:
 382   6                                                                              if(debug) uartPutStr("NO_DES\n\r");
 383   6                                                                              break;
 384   6                                                              }                       
 385   5                                                              mCh375DesUp();                                                                                  //其余描述符不支持
 386   5                                                              break;
 387   5                                                      case DEF_USB_SET_FEATURE:
 388   5                                                              CH375_WR_CMD_PORT( CMD_SET_ENDP4 ); //清除端点1下传
 389   5                                                              CH375_WR_DAT_PORT( 0x80 );
 390   5                                                              break;  
 391   5      //标准请求, 5                                                   
 392   5                                                      case DEF_USB_GET_CONFIG:                                //获得配置

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -