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

📄 usb_disk.lst

📁 mp3c程序源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 210   2                      UEPNUM=0x00;    UEPCONX=0x80;
 211   2                      UEPNUM=0x01;    UEPCONX=0x86;
 212   2                      UEPNUM=0x02;    UEPCONX=0x82;
 213   2                      USBCON|=CONFG;
 214   2                      WriteEp(0,0,0); 
 215   2        }
 216   1      }
 217          
 218          void Ep0()
 219          {
 220   1        unsigned char data DT[32]={0,};
 221   1        unsigned char data i;
 222   1        i = ReadEp(0,DT);
 223   1        if (((DT[0] & 0x60)==0) && i)
 224   1        {
 225   2          switch (DT[1])
 226   2          {
 227   3            case set_address                          :Set_Address(DT[2]);                    break;
 228   3            case get_descriptor                       :Get_Descriptor(DT[3],DT[6]);   break;
 229   3            case set_configuration        :Set_Configuration(DT[2]);          break;
 230   3            default                                           :;                                                  break;
 231   3              }
 232   2        }
 233   1        else if(DT[0]==0xa1)
 234   1              {
 235   2                      WriteEp(0,0,0);
 236   2              }                                                                                                       
 237   1      }
 238          
 239          
 240          void WriteEpBulk(unsigned char EpNum,unsigned char nLength,unsigned char *Data)
