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

📄 halusbhost.lst

📁 威望公司MP3 + USB MCU 的参考软件
💻 LST
📖 第 1 页 / 共 3 页
字号:
 435   2                              xferLen = usbstack.wLen;
 436   2                      TxPktlen = xferLen;                                     // data transfer length
 437   2                      
 438   2                      if(xferLen){   //Take care about zero length packet
 439   3                              _halBufRst(0x03);
 440   3                              usbBufWrite(usbstack.buffer+bufpos,xferLen);    // data to transfer on USB
 441   3                              
 442   3                              if (xferLen < 64)
 443   3                                      _halBufRst(0x03);               // flip buffer state for bus read
 444   3                      }
 445   2      
 446   2                      if (bXXGFlags.bToggle)                    // DATA0 or DATA1
 447   2                              cmd = WRITE1;                           //Out + data + toggle
 448   2                      else
 449   2                              cmd = WRITE0;                                   
 450   2      
 451   2                      SieStat0 = 0xff;      // clear status register before each transfer
 452   2                      TxCtrl = cmd;           // Send packet
 453   2      
 454   2                      // Main loop for completing a wLen data trasnfer
 455   2                      while(TRUE){
 456   3                              stat0 = SieStat0;               
 457   3                              if((stat0&DEV_ACK)||(toFlag==TRUE)){
 458   4                                      SieStat0 = DEV_ACK;
 459   4                                      usbstack.wLen -= xferLen;
 460   4                                      bufpos += xferLen;
 461   4                                      bXXGFlags.bToggle = ~bXXGFlags.bToggle;                         
 462   4                                      break;
 463   4                              }else if(stat0&DEV_NAK){      
 464   4                                      SieStat0 = DEV_NAK;
 465   4                                      _halBufRst(0x02);       // reset read pointer
 466   4                                      TxCtrl = cmd;           // Send cmd again!                              
 467   4                              }else if(stat0&DEV_TO){
 468   4                              #if 0
                                              SieStat0 = DEV_TO;      
                                              // glitch filter, don't need to clear
                                              if (SieStat0 & DEV_TO){         // packet is not coming!        
                                                      _halBufRst(0x02);               // reset read pointer
                                                      TxCtrl = cmd;                   // Send cmd again!              
                                              }
                                      #else
 476   4                                      //Treat the DEV_TO as DEV_ACK
 477   4                                      toFlag = TRUE;
 478   4                              
 479   4                              #endif
 480   4                              }
 481   3                      }//end of while(TRUE)   
 482   2              }while(usbstack.wLen);
 483   1      
 484   1              WDT = 0X00;
 485   1              return TRUE;                    // fail transmission
 486   1      }
