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

📄 usb_disk.lst

📁 基于atmel单片机的MP3设计。音质很好
💻 LST
📖 第 1 页 / 共 3 页
字号:
 375   3                    K9F5608 = 0;                                       //A0-A7
 376   3                    K9F5608 = (PG.addr[3]&0xe0)|i;     //A9-A16
 377   3                        K9F5608 = PG.addr[2];                          //A17-A24 
 378   3                                K9F_FUN = D_DATA;
 379   3                    delay();
 380   3                            while(!(K9F_FUN & RB)); 
 381   3      
 382   3                                K9F_FUN = COMMAND;
 383   3                                K9F5608 = 0x8a;
 384   3                                K9F_FUN = ADDRESS;
 385   3                    K9F5608 = 0;                                                //A0-A7
 386   3                    K9F5608 = BuffBlock|(PG.addr[3]&0x20)|i;  //A9-A16
 387   3                        K9F5608 = 0xff;                                         //A17-A24 
 388   3                                K9F_FUN = D_DATA;
 389   3                                delay();
 390   3                            while(!(K9F_FUN & RB));
 391   3                         }
 392   2                       nBeginPage=0;
 393   2                }
 394   1      
 395   1              while(length>0)
 396   1                {
 397   2                       K9F_FUN = COMMAND;
 398   2                   K9F5608 = 0x80;
 399   2                   K9F_FUN = ADDRESS;
 400   2                   K9F5608 = 0;                                                         //A0-A7        
 401   2                       K9F5608 = (PG.addr[3]&0x3f)|BuffBlock;   //A9-A16  
 402   2                       K9F5608 = 0xff;                                                  //A17-A24
 403   2                       K9F_FUN = D_DATA;
 404   2                       for(i=0;i<8;i++)
 405   2                         {
 406   3                                while (!(UEPINT & EP2));      
 407   3                                WriteFlash();
 408   3                                UEPSTAX &= 0xB9;
 409   3                         }
 410   2                       K9F_FUN = COMMAND;
 411   2                       K9F5608 = 0x10;
 412   2                       K9F_FUN = D_DATA;
 413   2                       length--;      
 414   2                       delay();
 415   2                       while(!(K9F_FUN & RB));
 416   2      
 417   2                   if(((PG.addr[3]&0x1f)==0x1f)||(length==0))
 418   2                         {
 419   3                         
 420   3                                  for(i=((PG.addr[3]&0x1f)+1);i<32;i++)
 421   3                           {
 422   4                             K9F_FUN = COMMAND;
 423   4                                 K9F5608 = 0x00;
 424   4                                 K9F_FUN = ADDRESS;
 425   4                         K9F5608 = 0;                                              //A0-A7  
 426   4                         K9F5608 = (PG.addr[3]&0xe0)|i;            //A9-A16
C51 COMPILER V8.08   USB_DISK                                                              05/19/2008 19:51:06 PAGE 8   

 427   4                             K9F5608 = PG.addr[2];                         //A17-A24 
 428   4                                 K9F_FUN = D_DATA;
 429   4                                 delay();
 430   4                                 while(!(K9F_FUN & RB));
 431   4      
 432   4                                 K9F_FUN = COMMAND;
 433   4                                 K9F5608 = 0x8a;
 434   4                                 K9F_FUN = ADDRESS;
 435   4                         K9F5608 = 0;                                                 //A0-A7
 436   4                         K9F5608 = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
 437   4                             K9F5608 = 0xff;                                      //A17-A24 
 438   4                                 K9F_FUN = D_DATA;
 439   4                                 delay();
 440   4                                 while(!(K9F_FUN & RB));
 441   4                           }
 442   3                                      
 443   3                                K9F_FUN = COMMAND;
 444   3                    K9F5608 = 0x60;                            //擦除当前block
 445   3                    K9F_FUN = ADDRESS;
 446   3                    K9F5608 = PG.addr[3];          //A9-A16
 447   3                        K9F5608 = PG.addr[2];                  //A17-A24 
 448   3                    K9F_FUN = COMMAND;
 449   3                    K9F5608 = 0xd0;
 450   3                    K9F_FUN = D_DATA;
 451   3                                delay();
 452   3                            while(!(K9F_FUN & RB));        //等待操作完成  
 453   3      
 454   3                                for(i=0;i<32;i++)     
 455   3                                  {
 456   4                                         K9F_FUN = COMMAND;
 457   4                                         K9F5608 = 0x00;
 458   4                                         K9F_FUN = ADDRESS;
 459   4                         K9F5608 = 0;                                         //A0-A7
 460   4                         K9F5608 = (PG.addr[3]&0x20)|BuffBlock|i; //A9-A16
 461   4                             K9F5608 = 0xff;                                  //A17-A24 
 462   4                                         K9F_FUN = D_DATA;
 463   4                                         delay();
 464   4                                 while(!(K9F_FUN & RB)); 
 465   4      
 466   4                                         K9F_FUN = COMMAND;
 467   4                                         K9F5608 = 0x8a;  
 468   4                                         K9F_FUN = ADDRESS;
 469   4                         K9F5608 = 0;                                            //A0-A7
 470   4                         K9F5608 = (PG.addr[3]&0xe0)|i;      //A9-A16
 471   4                             K9F5608 = PG.addr[2];                       //A17-A24 
 472   4                                         K9F_FUN = D_DATA;
 473   4                                         delay();
 474   4                                 while(!(K9F_FUN & RB));
 475   4                                  }
 476   3      
 477   3                                if(length>0)
 478   3                                  {
 479   4                                         K9F_FUN = COMMAND;
 480   4                         K9F5608 = 0x60;
 481   4                         K9F_FUN = ADDRESS;
 482   4                         K9F5608 = (PG.addr[3]&0x20)|BuffBlock;  //A9-A16
 483   4                             K9F5608 = 0xff;                                     //A17-A24 
 484   4                         K9F_FUN = COMMAND;
 485   4                         K9F5608 = 0xD0;
 486   4                         K9F_FUN = D_DATA;
 487   4                                         delay();
 488   4                                         while(!(K9F_FUN & RB));
C51 COMPILER V8.08   USB_DISK                                                              05/19/2008 19:51:06 PAGE 9   

 489   4                                      }
 490   3                         }
 491   2                        PG.page++;
 492   2                }
 493   1      
 494   1              TransmitCSW();  
 495   1      }       
 496          
 497          void main_rxdone()
 498          {
 499   1        unsigned char data i;
 500   1        unsigned char data Buf[64];
 501   1      
 502   1        i = ReadEp(2,Buf);
 503   1      
 504   1               P3_5 =0;
 505   1               bulk_CSW[4] = Buf[4];  bulk_CSW[5] = Buf[5]; bulk_CSW[6] = Buf[6]; bulk_CSW[7] = Buf[7];
 506   1               for(i=0;i<12;i++) bulk_CBW.CBWCB[i] = Buf[i+15];
 507   1               switch(bulk_CBW.CBWCB[0])
 508   1                      {
 509   2                              case Inquiry                         :WriteEpBulk(1,36,B_InquiryData);break;
 510   2                              case Mode_Sense                      :SCSI_Mode_Sense();              break;
 511   2                              case Read10                                  :SCSI_Read10();                  break;
 512   2                              case Read_Capacity                   :WriteEpBulk(1, sizeof(B_Read_Capacity), B_Read_Capacity);break;
 513   2                              case Read_Format_Capacities      :SCSI_Read_Format_Capacities();  break;
 514   2                              case Test_Unit_Ready         :TransmitCSW();                  break;
 515   2                              case Verify                                  :TransmitCSW();                  break;
 516   2                              case Write10                         :SCSI_Write10();                 break;
 517   2                              case Medium_Removal                  :TransmitCSW();                  break;
 518   2                      }
 519   1           P3_5 =1;
 520   1      }
 521          
 522          void Flash_Reset(void)                                               //flash reset
 523          { 
 524   1              unsigned int data i;
 525   1              K9F_FUN = COMMAND;                     
 526   1              K9F5608 = 0xff;                  //reset command
 527   1              for (i=0; i<3000; i++) ;                                         //delay        
 528   1      }
 529          
 530          
 531          void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage)
 532          {
 533   1              int i;
 534   1              unsigned int blockPage = (block << 5) | page;
 535   1      
 536   1              K9F_FUN = COMMAND;
 537   1              K9F5608 = 0x00;
 538   1              K9F_FUN = ADDRESS;
 539   1          K9F5608 = 0;                                                 //A0-A7
 540   1          K9F5608 = blockPage & 0xff;              //A9-A16
 541   1              K9F5608 = (blockPage >> 8) & 0xff;   //A17-A24 
 542   1              K9F_FUN = D_DATA;
 543   1      
 544   1              i = 512;
 545   1          while(!(K9F_FUN & RB));
 546   1      
 547   1              while((i--)>0) 
 548   1              {
 549   2                      *pPage++ = K9F5608; 
 550   2              }
C51 COMPILER V8.08   USB_DISK                                                              05/19/2008 19:51:06 PAGE 10  

 551   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1517    ----
   CONSTANT SIZE    =    184    ----
   XDATA SIZE       =   ----      13
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25     118
   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 + -