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

📄 sl811.lst

📁 单片机读写u盘的完整程序,代码全部用c语言编写。非常有价值的程序。这是本人花2500元购买的开发板源吗
💻 LST
📖 第 1 页 / 共 4 页
字号:
 371   3                      }
 372   2              }
 373   1              //DelayMs(10);
 374   1              //----------------------------------------------------
 375   1              // Status stage IN or OUT zero-length data packet
 376   1              //----------------------------------------------------
 377   1              usbstack.wLen=0;
 378   1              if(!usbXfer())
 379   1                      return FALSE;
 380   1      
 381   1              return TRUE;                                                                                    
 382   1                                              
 383   1      }
 384          
 385          
 386          unsigned char epBulkSend(unsigned char *pBuffer,unsigned int len)
 387          {
 388   1              usbstack.usbaddr=0x1;
 389   1              usbstack.endpoint=usbstack.epbulkout;
 390   1              usbstack.pid=PID_OUT;
 391   1              usbstack.wPayload=64;
 392   1              usbstack.wLen=len;
 393   1              usbstack.buffer=pBuffer;
 394   1              /*
 395   1              while(len>0)
 396   1              {
 397   1                      if (len > usbstack.wPayload)
 398   1                              usbstack.wLen = usbstack.wPayload;
 399   1                      else                            
 400   1                              usbstack.wLen = len;    
 401   1                      while(!usbXfer());
 402   1                              //DelayMs(10);
 403   1                              //return FALSE;
 404   1                      len-=usbstack.wLen;
 405   1                      usbstack.buffer=usbstack.buffer+usbstack.wLen;
 406   1                      //DelayUs(10);
 407   1              }
 408   1              */
 409   1              if(usbstack.wLen)
 410   1              {
 411   2                    while(!usbXfer());
 412   2              }
 413   1              return TRUE;    
 414   1      }
 415          
 416          unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int len)
 417          {
 418   1              usbstack.usbaddr=0x1;
 419   1              usbstack.endpoint=usbstack.epbulkin;
 420   1              usbstack.pid=PID_IN;
 421   1              usbstack.wPayload=64;
 422   1              usbstack.wLen=len;
 423   1              usbstack.buffer=pBuffer;
 424   1              if(usbstack.wLen)
 425   1              {
 426   2                      while(!usbXfer());
C51 COMPILER V6.21  SL811                                                                  06/13/2005 16:14:57 PAGE 8   

 427   2                              //return FALSE;
 428   2              }
 429   1              return TRUE;
 430   1      }
 431          //*****************************************************************************************
 432          // Control endpoint
 433          //*****************************************************************************************
 434          //void VendorCmd(void)
 435          //{ 
 436          //      ep0Xfer();
 437          //}
 438          
 439          //*****************************************************************************************
 440          // Set Device Address : 
 441          //*****************************************************************************************
 442          unsigned char SetAddress(unsigned char addr)
 443          {
 444   1              usbstack.usbaddr=0;
 445   1              usbstack.setup.bmRequest=0;
 446   1              usbstack.setup.bRequest=SET_ADDRESS;
 447   1              usbstack.setup.wValue=addr;
 448   1              usbstack.setup.wIndex=0;
 449   1              usbstack.setup.wLength=0;
 450   1              //usbstack.buffer=&usbstack.setup;
 451   1              return ep0Xfer();
 452   1      
 453   1      }
 454          
 455          //*****************************************************************************************
 456          // Set Device Configuration : 
 457          //*****************************************************************************************
 458          unsigned char Set_Configuration(void)
 459          {
 460   1              //usbstack.usbaddr=usbaddr;
 461   1              //usbstack.
 462   1              usbstack.setup.bmRequest=0;
 463   1              usbstack.setup.bRequest=SET_CONFIG;
 464   1              //usbstack.setup.wValue=wVal;
 465   1              usbstack.setup.wIndex=0;
 466   1              usbstack.setup.wLength=0;
 467   1              usbstack.buffer=NULL;
 468   1              return ep0Xfer();
 469   1      
 470   1      }
 471          
 472          //*****************************************************************************************
 473          // Get Device Descriptor : Device, Configuration, String
 474          //*****************************************************************************************
 475          unsigned char GetDesc(void)
 476          { 
 477   1              
 478   1              usbstack.setup.bmRequest=0x80;
 479   1              usbstack.setup.bRequest=GET_DESCRIPTOR;
 480   1              usbstack.setup.wValue=WordSwap(usbstack.setup.wValue);
 481   1              
 482   1              usbstack.wPayload=uDev.wPayLoad[0];
 483   1              //usbstack.buffer=&usbstack.setup;
 484   1              return ep0Xfer();
 485   1      }
 486          
 487          //*****************************************************************************************
 488          // USB Data Endpoint Read/Write
C51 COMPILER V6.21  SL811                                                                  06/13/2005 16:14:57 PAGE 9   

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

 551   1              uDev.wPayLoad[0]=pDev->bMaxPacketSize0;// on current non-zero USB address
 552   1      
 553   1              //------------------------------------------------
 554   1              // Set Slave USB Device Address
 555   1              //------------------------------------------------
 556   1              if (!SetAddress(usbaddr))                                               // set to specific USB address
 557   1                      return FALSE;                                                           //
 558   1              uAddr = usbaddr;                                                                // transfer using this new address
 559   1      
 560   1              //------------------------------------------------

⌨️ 快捷键说明

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