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

📄 sl811.lst

📁 单片机读写u盘的完整程序,代码全部用c语言编写。非常有价值的程序。这是本人花2500元购买的开发板源吗
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V6.21  SL811                                                                  06/13/2005 16:14:57 PAGE 1   


C51 COMPILER V6.21, COMPILATION OF MODULE SL811
OBJECT MODULE PLACED IN SL811.OBJ
COMPILER INVOKED BY: g:\Keil_run\C51\BIN\C51.EXE SL811.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "common.h"
   2          #include "SL811.H"
   3          #include "HAL.H"
   4          #include "HPI.H"
   5          
   6          extern XXGFLAGS bdata bXXGFlags;
   7          
   8          XXGPKG usbstack;
   9          unsigned char remainder;
  10          extern UART_CMD_BLOCK xdata UartCmdBlock;
  11          extern UART_RSP_BLOCK xdata UartRspBlock;
  12          unsigned char xdata DBUF[BUFFER_LENGTH];
  13          extern unsigned char xdata UARTBUF[UARTBUF_LENGTH];
  14          pUSBDEV  idata  uDev;   // Multiple USB devices attributes, Max 5 devices
  15          
  16          code unsigned char cmd_test_createfile[]=
  17                  {0x07,
  18                   0x54,0x45,0x53,0x54,0x20,0x20,0x20,0x20,
  19                   0x44,0x41,0x54,0x20,0x20,0x75,0xcd,0xb4,
  20                   0xe2,0x2e,0xe2,0x20,0x20,0xce,0xb4,0xe2,
  21                   0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  22                   0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  23                   0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  24                   0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  25                   0x20,0x20,0x20,0x20,0x20,0x20,0x20
  26                   };
  27          code unsigned char cmd_test_writefile[]=
  28                  {
  29                  0x09,
  30                  0x00,
  31                  0x00,0x70,
  32                  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  33                  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  34                  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  35                  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  36                  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  37                  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  38                  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20
  39                  };
  40          //*****************************************************************************************
  41          // SL811H variables initialization
  42          //*****************************************************************************************
  43          unsigned char SL811_GetRev(void)
  44          {
  45   1              //SL811Write(SL811_ADDR_PORT, 0x0e);
  46   1              return SL811Read(0x0e);
  47   1      }
  48          
  49          void USBReset(void)
  50          {
  51   1              unsigned char temp;
  52   1              temp=SL811Read(CtrlReg);   
  53   1              SL811Write(CtrlReg,temp|0x08);
  54   1              DelayMs(25);            
  55   1                      
C51 COMPILER V6.21  SL811                                                                  06/13/2005 16:14:57 PAGE 2   

  56   1              SL811Write(CtrlReg,temp);    
  57   1      }
  58          
  59          //*****************************************************************************************
  60          // usbXfer:
  61          // successful transfer = return TRUE
  62          // fail transfer = return FALSE
  63          //*****************************************************************************************
  64          unsigned char usbXfer(void)
  65          {  
  66   1              
  67   1              unsigned char   xferLen, data0, data1,cmd;
  68   1              unsigned char intr,result,remainder,dataX,bufLen,addr,timeout;
  69   1              
  70   1              //------------------------------------------------
  71   1              // Default setting for usb trasnfer
  72   1              //------------------------------------------------
  73   1              dataX=timeout=0;
  74   1              //result          = SL811Read(EP0Status);       
  75   1              data0 = EP0_Buf;                                        // DATA0 buffer address
  76   1              data1 = data0 + (unsigned char)usbstack.wPayload;       // DATA1 buffer address
  77   1              bXXGFlags.bits.DATA_STOP=FALSE;
  78   1              bXXGFlags.bits.TIMEOUT_ERR=FALSE;
  79   1              //------------------------------------------------
  80   1              // Define data transfer payload
  81   1              //------------------------------------------------
  82   1              if (usbstack.wLen >= usbstack.wPayload)                 // select proper data payload
  83   1                      xferLen = usbstack.wPayload;                    // limit to wPayload size 
  84   1              else                                                    // else take < payload len
  85   1                      xferLen = usbstack.wLen;                        //      
  86   1              
  87   1              // For IN token
  88   1              if (usbstack.pid==PID_IN)                               // for current IN tokens
  89   1              {                                                                                               //
  90   2                      cmd = sDATA0_RD;                        // FS/FS on Hub, sync to sof
  91   2              }
  92   1              // For OUT token
  93   1              else if(usbstack.pid==PID_OUT)                          // for OUT tokens
  94   1              {       
  95   2                      if(xferLen)                                                                     // only when there are  
  96   2                              {
  97   3                              //intr=usbstack.setup.wLength;
  98   3                              //usbstack.setup.wLength=WordSwap(usbstack.setup.wLength);
  99   3                              SL811BufWrite(data0,usbstack.buffer,xferLen);   // data to transfer on USB
 100   3                              //usbstack.setup.wLength=intr;
 101   3                              }
 102   2                      cmd = sDATA0_WR;
 103   2                                                                      // FS/FS on Hub, sync to sof
 104   2              // implement data toggle
 105   2                      bXXGFlags.bits.bData1 = uDev.bData1[usbstack.endpoint];
 106   2                      uDev.bData1[usbstack.endpoint] = (uDev.bData1[usbstack.endpoint] ? 0 : 1); // DataToggle
 107   2                      
 108   2                      if(bXXGFlags.bits.bData1)
 109   2                              cmd |= 0x40;                              // Set Data1 bit in command
 110   2                      
 111   2              }
 112   1              // For SETUP/OUT token
 113   1              else                                                                                    // for current SETUP/OUT tokens
 114   1              {       
 115   2                      if(xferLen)                                                                     // only when there are  
 116   2                              {
 117   3                              intr=usbstack.setup.wLength;
C51 COMPILER V6.21  SL811                                                                  06/13/2005 16:14:57 PAGE 3   

 118   3                              usbstack.setup.wValue=WordSwap(usbstack.setup.wValue);
 119   3                              usbstack.setup.wIndex=WordSwap(usbstack.setup.wIndex);
 120   3                              usbstack.setup.wLength=WordSwap(usbstack.setup.wLength);
 121   3                              SL811BufWrite(data0,(unsigned char *)&usbstack.setup,xferLen);  // data to transfer on USB
 122   3                              usbstack.setup.wLength=intr;
 123   3                              }
 124   2                      cmd = sDATA0_WR;                                                // FS/FS on Hub, sync to sof
 125   2              }
 126   1              //------------------------------------------------
 127   1              // For EP0's IN/OUT token data, start with DATA1
 128   1              // Control Endpoint0's status stage.
 129   1              // For data endpoint, IN/OUT data, start ????
 130   1              //------------------------------------------------
 131   1              if (usbstack.endpoint == 0 && usbstack.pid != PID_SETUP)        // for Ep0's IN/OUT token
 132   1                      cmd |= 0x40;                                    // always set DATA1
 133   1              //------------------------------------------------
 134   1              // Arming of USB data transfer for the first pkt
 135   1              //------------------------------------------------
 136   1              SL811Write(EP0Status,((usbstack.endpoint&0x0F)|usbstack.pid));  // PID + EP address
 137   1              SL811Write(EP0Counter,usbstack.usbaddr);                        // USB address
 138   1              SL811Write(EP0Address,data0);                                   // buffer address, start with "data0"
 139   1              SL811Write(EP0XferLen,xferLen);                                 // data transfer length
 140   1              SL811Write(IntStatus,INT_CLEAR);                                // clear interrupt status
 141   1              SL811Write(EP0Control,cmd);                                     // Enable ARM and USB transfer start here
 142   1              
 143   1              //------------------------------------------------
 144   1              // Main loop for completing a wLen data trasnfer
 145   1              //------------------------------------------------
 146   1              while(TRUE)
 147   1              {   
 148   2                      //---------------Wait for done interrupt------------------
 149   2                      while(TRUE)                                                                                             // always ensure requested device is
 150   2                      {                                                                                                               // inserted at all time, then you will
 151   3                              //intr=SL811Read(cSOFcnt);
 152   3                              //intr=SL811Read(IntEna);
 153   3                              intr = SL811Read(IntStatus);    
 154   3                                                                      // wait for interrupt to be done, and 
 155   3                              if((intr & USB_RESET) || (intr & INSERT_REMOVE))        // proceed to parse result from slave 
 156   3                              {                                                                                                       // device.
 157   4                                      bXXGFlags.bits.DATA_STOP = TRUE;                                                                // if device is removed, set DATA_STOP
 158   4                                      return FALSE;                                                                   // flag true, so that main loop will 
 159   4                              }                                                                                                       // know this condition and exit gracefully
 160   3                              if(intr & USB_A_DONE)                                                           
 161   3                                      break;                                                                                  // interrupt done !!!
 162   3                      }
 163   2      
 164   2                      SL811Write(IntStatus,INT_CLEAR);                                                // clear interrupt status
 165   2                      result    = SL811Read(EP0Status);                                               // read EP0status register
 166   2                      remainder = SL811Read(EP0Counter);                                              // remainder value in last pkt xfer
 167   2                      //while
 168   2                      //-------------------------ACK----------------------------
 169   2                      if (result & EP0_ACK)                                                                   // Transmission ACK
 170   2                      {       
 171   3      
 172   3                              // SETUP TOKEN
 173   3                              if(usbstack.pid == PID_SETUP)                                                           // do nothing for SETUP/OUT token 
 174   3                                      break;                                                                                  // exit while(1) immediately
 175   3      
 176   3                              // OUT TOKEN                            
 177   3                              else if(usbstack.pid == PID_OUT)
 178   3                              {
 179   4                                      usbstack.wLen  -= (WORD)xferLen;
C51 COMPILER V6.21  SL811                                                                  06/13/2005 16:14:57 PAGE 4   

 180   4                                      usbstack.buffer += xferLen;
 181   4                                      //cmd ^=0x40;

⌨️ 快捷键说明

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