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

📄 usb.lst

📁 在C51上 mp3 开发程序 32M MP3 MP3功能的测试源码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 502                           for(i=0;i<8;i++)                                                                  //端点数据写入到Flash的缓冲区
 503                             {
 504                                    while (!(UEPINT & 0x04));                                            //等待接收数据RXOUTB1    
 505                                    //写64字节
 506                                    WriteFlash();
 507                                    UEPSTAX &= 0xB9;                                         //准备再接收         
 508                                    UEPINT = 0;
 509                             }
 510                           K9F_FUN = COMMAND;
 511                           *((unsigned char xdata *)K9F5608) = 0x10;
 512                           K9F_FUN = D_DATA;
 513                           length--;                                                                //传输的扇区数减1 
 514                           delay();
 515                           while(!(K9F_FUN & RB));                                                          //等待操作的完成
 516          
 517                       if(((PG.addr[3]&0x1f)==0x1f)||(length==0))           //缓冲区写满即写满32页或传输数据结束时 
 518                             {
 519                             
 520                                      for(i=((PG.addr[3]&0x1f)+1);i<32;i++)                 //如果当length==0时并且(PG.addr[3]&0x1f)!=0x1f
 521                               {                                                                                    //拷贝从((PG.addr[3]&0x1f)+1)到32号页的数据到缓冲区的对应位置
 522                                 K9F_FUN = COMMAND;                                                 //执行Flash的COPY-BACK命令
 523                                     *((unsigned char xdata *)K9F5608) = 0x00;
 524                                     K9F_FUN = ADDRESS;
 525                             *((unsigned char xdata *)K9F5608) = 0;                                                    //A0-A7  
 526                             *((unsigned char xdata *)K9F5608) = (PG.addr[3]&0xe0)|i;          //A9-A16
 527                                 *((unsigned char xdata *)K9F5608) = PG.addr[2];                               //A17-A24 
 528                                     K9F_FUN = D_DATA;
 529                                     delay();
 530                                     while(!(K9F_FUN & RB));                    //等待操作的完成  
 531          
 532                                     K9F_FUN = COMMAND;
 533                                     *((unsigned char xdata *)K9F5608) = 0x8a;
 534                                     K9F_FUN = ADDRESS;
 535                             *((unsigned char xdata *)K9F5608) = 0;                                                     //A0-A7
 536                             *((unsigned char xdata *)K9F5608) = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
 537                                 *((unsigned char xdata *)K9F5608) = 0xff;                                          //A17-A24 
 538                                     K9F_FUN = D_DATA;
 539                                     delay();
 540                                     while(!(K9F_FUN & RB));                    //等待操作的完成  
 541                               }
 542                                          
 543                                    K9F_FUN = COMMAND;
 544                        *((unsigned char xdata *)K9F5608) = 0x60;                          //擦除当前block
 545                        K9F_FUN = ADDRESS;
 546                        *((unsigned char xdata *)K9F5608) = PG.addr[3];        //A9-A16
 547                            *((unsigned char xdata *)K9F5608) = PG.addr[2];                //A17-A24 
 548                        K9F_FUN = COMMAND;
 549                        *((unsigned char xdata *)K9F5608) = 0xd0;
C51 COMPILER V7.50   USB                                                                   03/07/2005 09:36:38 PAGE 10  

 550                        K9F_FUN = D_DATA;
 551                                    delay();
 552                                while(!(K9F_FUN & RB));                                //等待操作的完成  
 553          
 554                                    for(i=0;i<32;i++)                                        //将缓冲Block中的内容拷贝到当前Block中
 555                                      {
 556                                             K9F_FUN = COMMAND;
 557                                             *((unsigned char xdata *)K9F5608) = 0x00;
 558                                             K9F_FUN = ADDRESS;
 559                             *((unsigned char xdata *)K9F5608) = 0;                                             //A0-A7
 560                             *((unsigned char xdata *)K9F5608) = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
 561                                 *((unsigned char xdata *)K9F5608) = 0xff;                                      //A17-A24 
 562                                             K9F_FUN = D_DATA;
 563                                             delay();
 564                                     while(!(K9F_FUN & RB));                        //等待操作的完成 
 565          
 566                                             K9F_FUN = COMMAND;
 567                                             *((unsigned char xdata *)K9F5608) = 0x8a;  
 568                                             K9F_FUN = ADDRESS;
 569                             *((unsigned char xdata *)K9F5608) = 0;                                                //A0-A7
 570                             *((unsigned char xdata *)K9F5608) = (PG.addr[3]&0xe0)|i;      //A9-A16
 571                                 *((unsigned char xdata *)K9F5608) = PG.addr[2];                           //A17-A24 
 572                                             K9F_FUN = D_DATA;
 573                                             delay();
 574                                     while(!(K9F_FUN & RB));                         //等待操作的完成 
 575                                      }
 576          
 577                                    if(length>0)          //传输未完成时
 578                                      {
 579                                             K9F_FUN = COMMAND;
 580                             *((unsigned char xdata *)K9F5608) = 0x60;            //擦除相应的缓冲区
 581                             K9F_FUN = ADDRESS;
 582                             *((unsigned char xdata *)K9F5608) = (PG.addr[3]&0x20)|BuffBlock;  //A9-A16
 583                                 *((unsigned char xdata *)K9F5608) = 0xff;                                         //A17-A24 
 584                             K9F_FUN = COMMAND;
 585                             *((unsigned char xdata *)K9F5608) = 0xD0;
 586                             K9F_FUN = D_DATA;
 587                                             delay();
 588                                             while(!(K9F_FUN & RB));                          //等待操作的完成 
 589                                          }
 590                             }
 591                            PG.page++;                                                                                            //逻辑簇地址加1
 592                    }
 593          
 594                  TransmitCSW();                                                                                              //向Host返回CSW
 595          //    printuf(" %x",PG.addr[0]);printuf(" %x",PG.addr[1]);printuf(" %x",PG.addr[2]);printuf(" %x\n",PG.add
             -r[3]);
 596          }       
 597          
 598          void main_rxdone()
 599          {
 600            unsigned char data i;
 601            unsigned char data Buf[64];
 602          
 603            i = ReadEp(2,Buf);                                                                                            //读出端点数据
 604          //  if(Buf[0] == 0x55)                                                                                          //命令数据包
 605          //      {
 606                   P3_5 =0;                                                                                                           //指示灯亮
 607                   bulk_CSW[4] = Buf[4];  bulk_CSW[5] = Buf[5]; bulk_CSW[6] = Buf[6]; bulk_CSW[7] = Buf[7];
 608                   for(i=0;i<12;i++) bulk_CBW.CBWCB[i] = Buf[i+15];
 609                   switch(bulk_CBW.CBWCB[0])
 610                          {
C51 COMPILER V7.50   USB                                                                   03/07/2005 09:36:38 PAGE 11  

 611                                  case Inquiry                         :WriteEpBulk(1,36,B_InquiryData);break;
 612                                  case Mode_Sense                      :SCSI_Mode_Sense();              break;
 613                                  case Read10                                  :SCSI_Read10();                  break;
 614                                  case Read_Capacity                   :WriteEpBulk(1, sizeof(B_Read_Capacity), B_Read_Capacity);break;
 615                                  case Read_Format_Capacities      :SCSI_Read_Format_Capacities();  break;
 616                                  case Test_Unit_Ready         :TransmitCSW();                  break;
 617                                  case Verify                                  :TransmitCSW();                  break;
 618                                  case Write10                         :SCSI_Write10();                 break;
 619                                  case Medium_Removal                  :TransmitCSW();                  break;
 620                          }
 621               P3_5 =1;                                                                                                      //指示灯灭
 622          //      }
 623          //  else
 624          //      SCSI_Write10();
 625          
 626          }                         */
 627          //flash芯片复位函数
 628          void Flash_Reset(void)                                               //flash reset
 629          { 
 630   1              unsigned int data i;
 631   1              K9F_FUN = COMMAND;                     
 632   1              *((unsigned char xdata *)K9F5608) = 0xff;                        //reset command
 633   1              for (i=0; i<3000; i++) ;                                         //delay        
 634   1      }
 635          
 636          //读取一个page的内容
 637          void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage)
 638          {
 639   1              int i;
 640   1              unsigned int blockPage = (block << 5) | page;
 641   1      
 642   1              K9F_FUN = COMMAND;
 643   1              *((unsigned char xdata *)K9F5608) = 0x00;
 644   1              K9F_FUN = ADDRESS;
 645   1          *((unsigned char xdata *)K9F5608) = 0;                                               //A0-A7
 646   1          *((unsigned char xdata *)K9F5608) = blockPage & 0xff;            //A9-A16
 647   1              *((unsigned char xdata *)K9F5608) = (blockPage >> 8) & 0xff; //A17-A24 
 648   1              K9F_FUN = D_DATA;
 649   1      
 650   1              i = 512;
 651   1          while(!(K9F_FUN & RB));                  //等待操作的完成
 652   1      
 653   1              while((i--)>0) 
 654   1              {
 655   2                      *pPage++ = *((unsigned char xdata *)K9F5608); 
 656   2              }
 657   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    134    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       3
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   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 + -