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

📄 atmel mp3.lst

📁 在C51上 mp3 开发程序 32M MP3 MP3功能的测试源码
💻 LST
字号:
C51 COMPILER V7.50   ATMEL_MP3                                                             03/07/2005 09:36:39 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE ATMEL_MP3
OBJECT MODULE PLACED IN ATMEL MP3.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ATMEL MP3.C LARGE ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          /*********************************************************************************************************
   3          **                                        
   4          **                                  MP3 and U Disk Source Code
   5          **                           Copyright (c) 2005,北京博创兴业科技有限公司
   6          **                                      All Rights Reserved
   7          **                                           V3.00.0
   8          **
   9          **--------------文件信息--------------------------------------------------------------------------------
  10          **文   件   名:  ATMEL MP3.C
  11          **创   建   人:  Frank   Wang Xiao Jun
  12          **创 建  日 期:  2003.12
  13          **描        述:  文件系统和MP3歌曲的解码播放代码
  14          **
  15          **--------------历史版本信息----------------------------------------------------------------------------
  16          ** 创建人:      Frank   Wang Xiao Jun
  17          ** 版  本:      V1.00.0
  18          ** 日 期:      2003.12
  19          ** 描 述:  文件系统和MP3歌曲的解码播放代码
  20          **
  21          **------------------------------------------------------------------------------------------------------
  22          ** 修改人:      Kent   Zou Ying
  23          ** 版  本:  V2.00.0
  24          ** 日 期:      2004. 5
  25          ** 描 述:      文件系统和MP3歌曲的解码播放代码
  26          **
  27          **--------------当前版本修订------------------------------------------------------------------------------
  28          ** 修改人:      Phoenix    Hua Yue Guang
  29          ** 版  本:  V3.00.0
  30          ** 日 期:      2005.3
  31          ** 描 述:      文件系统和MP3歌曲的解码播放代码
  32          **
  33          **------------------------------------------------------------------------------------------------------
  34          ********************************************************************************************************/
  35          #include <string.h>
  36          
  37          #define Root_Cluster     (0)
  38          #define Begin_Cluster    (0)                              //MBR所在的簇号
  39          #define Data_Cluster     (1)                              //数据真正开始的扇区
  40          
  41          #define BPB_Sector           (0)
  42          #define Fat_Sector           (BPB_Sector + 1)
  43          #define Directory_Sector (Fat_Sector + 4)
  44          #define End_Cluster              (Disk_Size / 32)
  45          
  46          #define UNUSED_MARK              (0xFF)
  47          #define BAD_MARK                 (0x00)
  48          #define LAST_BLOCK               (0xFFFF)
  49          #define FILE_NO_FOUND    (512)
  50          
  51          #define PagePerClus           32
  52          
  53          #define FAT12            (12)
  54          #define FAT16            (16)
  55          #define FAT32            (32)
