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

📄 sl811.lst

📁 采用811芯片实现单片机读写U盘的源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 381   3                              usbstack.pid  = PID_IN;
 382   3                      }
 383   2              }
 384   1              //DelayMs(10);
 385   1              //----------------------------------------------------
 386   1              // Status stage IN or OUT zero-length data packet
 387   1              //----------------------------------------------------
 388   1              usbstack.wLen=0;
 389   1              if(!usbXfer())
 390   1                      return FALSE;
 391   1      
 392   1              return TRUE;                                                                                    
 393   1                                              
 394   1      }
 395          
 396          
 397          unsigned char epBulkSend(unsigned char *pBuffer,unsigned int len)
 398          {
 399   1              usbstack.usbaddr=0x1;
 400   1              usbstack.endpoint=usbstack.epbulkout;
 401   1              usbstack.pid=PID_OUT;
 402   1              usbstack.wPayload=64;
 403   1              usbstack.wLen=len;
 404   1              usbstack.buffer=pBuffer;
 405   1              /*
 406   1              while(len>0)
 407   1              {
 408   1                      if (len > usbstack.wPayload)
 409   1                              usbstack.wLen = usbstack.wPayload;
 410   1                      else                            
 411   1                              usbstack.wLen = len;    
 412   1                      while(!usbXfer());
 413   1                              //DelayMs(10);
 414   1                              //return FALSE;
 415   1                      len-=usbstack.wLen;
 416   1                      usbstack.buffer=usbstack.buffer+usbstack.wLen;
 417   1                      //DelayUs(10);
 418   1              }
 419   1              */
 420   1              if(usbstack.wLen)
 421   1              {
 422   2                    while(!usbXfer());
 423   2              }
 424   1              return TRUE;    
 425   1      }
 426          
