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

📄 host2131.lst

📁 keil c 代码 用于usb
💻 LST
📖 第 1 页 / 共 2 页
字号:
 281   5                }
 282   4                      }
 283   3      
 284   3                      addr = DBUF;
 285   3                      len = (DescBufLen<ReqLen) ? DescBufLen : ReqLen;
 286   3                      if(SETUPDAT[0] == 0xC0)         // if (DIR=IN)
 287   3                      {
 288   4                              while(len)                                      // Move requested data through EP0IN one packet at a time.
 289   4                              {
 290   5                                      if(len < EP0BUFF_SIZE)
 291   5                                              bc = len;
 292   5                                      else
 293   5                                              bc = EP0BUFF_SIZE;
 294   5      
 295   5                                      for(i=0; i<bc; i++)
 296   5                                                      *(IN0BUF+i) = *((BYTE xdata *)addr+i);
 297   5                                      IN0BC = (BYTE)bc;       // Arm endpoint
 298   5                                      addr += bc;
 299   5                                      len -= bc;
 300   5                                      while(EP0CS & 0x04);    // Wait for INBSY to clear
 301   5                              }
C51 COMPILER V7.06   HOST2131                                                              07/13/2004 18:08:14 PAGE 6   

 302   4                  IN0BC = 0x00;             // arm endp, # bytes to xfr
 303   4                  EP0CS |= bmBIT1;          // ack handshake phase of device request
 304   4                      }
 305   3                      break;
 306   3          }
 307   2          case SL_REFRESH:
 308   2              {
 309   3                      addr = DBUF;
 310   3                  len = GetDevInfo(DBUF);
 311   3      
 312   3                      if(SETUPDAT[0] == 0xC0)         // if (DIR=IN)
 313   3                      {
 314   4                              while(len)                                      // Move requested data through EP0IN one packet at a time.
 315   4                              {
 316   5                                      if(len < EP0BUFF_SIZE)
 317   5                                              bc = len;
 318   5                                      else
 319   5                                              bc = EP0BUFF_SIZE;
 320   5      
 321   5                                      for(i=0; i<bc; i++)
 322   5                                                      *(IN0BUF+i) = *((BYTE xdata *)addr+i);
 323   5                                      IN0BC = (BYTE)bc;       // Arm endpoint
 324   5                                      addr += bc;
 325   5                                      len -= bc;
 326   5                                      while(EP0CS & 0x04);    // Wait for INBSY to clear
 327   5                              }
 328   4                  IN0BC = 0x00;             // arm endp, # bytes to xfr
 329   4                  EP0CS |= bmBIT1;          // ack handshake phase of device request
 330   4                      }
 331   3            break;
 332   3          }
 333   2      
 334   2          case SL_DATA_XFER_START:                  // Data Transfer with ds Dev
 335   2              {
 336   3                      EpAddr = SETUPDAT[2];           // Get address and length
 337   3                      EpIdx = SETUPDAT[4];
 338   3                      len = SETUPDAT[6];
 339   3      
 340   3                      addr = OUT_DATA;
 341   3                      if(SETUPDAT[0] == 0xC0)         // if (DIR=IN)
 342   3                      {
 343   4                      retDataRW = DataRW(EpAddr,EpIdx,64,len,OUT_DATA);
 344   4                  if((remainder) && (remainder < len))
 345   4                    len -= remainder;
 346   4                              if(!retDataRW)
 347   4                              {
 348   5                                      bc = 0;
 349   5                                      IN0BC = (BYTE)bc;       // Arm endpoint
 350   5                                      while(EP0CS & 0x04);    // Wait for INBSY to clear
 351   5                                      break;
 352   5                              }
 353   4                              while(len)                                      // Move requested data through EP0IN 
 354   4                              {                                                       // one packet at a time.
 355   5      
 356   5                                      if(len < EP0BUFF_SIZE)
 357   5                                              bc = len;
 358   5                                      else
 359   5                                              bc = EP0BUFF_SIZE;
 360   5      
 361   5                                              for(i=0; i<bc; i++)
 362   5                                                      *(IN0BUF+i) = *((BYTE xdata *)addr+i);
 363   5      
C51 COMPILER V7.06   HOST2131                                                              07/13/2004 18:08:14 PAGE 7   

 364   5                                      IN0BC = (BYTE)bc;       // Arm endpoint
 365   5      
 366   5                                      addr += bc;
 367   5                                      len -= bc;
 368   5      
 369   5                                      while(EP0CS & 0x04);    // Wait for INBSY to clear
 370   5                              }
 371   4                      }
 372   3                      else if(SETUPDAT[0] == 0x40)    // if (DIR=OUT)
 373   3                      {
 374   4                              while(len)                                      // Move new data through EP0OUT 
 375   4                              {                                                       // one packet at a time.
 376   5                                      OUT0BC = 0;  // Clear bytecount to allow new data in; also stops NAKing
 377   5      
 378   5                                      while(EP0CS & 0x08);
 379   5      
 380   5                                      bc = OUT0BC; // Get the new bytecount
 381   5      
 382   5                                              for(i=0; i<bc; i++)
 383   5                                                       *((BYTE xdata *)addr+i) = *(OUT0BUF+i);
 384   5      
 385   5                                      addr += bc;
 386   5                                      len -= bc;
 387   5                              }
 388   4                     retDataRW = DataRW(EpAddr,EpIdx,64,bc,OUT_DATA);
 389   4                      }
 390   3                      break;
 391   3          }
 392   2          case SL_TOGGLE_DS_REFRESH:
 393   2              {
 394   3                dsPoll = !dsPoll;         // toggle downstream poll
 395   3            *IN0BUF = SETUPDAT[1];    // return command type
 396   3            IN0BC = 0x01;             // arm endp, # bytes to xfr
 397   3            EP0CS |= bmBIT1;          // ack handshake phase of device request
 398   3            break;
 399   3          }
 400   2      
 401   2          case SL_SHOW_REGS:
 402   2              {
 403   3                      addr = REGBUFF;
 404   3                      len = 16;
 405   3                      for(RegAddr=0; RegAddr<len; RegAddr++)
 406   3                REGBUFF[RegAddr] = SL811Read(RegAddr);
 407   3      
 408   3                      if(SETUPDAT[0] == 0xC0)         // if (DIR=IN)
 409   3                      {
 410   4                              while(len)                                      // Move requested data through EP0IN one packet at a time.
 411   4                              {
 412   5                                      if(len < EP0BUFF_SIZE)
 413   5                                              bc = len;
 414   5                                      else
 415   5                                              bc = EP0BUFF_SIZE;
 416   5      
 417   5                                      for(i=0; i<bc; i++)
 418   5                                                      *(IN0BUF+i) = *((BYTE xdata *)addr+i);
 419   5                                      IN0BC = (BYTE)bc;       // Arm endpoint
 420   5                                      addr += bc;
 421   5                                      len -= bc;
 422   5                                      while(EP0CS & 0x04);    // Wait for INBSY to clear
 423   5                              }
 424   4                  IN0BC = 0x00;             // arm endp, # bytes to xfr
 425   4                  EP0CS |= bmBIT1;          // ack handshake phase of device request
C51 COMPILER V7.06   HOST2131                                                              07/13/2004 18:08:14 PAGE 8   

 426   4                      }
 427   3              break;
 428   3          }
 429   2      
 430   2      
 431   2          default:
 432   2          {
 433   3            break;
 434   3          }
 435   2        }
 436   1        return( FALSE );              // no errors, cmd handled okay
 437   1      }
 438          
 439          //-----------------------------------------------------------------------------
 440          // USB Interrupt Handlers
 441          //      The following functions are called by the USB interrupt jump table.
 442          //-----------------------------------------------------------------------------
 443          
 444          // Setup Data Available Interrupt Handler
 445          void ISR_Sudav(void) interrupt 0
 446          {
 447   1              GotSUD = TRUE;                          // Set flag
 448   1              EZUSB_IRQ_CLEAR();
 449   1              USBIRQ = bmSUDAV;                       // Clear SUDAV IRQ
 450   1      }
 451          
 452          // Setup Token Interrupt Handler
 453          void ISR_Sutok(void) interrupt 0
 454          {
 455   1              EZUSB_IRQ_CLEAR();
 456   1              USBIRQ = bmSUTOK;                       // Clear SUTOK IRQ
 457   1      }
 458          
 459          void ISR_Sof(void) interrupt 0
 460          {
 461   1              EZUSB_IRQ_CLEAR();
 462   1              USBIRQ = bmSOF;                         // Clear SOF IRQ
 463   1      }
 464          
 465          void ISR_Ures(void) interrupt 0
 466          {
 467   1              EZUSB_IRQ_CLEAR();
 468   1              USBIRQ = bmURES;                        // Clear URES IRQ
 469   1      }
 470          
 471          void ISR_IBN(void) interrupt 0
 472          {
 473   1      }
 474          
 475          void ISR_Susp(void) interrupt 0
 476          {
 477   1              Sleep = TRUE;
 478   1              EZUSB_IRQ_CLEAR();
 479   1              USBIRQ = bmSUSP;
 480   1      }
 481          
 482          void ISR_Ep0in(void) interrupt 0
 483          {
 484   1      }
 485          
 486          void ISR_Ep0out(void) interrupt 0
 487          {
C51 COMPILER V7.06   HOST2131                                                              07/13/2004 18:08:14 PAGE 9   

 488   1      }
 489          
 490          void ISR_Ep1in(void) interrupt 0
 491          {
 492   1      }
 493          
 494          void ISR_Ep1out(void) interrupt 0
 495          {
 496   1              int i;
 497   1      
 498   1              for(i=0;i<OUT1BC;i++)
 499   1                      HOSTCMD[i] = OUT1BUF[i];
 500   1      
 501   1              OUT1BC = 0;
 502   1              BULK_OUT_DONE = TRUE;
 503   1              EZUSB_IRQ_CLEAR();
 504   1              OUT07IRQ = bmEP1;
 505   1      }
 506          
 507          void ISR_Ep2in(void) interrupt 0
 508          {
 509   1      }
 510          
 511          void ISR_Ep2out(void) interrupt 0
 512          {
 513   1      }
 514          
 515          void ISR_Ep3in(void) interrupt 0
 516          {
 517   1      }
 518          
 519          void ISR_Ep3out(void) interrupt 0
 520          {
 521   1      }
 522          
 523          void ISR_Ep4in(void) interrupt 0
 524          {
 525   1      }
 526          
 527          void ISR_Ep4out(void) interrupt 0
 528          {
 529   1      }
 530          
 531          void ISR_Ep5in(void) interrupt 0
 532          {
 533   1      }
 534          
 535          void ISR_Ep5out(void) interrupt 0
 536          {
 537   1      }
 538          
 539          void ISR_Ep6in(void) interrupt 0
 540          {
 541   1      }
 542          
 543          void ISR_Ep6out(void) interrupt 0
 544          {
 545   1      }
 546          
 547          void ISR_Ep7in(void) interrupt 0
 548          {
 549   1      }
C51 COMPILER V7.06   HOST2131                                                              07/13/2004 18:08:14 PAGE 10  

 550          
 551          void ISR_Ep7out(void) interrupt 0
 552          {
 553   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2090    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      64
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      17
   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 + -