C51 COMPILER V7.50   ATMEL_MP3                                                             03/07/2005 09:36:39 PAGE 2   

  56          
  57          #define K9F_FUN                         P5
  58          #define K9F5608                         0x4000
  59          #define COMMAND                         0x03    
  60          #define ADDRESS                         0x05    
  61          #define D_DATA                          0x01
  62          #define INACTIVE                        0x09    
  63          #define RB                                      0x01
  64          
  65          //数据结构与全局变量定义  
  66          unsigned char Page_Buf[512];
  67          extern unsigned char SONG[];
  68          long int Current_Cluster, DataRead = 0, DataRemain = 0, Sector_Offset = 0x21d;
  69          unsigned int TotalCluster, BootSector, RsdSector, SectorofFatSize, TotalCapacity, RootEntry, SecPerClus;
  70          unsigned int TotalSector, BytesPerSec, FirstDataSec;
  71          unsigned char FAT_TYPE; 
  72          
  73          
  74          int ReadSector(unsigned char *Name, unsigned char *databuff);
  75          unsigned char GetMP3List(void);
  76          void Init_FAT_Info(void);
  77          
  78          extern void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage);
  79          
  80          
  81          void Init_FAT_Info(void)
  82          {
  83   1      /*      得到引导扇区所在扇区号,如果介质是不带分区的,则0扇区就是BootSector了。 */
  84   1              ReadPage(Begin_Cluster, 0, Page_Buf);
  85   1      
  86   1              if (!(Page_Buf[0] == 0xeb && Page_Buf[2] == 0x90))                                        //通过判断EB ?? 90来看是否已经是BPB了
  87   1              {                                                                                                                                         //带分区的介质
  88   2                      
  89   2                      BootSector = Page_Buf[454] + Page_Buf[455] * 256 + Page_Buf[456] * (256 * 256) + Page_Buf[457] * (256 * 
             -256 * 256);
  90   2              }
  91   1              else 
  92   1              {
  93   2                      BootSector = 0;
  94   2              }
  95   1      
  96   1      /*      得到保留扇区数,总扇区数,总扇区数/每簇扇区数得到簇数,是FAT类型的依据      */
  97   1              ReadPage(Begin_Cluster, BootSector, Page_Buf);
  98   1              RsdSector = Page_Buf[14] + Page_Buf[15] * 256;
  99   1              SecPerClus = Page_Buf[13];
 100   1      
 101   1              BytesPerSec = Page_Buf[12] * 256 + Page_Buf[11];
 102   1      
 103   1              TotalSector = (Page_Buf[20] * 256 + Page_Buf[19]);
 104   1              TotalCapacity = TotalSector * BytesPerSec;
 105   1              TotalCluster = TotalSector / SecPerClus;                              //FAT16的簇总数=扇区总数/每簇扇区数
 106   1      
 107   1              SectorofFatSize = ((Page_Buf[22] + Page_Buf[23] * 256));
 108   1              RootEntry = (Page_Buf[18] * 256 + Page_Buf[17]);
 109   1       
 110   1              FirstDataSec = BootSector + RsdSector + (SectorofFatSize * 2) + ((RootEntry * 32 + (BytesPerSec-1)) / Byt
             -esPerSec);
 111   1      
 112   1              if (TotalCluster > 65525)                                                                                         //FAT32的扇区总数和FAT表项长度
 113   1              {               
 114   2                      FAT_TYPE = FAT32;
 115   2      
C51 COMPILER V7.50   ATMEL_MP3                                                             03/07/2005 09:36:39 PAGE 3   

 116   2                      if (TotalSector == 0) 
 117   2                      {
 118   3                              TotalSector = (Page_Buf[32] + Page_Buf[33] * 256 + Page_Buf[34] * 256 * 256 + Page_Buf[35] * 256 * 256 
             -* 256);
 119   3                      }
 120   2                      TotalCapacity = TotalSector * BytesPerSec;
 121   2                      TotalCluster = TotalSector / SecPerClus;
 122   2      
 123   2                      SectorofFatSize = (Page_Buf[36] + Page_Buf[37] * 256 + Page_Buf[38] * 256 * 256 + Page_Buf[39] * 256 * 2
             -56 * 256);
 124   2                      if (SectorofFatSize > (TotalCluster * 16 / 512))
 125   2                      {
 126   3                              SectorofFatSize = ((Page_Buf[22] + Page_Buf[23] * 256));
 127   3                      }
 128   2                      RootEntry = (Page_Buf[44] * 256 + Page_Buf[43]);
 129   2                      FirstDataSec = BootSector+RsdSector + (SectorofFatSize * 2) + ((RootEntry * 32 + (BytesPerSec-1)) / Byte
             -sPerSec);
 130   2                      
 131   2              }
 132   1              else if ((TotalCluster > 0) && (TotalCluster < 4085)) 
 133   1              {
 134   2                      FAT_TYPE = FAT12;
 135   2              }
 136   1              else
 137   1              {       
 138   2                      FAT_TYPE = FAT16;
 139   2              }
 140   1      }
 141          
 142          unsigned char GetMP3List(void)
 143          {
 144   1              unsigned char i = 0, j = 0, l = 0;
 145   1              int k = 0;
 146   1              unsigned char MP3[3] = {'M', 'P', '3'};
 147   1              Init_FAT_Info();
 148   1      
 149   1              k = BootSector + RsdSector + 2 * SectorofFatSize;
 150   1      
 151   1              ReadPage(0 + k / 32, k % 32, Page_Buf);
 152   1       
 153   1              while (Page_Buf[0] != 0)                                                                                  //遍历整个目录
 154   1              {
 155   2                      for (j=0; j<16; j++)
 156   2                      {
 157   3                              if (!Page_Buf[j * 32]) break;
 158   3                              if (Page_Buf[j * 32] == 0xE5) continue;
 159   3      
 160   3                              if (!memcmp(MP3, &Page_Buf[j * 32 + 8], 3))                                       //file find
 161   3                              {       
 162   4                                              for (i=0; i<11; i++) 
 163   4                                              {
 164   5                                                      SONG[l * 11 + i] = Page_Buf[j * 32 + i];
 165   5                                              }
 166   4                                              l++;
 167   4                              }
 168   3                      }
 169   2                      k++;
 170   2                      ReadPage(0 + k / 32, k % 32, Page_Buf);
 171   2              }
 172   1              return (l);
 173   1      }
 174          
C51 COMPILER V7.50   ATMEL_MP3                                                             03/07/2005 09:36:39 PAGE 4   

 175          int ReadSector(unsigned char *Name, unsigned char *databuff)
 176          {
 177   1              int i, k, Page;
 178   1              unsigned  long CurrentSector;
 179   1              if (DataRead == 0)                                                    //第一次读取,先查找文件,然后进行

⌨️ 快捷键说明

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