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

📄 test.lst

📁 51环境下的FAT及FAT32文件系统源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V8.02   TEST                                                                  09/19/2006 15:01:22 PAGE 20  

 523      =2    unsigned int OffsetofSector; 
 524      =2    unsigned char SectorofCluster;// 0~(sector/cluster-1)             
 525      =2    unsigned long pointer;           // current sector(DSN)
 526      =2  //  unsigned int        FatSectorPointer;  // FSN
 527      =2  } FILE_INFO, *pFILE_INFO;
 528      =2  
 529      =2  typedef struct _DIR_INFO{
 530      =2          unsigned char name[8];      //0
 531      =2          unsigned char extension[3]; //9
 532      =2          unsigned char attribute;    //11
 533      =2          unsigned char Reserved[10]; //21
 534      =2          unsigned int lastUpdateDate; //23
 535      =2          unsigned int lastUpdateTime; //25
 536      =2          unsigned int startCluster;   //27
 537      =2          unsigned long length;        //28
 538      =2  } DIR_INFO, *pDIR_INFO;
 539      =2  /*
 540      =2  // Mode Sense
 541      =2  */
 542      =2  typedef struct _MODE_SENSE_SPC {
 543      =2      UINT8 OperationCode;            // 1AH
 544      =2      UINT8 Reseved0 : 3 ;
 545      =2      UINT8 DisableBlockDescriptor : 1 ;
 546      =2      UINT8 Reserved0 : 4 ;
 547      =2      UINT8 PageCode:6 ;
 548      =2      UINT8 PageControl : 2 ;
 549      =2      UINT8 Reserved1;
 550      =2      UINT8 ParameterLen;
 551      =2      UINT8 Control;
 552      =2  } MODE_SENSE_SPC, *pMODE_SENSE_SPC;
 553      =2  
 554      =2  /*
 555      =2  typedef struct _MODE_PARAMETER_HEAD {
 556      =2      UINT8 DataLen;
 557      =2      UINT8 MediumType;
 558      =2      UINT8 DeviceParameter;
 559      =2      UINT8 BlockDescriptorLen;
 560      =2  } MODE_PARAMETER_HEAD, *pMODE_PARAMETER_HEAD;
 561      =2  */
 562      =2  /*
 563      =2  // Define Device Capabilities page.
 564      =2  */
 565      =2  /*
 566      =2  typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE {
 567      =2      UINT8 PageCode : 6;
 568      =2          UINT8 Reserved : 1;
 569      =2      UINT8 PageSavable : 1;
 570      =2      UINT8 PageLength;
 571      =2      UINT8 WriteCacheDisable : 1;
 572      =2      UINT8 Reserved1 : 7;
 573      =2      UINT8 LogicalBlockSize[2];
 574      =2      UINT8 NumberOfLogicalBlocks[5];
 575      =2      UINT8 PowerPerformance;
 576      =2      UINT8 Lockable : 1;
 577      =2      UINT8 Formattable : 1;
 578      =2      UINT8 Writable : 1;
 579      =2      UINT8 Readable : 1;
 580      =2      UINT8 Reserved2 : 4;
 581      =2      UINT8 Reserved3;
 582      =2  }MODE_RBC_DEVICE_PARAMETERS_PAGE, *pMODE_RBC_DEVICE_PARAMETERS_PAGE;
 583      =2  */
 584      =2  /*
C51 COMPILER V8.02   TEST                                                                  09/19/2006 15:01:22 PAGE 21  

 585      =2  // prevent/allow medium removal
 586      =2  */
 587      =2  typedef struct _MEDIA_REMOVAL_SPC {
 588      =2          UINT8 OperationCode;    // 1EH
 589      =2          UINT8 Reserved0[3];
 590      =2          UINT8 Prevent;
 591      =2          //UINT8 Reserved1:6 ;
 592      =2          //UINT8 Control;
 593      =2  } MEDIA_REMOVAL_SPC, *pMEDIA_REMOVAL_SPC;
 594      =2  
 595      =2  /*
 596      =2  // Request Sense
 597      =2  */
 598      =2  typedef struct _REQUEST_SENSE_SPC {
 599      =2      UINT8 OperationCode;    // 03H
 600      =2      UINT8 Reserved[3];
 601      =2      UINT8 AllocationLen;
 602      =2      UINT8 Control;
 603      =2  } REQUEST_SENSE_SPC, *pREQUEST_SENSE_SPC;
 604      =2  /*
 605      =2  typedef struct _REQUEST_SENSE_DATA {
 606      =2      UINT8 ResponseCode : 7;
 607      =2      UINT8 Valid : 1;
 608      =2  
 609      =2      UINT8 SegmentNum;
 610      =2  
 611      =2      UINT8 SenseKey : 4;
 612      =2      UINT8 Reserved0 : 1;
 613      =2      UINT8 WrongLenIndicator : 1;
 614      =2      UINT8 EndofMedium : 1;
 615      =2      UINT8 FileMark : 1;
 616      =2  
 617      =2      UINT8 Info_0;
 618      =2      UINT8 Info_1;
 619      =2      UINT8 Info_2;
 620      =2      UINT8 Info_3;
 621      =2  
 622      =2      UINT8 AdditionalSenseLen;
 623      =2  
 624      =2      UINT8 CommandSpecInfo_0;
 625      =2      UINT8 CommandSpecInfo_1;
 626      =2      UINT8 CommandSpecInfo_2;
 627      =2      UINT8 CommandSpecInfo_3;
 628      =2  
 629      =2      UINT8 ASC;
 630      =2      UINT8 ASCQ;
 631      =2      UINT8 FieldReplacableUnitCode;
 632      =2      UINT8 SenseKeySpec_0 : 7;
 633      =2      UINT8 SenseKeySpecValid : 1;
 634      =2      UINT8 SenseKeySpec_1;
 635      =2      UINT8 SenseKeySpec_2;
 636      =2  
 637      =2  } REQUEST_SENSE_DATA, *pREQUEST_SENSE_DATA;
 638      =2  */
 639      =2  /*
 640      =2  // Test Unit Ready
 641      =2  */
 642      =2  typedef struct _TEST_UNIT_SPC {
 643      =2          UINT8 OperationCode;    // 00H
 644      =2          UINT8 Reserved[4];
 645      =2          UINT8 Control;
 646      =2  } TEST_UNIT_SPC, *pTEST_UNIT_SPC;
C51 COMPILER V8.02   TEST                                                                  09/19/2006 15:01:22 PAGE 22  

 647      =2  
 648      =2  /*
 649      =2  // Write Buffer
 650      =2  */
 651      =2  
 652      =2  typedef struct _WRITE_BUFFER_SPC {
 653      =2      UINT8 OperationCode;    
 654      =2      UINT8 Mod:4 ;
 655      =2      UINT8 Reserved0:4 ;
 656      =2          UINT8 BufferID;
 657      =2      UINT8 BufferOff_2;
 658      =2      UINT8 BufferOff_1;
 659      =2      UINT8 BufferOff_0;
 660      =2      UINT8 ParameterLen_2;
 661      =2      UINT8 ParameterLen_1;
 662      =2          UINT8 ParameterLen_0;
 663      =2      UINT8 Control;
 664      =2  } WRITE_BUFFER_SPC, *pWRITE_BUFFER_SPC;   
 665      =2  
 666      =2  typedef union _CDB_RBC {
 667      =2      GENERIC_CDB             Cdb_Generic;
 668      =2    
 669      =2       // RBC commands
 670      =2      GENERIC_RBC             RbcCdb_Generic;
 671      =2  
 672      =2      FORMAT_RBC              RbcCdb_Format;
 673      =2      READ_RBC                RbcCdb_Read;
 674      =2      READ_CAPACITY_RBC       RbcCdb_ReadCapacity;
 675      =2      START_STOP_RBC          RbcCdb_OnOffUnit;
 676      =2      SYNCHRONIZE_CACHE_RBC   RbcCdb_SyncCache;
 677      =2      VERIFY_RBC              RbcCdb_Verify;
 678      =2      WRITE_RBC               RbcCdb_Write;
 679      =2  
 680      =2     
 681      =2      // SPC-2 commands
 682      =2     
 683      =2      INQUIRY_SPC             SpcCdb_Inquiry;
 684      =2      MODE_SELECT_SPC         SpcCdb_ModeSelect;
 685      =2      MODE_SENSE_SPC          SpcCdb_ModeSense;
 686      =2      MEDIA_REMOVAL_SPC       SpcCdb_Remove;
 687      =2      REQUEST_SENSE_SPC       SpcCdb_RequestSense;
 688      =2      TEST_UNIT_SPC           SpcCdb_TestUnit;
 689      =2      WRITE_BUFFER_SPC        SpcCdb_WriteBuffer;
 690      =2  
 691      =2      // ATAPI Commands
 692      =2      READ_10         CmdRead10;
 693      =2      WRITE_10        CmdWrite10;
 694      =2      MODE_SELECT_10  CmdModeSel10;
 695      =2      MODE_SENSE_10   CmdModeSen10;
 696      =2      //////////////////////////////////////
 697      =2      READ_LONG_CMD       SpcCdb_ReadLong;
 698      =2  
 699      =2  } CDB_RBC, *pCDB_RBC;
 700      =2  
 701      =2  
   2      =1  ///////////////////////////////////
   3      =1  #define CBW_SIGNATURE   0x55534243
   4      =1  #define CSW_SIGNATURE   0x55534253
   5      =1  
   6      =1  #define     TPBulk_CBW                  TPBulk_Block.TPBulk_CommandBlock
   7      =1  #define     CBW_wXferLen                TPBulk_CBW.dCBW_DataXferLen
   8      =1  #define     RBC_CDB                             TPBulk_CBW.cdbRBC
C51 COMPILER V8.02   TEST                                                                  09/19/2006 15:01:22 PAGE 23  

   9      =1  #define     RBC_LUN                             TPBulk_CBW.bCBW_LUN
  10      =1  #define     TPBulk_CSW                  TPBulk_Block.TPBulk_CommandStatus
  11      =1  
  12      =1  typedef struct _COMMAND_BLOCK_WRAPPER{
  13      =1      UINT32   dCBW_Signature;
  14      =1      UINT32   dCBW_Tag;
  15      =1      UINT32   dCBW_DataXferLen;
  16      =1      UINT8    bCBW_Flag;
  17      =1      UINT8    bCBW_LUN;
  18      =1      UINT8    bCBW_CDBLen;
  19      =1      CDB_RBC cdbRBC;
  20      =1  } CBW, *pCBW;
  21      =1  
  22      =1  typedef struct _COMMAND_STATUS_WRAPPER{
  23      =1      UINT32   dCSW_Signature;
  24      =1      UINT32   dCSW_Tag;
  25      =1      UINT32   dCSW_DataResidue;
  26      =1      UINT8    bCSW_Status;
  27      =1  } CSW, *pCSW;
  28      =1  
  29      =1  typedef union _TPBULK_STRUC {
  30      =1      CBW     TPBulk_CommandBlock;
  31      =1      CSW     TPBulk_CommandStatus;
  32      =1  
  33      =1  }TPB_STRUC, *pTPB_STRUC;
  34      =1  ///////////////////////////////////
  35      =1  unsigned char EnumMassDev(void);
  36      =1  unsigned char TPBulk_GetMaxLUN(void);
  37      =1  unsigned char SPC_Inquiry(void);
  38      =1  unsigned char SPC_READLONG(void);
  39      =1  unsigned char SPC_RequestSense(void);
  40      =1  unsigned char SPC_TestUnit(void);
  41      =1  unsigned char SPC_LockMedia(void);
  42      =1  unsigned char RBC_ReadCapacity(void);
  43      =1  unsigned char RBC_ReadOneSec(unsigned long lba, unsigned char *pBuffer);
  44      =1  unsigned char RBC_Write(unsigned long lba,unsigned char len,unsigned char *pBuffer);
  45      =1  
  46      =1  
   5          #include "fat.h"
   1      =1  unsigned long FirstSectorofCluster(unsigned int n);
   2      =1  unsigned int ThisFatEntOffset(unsigned int clusterNum);
   3      =1  unsigned int GetNextClusterNum(unsigned int clusterNum);
   4      =1  unsigned int ThisFatSecNum(unsigned int clusterNum);
   6          #include "fat32.h"
   1      =1  //////////////////////////////////////////////////////////////////////
   2      =1  unsigned long FirstSectorofCluster32(unsigned long clusterNum);
   3      =1  unsigned long ThisFatSecNum32(unsigned long clusterNum);
   4      =1  unsigned long ThisFatEntOffset32(unsigned long clusterNum);
   5      =1  unsigned long GetNextClusterNum32(unsigned long clusterNum );
   6      =1  unsigned char GoToPointer32(unsigned long pointer);
   7      =1  unsigned char DeleteClusterLink32(unsigned long clusterNum);
   8      =1  unsigned long GetFreeCusterNum32(void);
   9      =1  unsigned long CreateClusterLink32(unsigned long currentCluster);
   7          #define FAT32_ACCESS
   8          void playMp3(); 
   9          void sdPlayMp3();       
  10          //void usbDebug(unsigned char nBytes, unsigned char *pBytes);
  11          
  12          XXGFLAGS bdata bXXGFlags;               // status flags
  13          // storage definitions
  14          UINT8 xdata pUSERBUF[64];                       // user buffer, for misc. use
  15          UINT8 xdata DBUF[SECT_LEN] _at_ 0x0;    // 512B data buffer, allocated at 0x0