C51 COMPILER V7.50   USB_DISK                                                              11/18/2005 21:31:23 PAGE 5   

 241          {
 242   1              unsigned char data i;
 243   1              UEPNUM=EpNum;
 244   1              UEPSTAX|=DIR;
 245   1              for(i=0;i<nLength;i++) UEPDATX=Data[i];
 246   1              UEPSTAX|=TXRDY;
 247   1      }
 248          
 249          void TransmitCSW()
 250          {
 251   1        WriteEpBulk(1, sizeof(bulk_CSW), bulk_CSW);
 252   1        while(!(UEPSTAX&TXCMP)) ;
 253   1        UEPSTAX&=(~(TXCMP));
 254   1      }
 255          
 256          void main_txdone()
 257          {
 258   1        UEPSTAX&=(~(TXCMP));
 259   1        TransmitCSW();
 260   1      }
 261          
 262           void SCSI_Mode_Sense()
 263          {
 264   1        if(bulk_CBW.CBWCB[2] == SCSI_MSPGCD_TPP)                 //Page Code=Timer and Potect Page
 265   1          {WriteEpBulk(1, sizeof(B_Mode_Sense_TPP), B_Mode_Sense_TPP);}
 266   1        else if(bulk_CBW.CBWCB[2] == SCSI_MSPGCD_RETALL)                 //Page Code=All
 267   1          {WriteEpBulk(1, sizeof(B_Mode_Sense_ALL), B_Mode_Sense_ALL);}
 268   1        else {WriteEpBulk(1, sizeof(B_Mode_Sense_ZERO), B_Mode_Sense_ZERO);}
 269   1      }
 270          
 271          void SCSI_Read_Format_Capacities()
 272          {
 273   1        if(bulk_CBW.CBWCB[7]==0 && bulk_CBW.CBWCB[8]==0)return;
 274   1        WriteEpBulk(1, sizeof(B_Read_Format_capacities), B_Read_Format_capacities);
 275   1      }
 276          
 277          void SCSI_Read10()
 278          {
 279   1        unsigned char data i;
 280   1              union
 281   1              {
 282   1                      unsigned long   Block;
 283   1                      unsigned char   Addr[4];
 284   1              }data BLK;
 285   1          unsigned char length;
 286   1      
 287   1              BLK.Addr[2] = bulk_CBW.CBWCB[4];
 288   1              BLK.Addr[3] = bulk_CBW.CBWCB[5];
 289   1      
 290   1          length = bulk_CBW.CBWCB[8];
 291   1          while(length>0)
 292   1           {
 293   2      
 294   2                //K9F_FUN = COMMAND;
 295   2                K9F_CS = 0;
 296   2                K9F_CLE = 1;
 297   2                K9F5608 = 0x00;
 298   2                //K9F_FUN = ADDRESS;
 299   2                K9F_CLE = 0;
 300   2                K9F_ALE = 1;
 301   2                K9F5608 = 0;
 302   2                K9F5608 = BLK.Addr[3];
C51 COMPILER V7.50   USB_DISK                                                              11/18/2005 21:31:23 PAGE 6   

 303   2                K9F5608 = BLK.Addr[2];
 304   2      
 305   2                //K9F_FUN = D_DATA;
 306   2                K9F_ALE = 0;
 307   2                UEPNUM=0x01;
 308   2                UEPSTAX|=DIR;
 309   2                while(!K9F_RB);
 310   2      
 311   2                for(i=0;i<8;i++)
 312   2                {
 313   3                        ReadFlash();
 314   3                        UEPSTAX|=TXRDY;
 315   3                        while(!(UEPSTAX&TXCMP));
 316   3                        UEPSTAX&=(~(TXCMP));
 317   3                }
 318   2                K9F_CS = 1;;
 319   2      
 320   2                length--;     
 321   2                BLK.Block ++;
 322   2           }
 323   1        TransmitCSW();
 324   1      }
 325          
 326          void delay()
 327          {
 328   1        unsigned char data i=20;
 329   1        while(i-->0);
 330   1      }
 331          
 332          void SCSI_Write10()     
 333          {
 334   1          union
 335   1           {
 336   1                 unsigned long page;
 337   1                 unsigned char addr[4];
 338   1           }data PG; 
 339   1      
 340   1          unsigned char data i=0,length=0,nBeginPage=0;
 341   1      
 342   1       
 343   1          //K9F_FUN = COMMAND;
 344   1          K9F_CS = 0;
 345   1              K9F_CLE = 1;
 346   1              K9F5608 = 0x60;
 347   1          //K9F_FUN = ADDRESS;
 348   1          K9F_CLE = 0;
 349   1              K9F_ALE = 1;
 350   1              K9F5608 = BuffBlock;
 351   1              K9F5608 = 0xff;
 352   1          //K9F_FUN = COMMAND;                                                  
 353   1          K9F_ALE = 0;
 354   1              K9F_CLE = 1;
 355   1              K9F5608 = 0xd0;
 356   1          //K9F_FUN = D_DATA;
 357   1              K9F_CLE = 0;
 358   1              delay();
 359   1      
 360   1          while(!K9F_RB);
 361   1              
 362   1              //K9F_FUN = COMMAND;
 363   1          K9F_CLE = 1;
 364   1              K9F5608 = 0x60;
C51 COMPILER V7.50   USB_DISK                                                              11/18/2005 21:31:23 PAGE 7   

 365   1          //K9F_FUN = ADDRESS;
 366   1          K9F_CLE = 0;
 367   1              K9F_ALE = 1;
 368   1              K9F5608 = BuffBlock|0x20;       
 369   1              K9F5608 = 0xff;
 370   1          //K9F_FUN = COMMAND;                                                  
 371   1          K9F_ALE = 0;
 372   1              K9F_CLE = 1;
 373   1              K9F5608 = 0xd0;
 374   1          //K9F_FUN = D_DATA; 
 375   1              K9F_CLE = 0;
 376   1      
 377   1              PG.addr[2] = bulk_CBW.CBWCB[4];
 378   1              PG.addr[3] = bulk_CBW.CBWCB[5];
 379   1      
 380   1              length = bulk_CBW.CBWCB[8];     
 381   1              nBeginPage = PG.addr[3]&0x1f;
 382   1              UEPNUM = 0x02;  
 383   1              delay();
 384   1              while(!K9F_RB); 
 385   1      
 386   1          if(nBeginPage>0)
 387   1                {
 388   2                   for(i=0;i<nBeginPage;i++)
 389   2                         { 
 390   3                                //K9F_FUN = COMMAND;
 391   3                                K9F_CLE = 1;
 392   3                                K9F5608 = 0x00;
 393   3                                //K9F_FUN = ADDRESS;
 394   3                    K9F_CLE = 0;
 395   3                        K9F_ALE = 1;
 396   3                                K9F5608 = 0;                                   //A0-A7
 397   3                    K9F5608 = (PG.addr[3]&0xe0)|i;     //A9-A16
 398   3                        K9F5608 = PG.addr[2];                          //A17-A24 
 399   3                                //K9F_FUN = D_DATA;
 400   3                    K9F_ALE = 0;
 401   3                                delay();
 402   3                            while(!K9F_RB); 
 403   3      
 404   3                                //K9F_FUN = COMMAND;
 405   3                                K9F_CLE = 1;
 406   3                                K9F5608 = 0x8a;
 407   3                                //K9F_FUN = ADDRESS;
 408   3                    K9F_CLE = 0;
 409   3                        K9F_ALE = 1;
 410   3                                K9F5608 = 0;                                            //A0-A7
 411   3                    K9F5608 = BuffBlock|(PG.addr[3]&0x20)|i;  //A9-A16
 412   3                        K9F5608 = 0xff;                                         //A17-A24 
 413   3                                //K9F_FUN = D_DATA;
 414   3                                K9F_ALE = 0;
 415   3                                delay();
 416   3                            while(!K9F_RB);
 417   3                         }
 418   2                       nBeginPage=0;
 419   2                }
 420   1      
 421   1              while(length>0)
 422   1                {
 423   2                       //K9F_FUN = COMMAND;
 424   2                   K9F_CLE = 1;
 425   2                       K9F5608 = 0x80;
 426   2                   //K9F_FUN = ADDRESS;
C51 COMPILER V7.50   USB_DISK                                                              11/18/2005 21:31:23 PAGE 8   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -