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

📄 descriptor.lst

📁 增强型51单片机fs7821sd卡、mmc卡读写程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 149                        // The rest is identical to Configuration Desc.
 150                  0x20, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32 };
 151          
 152          code BYTE OtherSpeedConfigDescLen = sizeof(OtherSpeedConfigDesc);
 153          --------------------------------------------------------------------*/
 154          
 155          //--------------------------------------------------------------------
 156          // Prepare Descriptor
 157          //--------------------------------------------------------------------
 158          void CtrlDescPrepare()
 159          {
 160   1          xdata PUSB_REQUEST pReq = &(pSotaUsbRequest->Request);
 161   1          xdata BYTE DescType, DescIndex;
 162   1      
 163   1          DescType  = ((TDataCast *)&(pReq->wValue))->ucByte[1];
 164   1          DescIndex = ((TDataCast *)&(pReq->wValue))->ucByte[0];
 165   1        
 166   1          switch (DescType)
 167   1          {
 168   2              case DEVICE_DESC_TYPE:
 169   2      
 170   2                  CtrlXferLen = DeviceDescLen;
 171   2                  memcpy((BYTE xdata *)UsbBuf, 
 172   2                         (BYTE code *)DeviceDesc,
 173   2                         CtrlXferLen);
 174   2                  break;
 175   2            
 176   2              case STRING_DESC_TYPE:
 177   2      
 178   2                  if((DescIndex >= 0)&&(DescIndex <= 3))
C51 COMPILER V7.02b   DESCRIPTOR                                                           02/01/2007 10:35:43 PAGE 4   

 179   2                  {
 180   3                      CtrlXferLen = StrCtrlXferLen[DescIndex];
 181   3                      memcpy((BYTE xdata *)UsbBuf,
 182   3                             (BYTE code *)StrDescPtr[DescIndex],
 183   3                             CtrlXferLen);
 184   3                  }
 185   2                  else
 186   2                      CtrlXferLen = 0;
 187   2                  break;
 188   2        
 189   2              case DEVICE_QUALIFIER_DESC_TYPE:
 190   2              
 191   2                  CtrlXferLen = DeviceQualifierDescLen;
 192   2                  memcpy((BYTE xdata *)UsbBuf, 
 193   2                         (BYTE code *)DeviceQualifierDesc,
 194   2                         CtrlXferLen);
 195   2                  break;
 196   2             
 197   2              case CONFIGURATION_DESC_TYPE:
 198   2      
 199   2                  CtrlXferLen = ConfigDescLen;
 200   2                  memcpy((BYTE xdata *)UsbBuf, 
 201   2                         (BYTE code *)ConfigDesc,
 202   2                         CtrlXferLen);
 203   2                  if(CSRRead(USB_BASE + USB_SPEED) & SPEED) // High Speed
 204   2                  {
 205   3                      UsbBuf[22] = (BYTE)(USB20_MAX_PKT_SIZE);
 206   3                      UsbBuf[23] = (BYTE)(USB20_MAX_PKT_SIZE >> 8); 
 207   3                      UsbBuf[29] = (BYTE)(USB20_MAX_PKT_SIZE);
 208   3                      UsbBuf[30] = (BYTE)(USB20_MAX_PKT_SIZE >> 8); 
 209   3                  }
 210   2                  break;
 211   2      
 212   2              case OTHER_SPEED_CONFIG_DESC_TYPE:
 213   2      
 214   2                  CtrlXferLen = ConfigDescLen;
 215   2                  memcpy((BYTE xdata *)UsbBuf, 
 216   2                         (BYTE code *)ConfigDesc,
 217   2                         CtrlXferLen);
 218   2                  UsbBuf[1] = OTHER_SPEED_CONFIG_DESC_TYPE;
 219   2                  if(CSRRead(USB_BASE + USB_SPEED) & SPEED) // High Speed
 220   2                  {
 221   3                      UsbBuf[22] = (BYTE)(USB20_MAX_PKT_SIZE);
 222   3                      UsbBuf[23] = (BYTE)(USB20_MAX_PKT_SIZE >> 8); 
 223   3                      UsbBuf[29] = (BYTE)(USB20_MAX_PKT_SIZE);
 224   3                      UsbBuf[30] = (BYTE)(USB20_MAX_PKT_SIZE >> 8); 
 225   3                  }
 226   2                  break;
 227   2      
 228   2      
 229   2              default:  
 230   2                  // Error Condition, Stall transactions.
 231   2                  pSotaUsbRequest->InProgress = false;
 232   2                  CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0_STL);    
 233   2                  CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL);  
 234   2          }
 235   1        
 236   1          if(pReq->wLength < CtrlXferLen)
 237   1              CtrlXferLen = pReq->wLength;
 238   1      }  
 239          
 240          //----------------------------------------------------------------------------
C51 COMPILER V7.02b   DESCRIPTOR                                                           02/01/2007 10:35:43 PAGE 5   

 241          // Get Descriptor Request 
 242          //----------------------------------------------------------------------------
 243          void CtrlReqGetDescriptor()
 244          {
 245   1        BYTE Token = pSotaUsbRequest->Token;
 246   1          
 247   1        switch(Token)
 248   1        {
 249   2          case SETUP_TOKEN:
 250   2               Fifo2ClkCpu(); // need ?
 251   2               CtrlDescPrepare();
 252   2               Fifo2ClkUsb(); // need ?
 253   2               pSotaUsbRequest->LoadInDataOk = true;
 254   2               CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0_STL);
 255   2               break;
 256   2      
 257   2          case IN_TOKEN:
 258   2               {
 259   3                 BYTE i;
 260   3                
 261   3                 if (pSotaUsbRequest->LoadInDataOk)
 262   3                 { 
 263   4                   for(i = 0; i < CtrlXferLen; i++)
 264   4                       CSRWrite(USB_BASE + EP0_TXDATA, UsbBuf[i]);
 265   4                   CSRWrite(USB_BASE + EP0_TXCNT, CtrlXferLen);
 266   4                   CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0);
 267   4                   CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);
 268   4                   pSotaUsbRequest->FinishedDataLen += CtrlXferLen;
 269   4                   pSotaUsbRequest->LoadInDataOk = false;
 270   4                 }
 271   3                 break;   
 272   3               }
 273   2      
 274   2          case IN_OK_TOKEN:
 275   2               CSRWrite(USB_BASE + EP0_RXCSR, EN_RX0);    
 276   2               if (pSotaUsbRequest->FinishedDataLen <= (BYTE)CtrlXferLen)  // Keep sending descriptor data.
 277   2                 pSotaUsbRequest->LoadInDataOk = true;        
 278   2               else 
 279   2                 CSRWrite(USB_BASE + EP0_TXCSR, EN_TX0_STL); 
 280   2               break;
 281   2                
 282   2          case OUT_TOKEN:
 283   2          default:
 284   2               // Ctrl Read End
 285   2               pSotaUsbRequest->InProgress = false;
 286   2               break;          
 287   2        }  
 288   1      }
 289          
 290          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    518    ----
   CONSTANT SIZE    =    135    ----
   XDATA SIZE       =      2       5
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       1
   IDATA SIZE       =   ----    ----
   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 + -