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

📄 sl811.lst

📁 单片机读写u盘的完整程序,代码全部用c语言编写。非常有价值的程序。这是本人花2500元购买的开发板源吗
💻 LST
📖 第 1 页 / 共 4 页
字号:
 561   1              // Get USB Device Descriptors on EP0 & Addr X
 562   1              //------------------------------------------------
 563   1              pDev =(pDevDesc)DBUF;
 564   1              usbstack.usbaddr=uAddr;
 565   1              
 566   1              usbstack.setup.wLength=pDev->bLength;
 567   1              usbstack.setup.wValue=DEVICE;
 568   1              usbstack.setup.wIndex=0;
 569   1              
 570   1              //usbstack.setup.wLength=0x12;//(unsigned short)DBUF[0];//pDev->bLength;
 571   1              usbstack.buffer=DBUF;
 572   1              
 573   1              if (!GetDesc())         
 574   1                      return FALSE;                                                           // For this current device:
 575   1              uDev.wVID  = pDev->idVendor;                    // save VID
 576   1              uDev.wPID  = pDev->idProduct;                   // save PID
 577   1              uDev.iMfg  = pDev->iManufacturer;               // save Mfg Index
 578   1              uDev.iPdt  = pDev->iProduct;                    // save Product Index
 579   1      
 580   1              //------------------------------------------------
 581   1              // Get String Descriptors
 582   1              //------------------------------------------------
 583   1              //------------------------------------------------
 584   1              // Get Slave USB Configuration Descriptors
 585   1              //------------------------------------------------
 586   1              
 587   1              pCfg = (pCfgDesc)DBUF;  
 588   1              
 589   1              usbstack.usbaddr=uAddr;
 590   1              usbstack.setup.wValue=CONFIGURATION;
 591   1              usbstack.setup.wIndex=0;
 592   1              usbstack.setup.wLength=64;
 593   1              usbstack.buffer=DBUF;   
 594   1              if (!GetDesc())                 
 595   1                      return FALSE;   
 596   1              
 597   1              pIfc = (pIntfDesc)(DBUF + 9);                                   // point to Interface Descp
 598   1              uDev.bClass     = pIfc->iClass;                 // update to class type
 599   1              uDev.bNumOfEPs = (pIfc->bEndPoints <= MAX_EP) ? pIfc->bEndPoints : MAX_EP;
 600   1              
 601   1              if(uDev.bClass==8) //mass storage device
 602   1                      bXXGFlags.bits.bMassDevice=TRUE;
 603   1              //------------------------------------------------
 604   1              // Set configuration (except for HUB device)
 605   1              //------------------------------------------------
 606   1              usbstack.usbaddr=uAddr;
 607   1              usbstack.setup.wValue=DEVICE;
 608   1              //if (uDev[usbaddr].bClass!=HUBCLASS)                           // enumerating a FS/LS non-hub device
 609   1                      if (!Set_Configuration())               // connected directly to SL811HS
 610   1                                      return FALSE;
 611   1      
 612   1              //------------------------------------------------
