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

📄 upsd_usb.lst

📁 upsd 3200序列的usb驱动
💻 LST
📖 第 1 页 / 共 2 页
字号:
 193          // Load and arm EP0 to transmit data.
 194          
 195          void TransmitDataEP0(uchar* pData, int nBytes)
 196          {
 197   1          if (nBytes > EP0_SIZE)
 198   1              nBytes = EP0_SIZE;
 199   1      
 200   1          UCON0 = ((UCON0 ^ uTSEQ0) & uTSEQ0) | uRX0E | uTX0E | nBytes;
 201   1          while (nBytes--)
 202   1          {
 203   2              UDT0 = *pData++;
 204   2          }
 205   1      }
 206          
 207          /////////////////// TransmitDataEPx()
 208          //
 209          // Loads and arms EP1 or EP2 transmit FIFO.
 210          
 211          void TransmitDataEPx(int x, uchar* pData, int nBytes)
 212          {
 213   1          int i;
 214   1      
 215   1          // Reset FIFO
 216   1          UCON1 |= (uTX1E | 8);
 217   1      
 218   1          if ((x == 1) && (nBytes > 8))
 219   1          {
 220   2              nBytes = 8;
 221   2          }
 222   1          else if ((x == 2) && (nBytes > 8))
 223   1          {
 224   2              nBytes = 8;
 225   2          }    
 226   1      
 227   1          // Load data
 228   1          for (i = 0; i < nBytes; i++)
 229   1          {
 230   2              UDT1 = *pData++;
 231   2          }
 232   1      
 233   1          // Arm endpoint
 234   1          UCON1 = ((UCON1 ^ uTSEQ1) & uTSEQ1) 
 235   1              | uTX1E | ((x == 2) ? uEP12SEL : 0) | nBytes;
 236   1      }
 237          
 238          /////////////////// OnGetDescriptor()
 239          
 240          static void OnGetDescriptor()
 241          {
C51 COMPILER V7.00 Beta 6  UPSD_USB                                                        02/19/2003 15:59:28 PAGE 5   

 242   1          int bytesRequested;
 243   1      
 244   1          switch (setupPacket.wValue.hi)
 245   1          {
 246   2          case DT_DEVICE:
 247   2                  pTransmitBufferEP0 = (uchar*) &deviceDesc;
 248   2                  bytesToTransmitEP0 = sizeof(deviceDesc);
 249   2              break;
 250   2          case DT_CONFIGURATION:
 251   2                  pTransmitBufferEP0 = (uchar*) &configDesc;
 252   2                  bytesToTransmitEP0 = configDesc.wTotalLength.lo;
 253   2              break;
 254   2          case DT_STRING:
 255   2                  pTransmitBufferEP0 = (uchar*) stringDescTable[setupPacket.wValue.lo];
 256   2                  bytesToTransmitEP0 = *pTransmitBufferEP0;
 257   2              break;
 258   2      #if HID_DEVICE
 259   2          case DT_HID_CLASS:
 260   2                  pTransmitBufferEP0 = (uchar*) &hidClassDesc;
 261   2                  bytesToTransmitEP0 = hidClassDescSize;
 262   2                      break;
 263   2              case DT_HID_REPORT:
 264   2                  pTransmitBufferEP0 = (uchar*) &reportDesc;
 265   2                  bytesToTransmitEP0 = reportDescSize;
 266   2                      break;
 267   2      #endif
 268   2          default:
 269   2              // Unrecognized descriptor, so stall EP0
 270   2              // UCON0 |= uSTALL0; - problems, so try 0 length packet instead
 271   2              UCON0 = uTSEQ0 | uRX0E | uTX0E;
 272   2              return;
 273   2          }
 274   1      
 275   1          bytesRequested = (setupPacket.wLength.hi << 8) | setupPacket.wLength.lo;
 276   1          shortTransfer = (bytesToTransmitEP0 < bytesRequested);
 277   1          if (bytesToTransmitEP0 > bytesRequested)
 278   1              {
 279   2                      bytesToTransmitEP0 = bytesRequested;
 280   2              }
 281   1      
 282   1          // TransmitDataEP0 will toggle sequence bit to DATA1
 283   1          UCON0 &= ~uTSEQ0;
 284   1          TransmitBufferEP0();
 285   1      }
 286          
 287          /////////////////// ReadSetupPacket()
 288          //
 289          // Reads a setup packet from EP0.
 290          //
 291          // Returns TRUE if successful; stalls the endpoint and returns
 292          // FALSE on an invalid packet size.
 293          
 294          BOOL ReadSetupPacket()
 295          {
 296   1          int i;
 297   1          uchar* p = (uchar*) &setupPacket;
 298   1      
 299   1          // Make sure the SETUP packet is the correct size
 300   1          if ((USTA & 0x0F) != 8)
 301   1          {
 302   2              UCON0 |= uSTALL0;
 303   2              return FALSE;
C51 COMPILER V7.00 Beta 6  UPSD_USB                                                        02/19/2003 15:59:28 PAGE 6   

 304   2          }
 305   1      
 306   1          // Read the setup packet
 307   1          for (i = 0; i < sizeof(setup_buffer); i++)
 308   1          {
 309   2              *p++ = UDR0;
 310   2          }
 311   1      
 312   1          // Set data toggle bit (expecting DATA1)
 313   1          USTA |= uRSEQ;
 314   1      
 315   1          return TRUE;
 316   1      }
 317          
 318          /////////////////// OnSetupPacket()
 319          //
 320          // Basic handler for SETUP packets received on EP0.
 321          
 322          void OnSetupPacket()
 323          {
 324   1          pTransmitBufferEP0 = NULL;
 325   1          bytesToTransmitEP0 = 0;
 326   1      
 327   1          // If it's a standard request...
 328   1          if ((setupPacket.bmRequestType & 0x60) == 0)
 329   1          {
 330   2              // Handle the request
 331   2              switch (setupPacket.bRequest)
 332   2              {
 333   3              case CLEAR_FEATURE:
 334   3                  OnClearFeature();
 335   3                  return;
 336   3              case SET_ADDRESS:
 337   3                  OnSetAddress();
 338   3                  return;
 339   3              case GET_DESCRIPTOR:
 340   3                  OnGetDescriptor();
 341   3                  return;
 342   3              case SET_CONFIGURATION:
 343   3                  OnSetConfiguration();
 344   3                  return;
 345   3              default:
 346   3                  break;
 347   3              }
 348   2          }
 349   1      
 350   1          // It's not a request we handle so stall endpoint
 351   1          // UCON0 |= uSTALL0; - problems, so try zero length packet instead
 352   1          UCON0 = uTSEQ0 | uRX0E | uTX0E;
 353   1      }
 354          
 355          /////////////////// BaseEp0TxHandler()
 356          //
 357          // Handler for successful data transmission on control endpoint (EP0).
 358          
 359          void BaseEp0TxHandler()
 360          {
 361   1              // Send next chunk of data in transaction
 362   1              if (!TransmitBufferEP0())
 363   1              {
 364   2                      // The current request has finished
 365   2                      if (setupPacket.bRequest == SET_ADDRESS)
C51 COMPILER V7.00 Beta 6  UPSD_USB                                                        02/19/2003 15:59:28 PAGE 7   

 366   2                      {
 367   3                              UADR = setupPacket.wValue.lo | uUSBEN;
 368   3                              if (setupPacket.wValue.lo != 0)
 369   3                                      usbState = US_ADDRESSED;
 370   3                              else 
 371   3                                      usbState = US_DEFAULT;
 372   3                      }
 373   2      
 374   2                      setupPacket.bRequest = REQUEST_COMPLETE;
 375   2              }
 376   1      }
 377          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    922    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     14      15
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =      2    ----
   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 + -