C51 COMPILER V7.00  SL811                                                                  09/22/2005 17:57:50 PAGE 8   

 427          unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int len)
 428          {
 429   1              usbstack.usbaddr=0x1;
 430   1              usbstack.endpoint=usbstack.epbulkin;
 431   1              usbstack.pid=PID_IN;
 432   1              usbstack.wPayload=64;
 433   1              usbstack.wLen=len;
 434   1              usbstack.buffer=pBuffer;
 435   1              if(usbstack.wLen)
 436   1              {
 437   2                      while(!usbXfer());
 438   2                              //return FALSE;
 439   2              }
 440   1              return TRUE;
 441   1      }
 442          //*****************************************************************************************
 443          // Control endpoint
 444          //*****************************************************************************************
 445          //void VendorCmd(void)
 446          //{ 
 447          //      ep0Xfer();
 448          //}
 449          
 450          //*****************************************************************************************
 451          // Set Device Address : 
 452          //*****************************************************************************************
 453          unsigned char SetAddress(unsigned char addr)
 454          {
 455   1              usbstack.usbaddr=0;
 456   1              usbstack.setup.bmRequest=0;
 457   1              usbstack.setup.bRequest=SET_ADDRESS;
 458   1              usbstack.setup.wValue=addr;
 459   1              usbstack.setup.wIndex=0;
 460   1              usbstack.setup.wLength=0;
 461   1              //usbstack.buffer=&usbstack.setup;
 462   1              return ep0Xfer();
 463   1      
 464   1      }
 465          
 466          //*****************************************************************************************
 467          // Set Device Configuration : 
 468          //*****************************************************************************************
 469          unsigned char Set_Configuration(void)
 470          {
 471   1              //usbstack.usbaddr=usbaddr;
 472   1              //usbstack.
 473   1              usbstack.setup.bmRequest=0;
 474   1              usbstack.setup.bRequest=SET_CONFIG;
 475   1              //usbstack.setup.wValue=wVal;
 476   1              usbstack.setup.wIndex=0;
 477   1              usbstack.setup.wLength=0;
 478   1              usbstack.buffer=NULL;
 479   1              return ep0Xfer();
 480   1      
 481   1      }
 482          
 483          //*****************************************************************************************
 484          // Get Device Descriptor : Device, Configuration, String
 485          //*****************************************************************************************
 486          unsigned char GetDesc(void)
 487          { 
 488   1              
C51 COMPILER V7.00  SL811                                                                  09/22/2005 17:57:50 PAGE 9   

 489   1              usbstack.setup.bmRequest=0x80;
 490   1              usbstack.setup.bRequest=GET_DESCRIPTOR;
 491   1              usbstack.setup.wValue=WordSwap(usbstack.setup.wValue);
 492   1              
 493   1              usbstack.wPayload=uDev.wPayLoad[0];
 494   1              //usbstack.buffer=&usbstack.setup;
 495   1              return ep0Xfer();
 496   1      }
 497          
 498          //*****************************************************************************************
 499          // USB Data Endpoint Read/Write
 500          // wLen is in low byte first format
 501          //*****************************************************************************************
 502          /*
 503          unsigned char DataRW(BYTE epaddr)
 504          {
 505                  //xdata BYTE pid = PID_OUT;
 506          
 507                  usbstack.pid=PID_OUT;
 508                  usbstack.endpoint=epaddr&0x0F;
 509                  
 510                  if(epaddr & 0x80)       // get direction of transfer
 511                          usbstack.pid = PID_IN;                          
 512                  
 513                  if(usbXfer())
 514                          return TRUE;
 515          
 516                  return FALSE;
 517          }
 518          */
 519          
 520          //*****************************************************************************************
 521          // USB Device Enumeration Process
 522          // Support 1 confguration and interface #0 and alternate setting #0 only
 523          // Support up to 1 control endpoint + 4 data endpoint only
 524          //*****************************************************************************************
 525          unsigned char EnumUsbDev(BYTE usbaddr)
 526          {  
 527   1              unsigned char i;                                                                                        // always reset USB transfer address 
 528   1              unsigned char uAddr = 0;                                                        // for enumeration to Address #0
 529   1              unsigned char epLen;
 530   1              //unsigned short strLang;
 531   1              
 532   1              pDevDesc  pDev; 
 533   1              pCfgDesc pCfg;
 534   1              pIntfDesc pIfc;
 535   1              pEPDesc pEnp;
 536   1              //------------------------------------------------
 537   1              // Reset only Slave device attached directly
 538   1              //------------------------------------------------
 539   1              uDev.wPayLoad[0] = 64;  // default 64-byte payload of Endpoint 0, address #0
 540   1              if(usbaddr == 1)                // bus reset for the device attached to SL811HS only
 541   1                      USBReset();             // that will always have the USB address = 0x01 (for a hub)
 542   1              
 543   1      //      DelayMs(25);
 544   1              DelayMs(10);
 545   1      
 546   1              //i = SL811Read(EP0Status);     
 547   1              //i=SL811Read(IntStatus);
 548   1              //------------------------------------------------
 549   1              // Get USB Device Descriptors on EP0 & Addr 0
 550   1              // with default 64-byte payload
C51 COMPILER V7.00  SL811                                                                  09/22/2005 17:57:50 PAGE 10  

 551   1              //------------------------------------------------
 552   1              pDev =(pDevDesc)DBUF;                                   // ask for 64 bytes on Addr #0
 553   1              
 554   1              usbstack.usbaddr=uAddr;
 555   1              usbstack.setup.wValue=DEVICE;
 556   1              usbstack.setup.wIndex=0;
 557   1              usbstack.setup.wLength=18;
 558   1              //usbstack.setup.wLength=sbstack.setup.wLength);
 559   1              usbstack.buffer=DBUF;
 560   1              
 561   1              if (!GetDesc())                 // and determine the wPayload size
 562   1                      return FALSE;                                                           // get correct wPayload of Endpoint 0
 563   1      
 564   1              #ifdef ZLH_DEBUG
 565   1              disp_data(2,"C1");
 566   1              #endif
 567   1              
 568   1              uDev.wPayLoad[0]=pDev->bMaxPacketSize0;// on current non-zero USB address
 569   1      
 570   1              //------------------------------------------------
 571   1              // Set Slave USB Device Address
 572   1              //------------------------------------------------
 573   1              if (!SetAddress(usbaddr))                                               // set to specific USB address
 574   1                      return FALSE;                                                           //
 575   1              uAddr = usbaddr;                                                                // transfer using this new address

⌨️ 快捷键说明

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