C51 COMPILER V8.01   HALUSBHOST                                                            04/17/2008 09:46:30 PAGE 9   

 487          
 488          //usbstack.pid==PID_IN
 489          BYTE _halInTrans(void)
 490          {  
 491   1              BYTE data xferLen;
 492   1              BYTE data stat0;
 493   1              BYTE data devTglSt;         // device toggle state
 494   1              BYTE *buf;
 495   1      
 496   1              WDT = 0X1F;
 497   1              buf = usbstack.buffer;
 498   1      #if 0   
                      if(!bXXGFlags.bIN_ISR)
                              BufSel = USB2MCU;    //src=USB,dest=CPU
                      else
                              BufSel = USB2MP3;    //src=USB, dest=MP3
              #endif
 504   1      
 505   1              do{
 506   2      
 507   2      //              ConsecutiveNAKCount = 0;
 508   2                      if (usbstack.wLen >= usbstack.wPayload)
 509   2                              xferLen = usbstack.wPayload;            
 510   2                      else                                                            
 511   2                              xferLen = usbstack.wLen;
 512   2                      TxPktlen = xferLen;             // data transfer length
 513   2      
 514   2                      BufSel = USB2MCU;
 515   2                      //_halBufRst(0x03);             // reset RW ptr
 516   2                      _halBufRst(0x01);               // reset write ptr
 517   2                      SieStat0 = 0xff;                // clear status register before each transfer
 518   2                      TxCtrl = READ;                  // Send IN token
 519   2      
 520   2                      while(TRUE){
 521   3                      //DISABLE_INTERRUPTS;
 522   3                              stat0 = SieStat0;       
 523   3                              if (stat0 & PKT_VLD){
 524   4                                      devTglSt = (stat0 & DEV_TGL);
 525   4                                      if (devTglSt == bXXGFlags.bToggle){
 526   5                                              if(xferLen<64)  
 527   5                                                      _halBufRst(0x03);
 528   5                                              
 529   5                                              if(!bXXGFlags.bIN_ISR){
 530   6                                                      usbBufRead(buf, xferLen);
 531   6                                                      buf += xferLen;
 532   6                                              }else{
 533   6                                                      BufSel = USB2MP3;       //src=USB,dest=MP3
 534   6                                                      DelayUs(10);                    //waitting data transfer finished
 535   6                                              }
 536   5                                              bXXGFlags.bToggle = ~bXXGFlags.bToggle;
 537   5                                              //UartOutText("xferLen: ");UartOutValue(xferLen, 2);
 538   5                                              //UartOutText("usbstack.wLen: ");UartOutValue(usbstack.wLen, 4);                                        
 539   5                                              usbstack.wLen -= xferLen;
 540   5                                              //UartOutText("NAK count: ");UartOutValue(ConsecutiveNAKCount, 4);
 541   5                                              if(xferLen<64)
 542   5                                                      _halBufRst(0x03);
 543   5                                              else
 544   5                                                      _halBufRst(0x01);                                       
 545   5                                              BufSel = USB2MCU;                      //src=USB,dest=CPU
 546   5                                              
 547   5                                              break;
 548   5                                      }else{
C51 COMPILER V8.01   HALUSBHOST                                                            04/17/2008 09:46:30 PAGE 10  

 549   5                                              UartOutText("-E-: Toggle Fail \r\n");
 550   5                                              //Fix Me: What we should do fo Toggle Fail!
 551   5                                              //Resend the cmd!!!!
 552   5                                              if(xferLen<64){                           // set buffer empty flag
 553   6                                                      _halBufRst(0x03);                       
 554   6                                              }
 555   5                                              
 556   5                                              BufSel = USBFLSH;                      //src=USB,dest=FLUSH
 557   5                                              Scratch = 0x0;                        // kill some time...
 558   5                                              
 559   5                                              if(xferLen<64){                           // set buffer empty flag
 560   6                                                      _halBufRst(0x03);                                                                                       
 561   6                                              }else{
 562   6                                                      _halBufRst(0x01);                       
 563   6                                              }
 564   5                                              BufSel = USB2MCU;                      //src=USB,dest=CPU
 565   5                                              TxCtrl = READ;
 566   5                                      }
 567   4                              }else if(stat0 & DEV_NAK){
 568   4                                      SieStat0 = DEV_NAK;
 569   4      //                              ConsecutiveNAKCount = ConsecutiveNAKCount + 1;
 570   4                                      _halBufRst(0x01);                       // reset write pointer
 571   4                                      TxCtrl = READ;
 572   4                              }else if(stat0 & DEV_TO){               // turnaround time expired
 573   4                                      SieStat0 = DEV_TO;
 574   4                                      // glitch filter, don't need to clear
 575   4                                      if (SieStat0 & DEV_TO){         // packet is not coming!
 576   5                                              _halBufRst(0x01);               // reset write pointer
 577   5                                              TxCtrl = READ;                  // Send command again!
 578   5                                      }
 579   4                              }
 580   3      #if 0                   
                                      else if (intr & DEV_STALL){                     
                                              SieStat0 = DEV_STALL;
                                              bXXGFlags.SLAVE_STALLED = TRUE;
                                              UartOutText("-E-: Device Stalled \r\n");
                                              break;
                                      }
              #endif
 588   3                      //ENABLE_INTERRUPTS;
 589   3                      }
 590   2              }while(usbstack.wLen > 0);
 591   1      
 592   1              WDT = 0X00;     
 593   1              return TRUE;                    // fail transmission
 594   1      }
 595          
 596          #if 0
              void _halBufRst(BYTE rst)
              {
                      BufRst = rst;
                      //BufRst = 0x00;
              
                      return;
              }
              #endif
 605          
 606          void halUsbPhyBlksize(WORD size)
 607          {
 608   1              //DWORD blksize;
 609   1              BYTE data blkexp;
 610   1              BYTE data offset;
C51 COMPILER V8.01   HALUSBHOST                                                            04/17/2008 09:46:30 PAGE 11  

 611   1      
 612   1              if(size & 0x1FF){
 613   2                      size = BLKSIZE_512;
 614   2              }
 615   1              blkexp = Value2Exp(size);
 616   1              offset = ((1<<(blkexp - BLKSIZE_512_EXP))-1);
 617   1      
 618   1              UartOutText("-I-: PhyBlkSize = ");UartOutValue(size, 4);
 619   1              UartOutText("-I-: PhyBlkSizeExp = ");UartOutValue(blkexp, 2);
 620   1      
 621   1              //512B_EXP
 622   1              usbstack.wPhyBlkSize = size;
 623   1              usbstack.bPhyBlkSizeExp = blkexp;// - 9;//512B_EXP;
 624   1              usbstack.bMaxOffset = offset;
 625   1              usbstack.bOffset = offset;
 626   1      //      usbstack.dwLba = 0xffffffff;
 627   1      
 628   1      //      DrivePhyBlkSize(size, blkexp, offset);
 629   1      
 630   1              return;
 631   1      }
 632          
 633          //This function will return the exponent of the size of sector.
 634          //Can be called after Enumeration.
 635          BYTE halUsbInfo(void)
 636          {
 637   1              return usbstack.bPhyBlkSizeExp;
 638   1      }
 639          
 640          
 641           
 642          
 643          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1728    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     59      19
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      13
   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 + -