C51 COMPILER V8.02   TEST                                                                  09/19/2006 15:01:22 PAGE 24  

  16          UINT8 xdata RDIRBUF[SECT_LEN];          // 512 byte buffer for root directory
  17          UINT8 xdata FATBUF[SECT_LEN];           // 512 byte buffer for FAT 
  18          UINT8 xdata respBuf[16];                // SPI response buffer
  19          
  20          DIR_IDX dirIdx;
  21          pDIR_INFO pDIR;
  22          
  23          unsigned char skipSong;
  24          
  25          //extern FILE_INFO xdata ThisFile;          // file information
  26          extern SYS_INFO_BLOCK DeviceInfo; 
  27          extern XXGPKG usbstack;                   // USB packet variables       
  28          extern TPB_STRUC data TPBulk_Block;
  29          
  30          void main(void)
  31          {
  32   1          UINT8 i;
  33   1              UINT16 j;
  34   1              UINT32 nSector;
  35   1      
  36   1              unsigned char temp;
  37   1      
  38   1              bXXGFlags.SLAVE_ONLINE = FALSE;
  39   1              bXXGFlags.SLAVE_FOUND = FALSE;
  40   1              bXXGFlags.SLAVE_REMOVED=FALSE;
  41   1              
  42   1              bXXGFlags.SLAVE_ENUMERATED = FALSE;
  43   1              bXXGFlags.SLAVE_IS_ATTACHED = FALSE;
  44   1              bXXGFlags.bUartInDone=FALSE;
  45   1              bXXGFlags.bToggle=FALSE;
  46   1              bXXGFlags.bIN_ISR=FALSE;
  47   1        
  48   1              SCON = SCON_FAST;         // set UART speed 38400bps
  49   1          BufSel = MCU2MP3;          // destination to mp3, source from mcu
  50   1      
  51   1          SPI_CTL0 = 0x4E;
  52   1          SPI_CTL1 = SPI_375K;      // set low speed
  53   1      
  54   1              P1= 0x0; 
  55   1              for(i=0;i<64;i++)
  56   1              {       
  57   2                      DBUF[i] = 0;
  58   2              }
  59   1      
  60   1          P3_DDR = 0xFA;  // enable P3.2 for input
  61  

⌨️ 快捷键说明

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