C51 COMPILER V6.21  SL811                                                                  06/13/2005 16:14:57 PAGE 11  

 613   1              // For each slave endpoints, get its attributes
 614   1              // Excluding endpoint0, only data endpoints
 615   1              //------------------------------------------------
 616   1              
 617   1              epLen = 0;
 618   1              for (i=1; i<=uDev.bNumOfEPs; i++)                               // For each data endpoint
 619   1              {
 620   2                      pEnp = (pEPDesc)(DBUF + 9 + 9 + epLen);                         // point to Endpoint Descp(non-HID)
 621   2                      //if(pIfc->iClass == HIDCLASS)  
 622   2                      //      pEnp = (pEPDesc)(DBUF + 9 + 9 + 9 + epLen);             // update pointer to Endpoint(HID)
 623   2                      uDev.bEPAddr[i]         = pEnp->bEPAdd;                 // Ep address and direction
 624   2                      uDev.bAttr[i]           = pEnp->bAttr;                  // Attribute of Endpoint
 625   2                      uDev.wPayLoad[i]        = WordSwap(pEnp->wPayLoad);             // Payload of Endpoint
 626   2                      uDev.bInterval[i]       = pEnp->bInterval;              // Polling interval
 627   2                      uDev.bData1[i] = 0;                                 // init data toggle
 628   2                      epLen += 7;
 629   2                      //////////////////////////////
 630   2                      if(uDev.bAttr[i]==0x2)
 631   2                      {
 632   3                          if(uDev.bEPAddr[i]&0x80)
 633   3                              usbstack.epbulkin=uDev.bEPAddr[i];
 634   3                          else
 635   3                              usbstack.epbulkout=uDev.bEPAddr[i];
 636   3                      }
 637   2                      //////////////////////////////
 638   2              }
 639   1              
 640   1              return TRUE;
 641   1      }
 642          
 643          ///////////////////////////////////////////////////////////////////////////////////////////
 644          void SL811_Init(void)
 645          {       
 646   1              bXXGFlags.bits.SLAVE_ONLINE = FALSE;
 647   1              bXXGFlags.bits.SLAVE_FOUND = FALSE;
 648   1              bXXGFlags.bits.SLAVE_REMOVED=FALSE;
 649   1              
 650   1              bXXGFlags.bits.SLAVE_ENUMERATED = FALSE;
 651   1              bXXGFlags.bits.SLAVE_IS_ATTACHED = FALSE;
 652   1              
 653   1              SL811_CS=0;
 654   1              ///////////////////////////////////////////////////////
 655   1              
 656   1              SL811Write(cDATASet,0xe0);
 657   1              SL811Write(cSOFcnt,0xae);
 658   1              SL811Write(CtrlReg,0x5);
 659   1                              
 660   1              SL811Write(EP0Status,0x50);
 661   1              SL811Write(EP0Counter,0);
 662   1              SL811Write(EP0Control,0x01);
 663   1                              
 664   1              
 665   1              SL811Write(IntEna,0x20);                // USB-A, Insert/Remove, USB_Resume.
 666   1              SL811Write(IntStatus,INT_CLEAR);        // Clear Interrupt enable status
 667   1      }
 668          
 669          void check_key_LED(void)
 670          {
 671   1              static unsigned char last_key=0x7;
 672   1              unsigned char *pBuf;//=(unsigned char *)&UartCmdBlock;
 673   1              unsigned int *wpBuf;
 674   1              unsigned char intr;
C51 COMPILER V6.21  SL811                                                                  06/13/2005 16:14:57 PAGE 12  

 675   1              unsigned int i,len;
 676   1              //SL811Write(IntStatus,INSERT_REMOVE);
 677   1              intr=SL811Read(IntStatus);
 678   1              if(intr & USB_RESET)
 679   1                         {
 680   2                                      //bXXGFlags.bits.SLAVE_IS_ATTACHED = FALSE;     // Set USB device found flag
 681   2                         if(bXXGFlags.bits.SLAVE_ONLINE ==TRUE)
 682   2                              {bXXGFlags.bits.SLAVE_REMOVED=TRUE;
 683   3                              bXXGFlags.bits.SLAVE_ONLINE =FALSE;}
 684   2                         }
 685   1              else    {
 686   2                                      //bXXGFlags.bits.SLAVE_IS_ATTACHED = TRUE;
 687   2                         if(bXXGFlags.bits.SLAVE_ONLINE == FALSE)
 688   2                              {bXXGFlags.bits.SLAVE_FOUND=TRUE;
 689   3                              bXXGFlags.bits.SLAVE_ONLINE =TRUE;}
 690   2                         }
 691   1              //bXXGFlags.bits.SLAVE_FOUND;
 692   1              
 693   1              //bXXGFlags.bits.SLAVE_REMOVED=0;
 694   1              SL811Write(IntStatus,INT_CLEAR);
 695   1              SL811Write(IntStatus,INSERT_REMOVE);
 696   1              
 697   1              /////// for test only /////////////////////
 698   1              intr=SWM0;
 699   1              intr&=0x1;
 700   1              if(intr!=last_key)
 701   1                      {
 702   2                      if(intr==0)
 703   2                              {
 704   3                              pBuf=(unsigned char *)&UartCmdBlock;
 705   3                              for(i=0;i<64;i++)
 706   3                                      *(pBuf+i)=*(cmd_test_createfile+i);
 707   3                              bXXGFlags.bits.bUartInDone=1;
 708   3                              last_key=0;
 709   3                              }
 710   2                      else
 711   2                              last_key=1;
 712   2                      }
 713   1              ////////////////////////////////////////////
 714   1              intr=SWM1;
 715   1              intr&=0x1;
 716   1              if(intr!=last_key)
 717   1                      {
 718   2                      if(intr==0)
 719   2                              {
 720   3                              pBuf=(unsigned char *)&UartCmdBlock;
 721   3                              for(i=0;i<64;i++)
 722   3                                      *(pBuf+i)=*(cmd_test_writefile+i);
 723   3                              wpBuf=(unsigned int *)UARTBUF;
 724   3                              len=SwapINT16(UartCmdBlock.CmdBlock.Cmd_WriteFile.writeLength)/2;
 725   3                              for(i=0;i<len;i++)
 726   3                                      *(wpBuf+i)=i;
 727   3                              bXXGFlags.bits.bUartInDone=1;
 728   3                              last_key=0;
 729   3                              }
 730   2                      else
 731   2                              last_key=1;
 732   2                      }
 733   1              
 734   1              /////////////////////////////////////////////           
 735   1      }

C51 COMPILER V6.21  SL811                                                                  06/13/2005 16:14:57 PAGE 13  


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1894    ----
   CONSTANT SIZE    =    124    ----
   XDATA SIZE       =    512    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     21      33
   IDATA SIZE       =     45    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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