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

📄 sl811.lst

📁 采用811芯片实现单片机读写U盘的源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.00  SL811                                                                  09/22/2005 17:57:50 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE SL811
OBJECT MODULE PLACED IN .\out\SL811.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SL811.C LARGE BROWSE DEBUG OBJECTEXTEND OBJECT(.\out\SL811.obj)

stmt level    source

   1          #define SL811_FILE
   2          #include "include.h"
   3          
   4          //extern XXGFLAGS bdata bXXGFlags;
   5          
   6          //XXGPKG usbstack;
   7          //unsigned char remainder;
   8          //extern UART_CMD_BLOCK xdata UartCmdBlock;
   9          //extern UART_RSP_BLOCK xdata UartRspBlock;
  10          //unsigned char xdata DBUF[BUFFER_LENGTH];
  11          //extern unsigned char xdata UARTBUF[UARTBUF_LENGTH];
  12          //pUSBDEV  idata        uDev;   // Multiple USB devices attributes, Max 5 devices
  13          
  14          //code unsigned char cmd_test_createfile[]=
  15          //      {0x07,
  16          //       0x54,0x45,0x53,0x54,0x20,0x20,0x20,0x20,
  17          //       0x44,0x41,0x54,0x20,0x20,0x75,0xcd,0xb4,
  18          //       0xe2,0x2e,0xe2,0x20,0x20,0xce,0xb4,0xe2,
  19          //       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  20          //       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  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
  24          //       };
  25          //code unsigned char cmd_test_writefile[]=
  26          //      {
  27          //      0x09,
  28          //      0x00,
  29          //      0x00,0x70,
  30          //      0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  31          //      0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  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          //      };
  38          //*****************************************************************************************
  39          // SL811H variables initialization
  40          //*****************************************************************************************
  41          unsigned char SL811_GetRev(void)
  42          {
  43   1              //SL811Write(SL811_ADDR_PORT, 0x0e);
  44   1              return SL811Read(0x0e);
  45   1      }
  46          
  47          void USBReset(void)
  48          {
  49   1              unsigned char temp;
  50   1              #ifdef ZLH_DEBUG
  51   1              disp_data(2,"B3");
  52   1      //      disp_data(1, &temp);
  53   1              #endif
  54   1              temp=SL811Read(CtrlReg);   
  55   1              #ifdef ZLH_DEBUG
C51 COMPILER V7.00  SL811                                                                  09/22/2005 17:57:50 PAGE 2   

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

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

 180   2                      if (result & EP0_ACK)                                                                   // Transmission ACK
 181   2                      {       
 182   3      
 183   3                              // SETUP TOKEN
 184   3                              if(usbstack.pid == PID_SETUP)                                                           // do nothing for SETUP/OUT token 
 185   3                                      break;                                                                                  // exit while(1) immediately
 186   3      

⌨️ 快捷键说明

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