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

📄 sl811.lst

📁 本程序是基于单片机C8051F020上使用SL811 USB 总线接口实现检测U 盘的功能。插上U 盘
💻 LST
📖 第 1 页 / 共 5 页
字号:
 376   1              if(usbstack.wLen)
 377   1              {
 378   2                      if(!usbXfer())
 379   2                              return FALSE;
 380   2              }
 381   1              return TRUE;
 382   1      }
 383          //*****************************************************************************************
 384          // Control endpoint
 385          //*****************************************************************************************
 386          //void VendorCmd(void)
 387          //{ 
 388          //      ep0Xfer();
 389          //}
 390          
 391          //*****************************************************************************************
 392          // Set Device Address : 
 393          //*****************************************************************************************
 394          
 395          
 396          unsigned char SetAddress(unsigned char addr)
 397          {
 398   1              usbstack.usbaddr=0;
 399   1              usbstack.setup.bmRequest=0;
 400   1              usbstack.setup.bRequest=SET_ADDRESS;
 401   1              usbstack.setup.wValue=addr;
 402   1              usbstack.setup.wIndex=0;
 403   1              usbstack.setup.wLength=0;
 404   1              //usbstack.buffer=&usbstack.setup;
 405   1              return ep0Xfer();
 406   1      
 407   1      }
 408          
 409          //*****************************************************************************************
 410          // Set Device Configuration : 
 411          //*****************************************************************************************
 412          
 413          
 414          unsigned char Set_Configuration(void)
 415          {
 416   1              //usbstack.usbaddr=usbaddr;
 417   1              //usbstack.
 418   1              usbstack.setup.bmRequest=0;
 419   1              usbstack.setup.bRequest=SET_CONFIG;
 420   1              //usbstack.setup.wValue=wVal;
 421   1              usbstack.setup.wIndex=0;
 422   1              usbstack.setup.wLength=0;
 423   1              usbstack.buffer=NULL;
 424   1              return ep0Xfer();
 425   1      
C51 COMPILER V7.06   SL811                                                                 04/30/2005 15:12:27 PAGE 8   

 426   1      }
 427          
 428          //*****************************************************************************************
 429          // Get Device Descriptor : Device, Configuration, String
 430          //*****************************************************************************************
 431          unsigned char GetDesc(void)
 432          { 
 433   1              
 434   1              usbstack.setup.bmRequest=0x80;
 435   1              usbstack.setup.bRequest=GET_DESCRIPTOR;
 436   1              usbstack.setup.wValue=WordSwap(usbstack.setup.wValue);
 437   1              
 438   1              usbstack.wPayload=uDev.wPayLoad[0];
 439   1              //usbstack.buffer=&usbstack.setup;
 440   1              return ep0Xfer();
 441   1      }
 442          
 443          //*****************************************************************************************
 444          // USB Data Endpoint Read/Write
 445          // wLen is in low byte first format
 446          //*****************************************************************************************
 447          
 448          unsigned char DataRW(BYTE epaddr)
 449          {
 450   1              //xdata BYTE pid = PID_OUT;
 451   1      
 452   1              usbstack.pid=PID_OUT;
 453   1              usbstack.endpoint=epaddr&0x0F;
 454   1              
 455   1              if(epaddr & 0x80)       // get direction of transfer
 456   1                      usbstack.pid = PID_IN;                          
 457   1              
 458   1              if(usbXfer())
 459   1                      return TRUE;
 460   1      
 461   1              return FALSE;
 462   1      }
 463          
 464          
 465          //*****************************************************************************************
 466          // USB Device Enumeration Process
 467          // Support 1 confguration and interface #0 and alternate setting #0 only
 468          // Support up to 1 control endpoint + 4 data endpoint only
 469          //*****************************************************************************************
 470          
 471          
 472          unsigned char EnumUsbDev(BYTE usbaddr)
 473          {  
 474   1              unsigned char i;                                                                                        // always reset USB transfer address 
 475   1              unsigned char uAddr = 0;                                                        // for enumeration to Address #0
 476   1              unsigned char epLen;
 477   1      //      unsigned short strLang;
 478   1              
 479   1              pDevDesc  pDev; 
 480   1              pCfgDesc pCfg;
 481   1              pIntfDesc pIfc;
 482   1              pEPDesc pEnp;
 483   1              //------------------------------------------------
 484   1              // Reset only Slave device attached directly
 485   1              //------------------------------------------------
 486   1              uDev.wPayLoad[0] = 64;  // default 64-byte payload of Endpoint 0, address #0
 487   1              if(usbaddr == 1)                // bus reset for the device attached to SL811HS only
C51 COMPILER V7.06   SL811                                                                 04/30/2005 15:12:27 PAGE 9   

 488   1                      USBReset();             // that will always have the USB address = 0x01 (for a hub)
 489   1              
 490   1              DelayMs(25);
 491   1              
 492   1              //i = SL811Read(EP0Status);     
 493   1              //i=SL811Read(IntStatus);
 494   1              //------------------------------------------------
 495   1              // Get USB Device Descriptors on EP0 & Addr 0
 496   1              // with default 64-byte payload
 497   1              //------------------------------------------------
 498   1              pDev =(pDevDesc)DBUF;                                   // ask for 64 bytes on Addr #0
 499   1              
 500   1              usbstack.usbaddr=uAddr;
 501   1              usbstack.setup.wValue=DEVICE;
 502   1              usbstack.setup.wIndex=0;
 503   1              usbstack.setup.wLength=18;
 504   1              //usbstack.setup.wLength=sbstack.setup.wLength);
 505   1              usbstack.buffer=DBUF;
 506   1              
 507   1              if (!GetDesc())                 // and determine the wPayload size
 508   1                      return FALSE;                                                           // get correct wPayload of Endpoint 0
 509   1              uDev.wPayLoad[0]=pDev->bMaxPacketSize0;// on current non-zero USB address
 510   1      
 511   1              //------------------------------------------------
 512   1              // Set Slave USB Device Address
 513   1              //------------------------------------------------
 514   1              if (!SetAddress(usbaddr))                                               // set to specific USB address
 515   1                      return FALSE;                                                           //
 516   1              uAddr = usbaddr;                                                                // transfer using this new address
 517   1      
 518   1              //------------------------------------------------
 519   1              // Get USB Device Descriptors on EP0 & Addr X
 520   1              //------------------------------------------------
 521   1              pDev =(pDevDesc)DBUF;
 522   1              usbstack.usbaddr=uAddr;
 523   1              
 524   1              usbstack.setup.wLength=pDev->bLength;
 525   1              usbstack.setup.wValue=DEVICE;
 526   1              usbstack.setup.wIndex=0;
 527   1              
 528   1              //usbstack.setup.wLength=0x12;//(unsigned short)DBUF[0];//pDev->bLength;
 529   1              usbstack.buffer=DBUF;
 530   1              
 531   1              if (!GetDesc())         
 532   1                      return FALSE;                                                           // For this current device:
 533   1              uDev.wVID  = pDev->idVendor;                    // save VID
 534   1              uDev.wPID  = pDev->idProduct;                   // save PID
 535   1              uDev.iMfg  = pDev->iManufacturer;               // save Mfg Index
 536   1              uDev.iPdt  = pDev->iProduct;                    // save Product Index
 537   1      
 538   1              //------------------------------------------------
 539   1              // Get String Descriptors
 540   1              //------------------------------------------------
 541   1              /*
 542   1              pStr = (pStrDesc)DBUF;  
 543   1              
 544   1              usbstack.usbaddr=uAddr;
 545   1              usbstack.setup.wValue=STRING;
 546   1              usbstack.setup.wIndex=0;
 547   1              usbstack.setup.wLength=4;
 548   1              usbstack.buffer=DBUF;
 549   1              
C51 COMPILER V7.06   SL811                                                                 04/30/2005 15:12:27 PAGE 10  

 550   1              if (!GetDesc())                         // Get string language
 551   1                      return FALSE;                                                           
 552   1      
 553   1              strLang = pStr->wLang;  
 554   1              
 555   1              usbstack.usbaddr=uAddr;
 556   1              usbstack.setup.wValue=(unsigned short)(uDev.iMfg<<8)|STRING;
 557   1              usbstack.setup.wIndex=strLang;
 558   1              usbstack.setup.wLength=4;
 559   1              usbstack.buffer=DBUF;   
 560   1                                                      // get iManufacturer String length
 561   1              if (!GetDesc())                 
 562   1                      return FALSE;   
 563   1              
 564   1              usbstack.usbaddr=uAddr;
 565   1              usbstack.setup.wValue=(unsigned short)(uDev.iMfg<<8)|STRING;
 566   1              usbstack.setup.wIndex=strLang;
 567   1              usbstack.setup.wLength=pStr->bLength;
 568   1              //usbstack.buffer=DBUF; 

⌨️ 快捷键说明

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