📄 atmel mp3.lst
字号:
C51 COMPILER V7.06 ATMEL_MP3 03/21/2006 09:38:04 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ATMEL_MP3
OBJECT MODULE PLACED IN ATMEL MP3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ATMEL MP3.C LARGE BROWSE DEBUG OBJECTEXTEND PAGEWIDTH(130) PAGELENGTH(80)
stmt 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)
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;
C51 COMPILER V7.06 ATMEL_MP3 03/21/2006 09:38:04 PAGE 2
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 }/*(为什么使用*256呢?因为454,455,456,457这四个是作为一个整体数据来看,这样,就会出现从454到455时的数的进制是25
-6,
91 1 454到456时就是256*256了。)*/
92 1 /*为什么会是从454开始的呢?因为在MBR区中,如果有分区,那么就要从446开始(446开始就是分区信息表了,共四个,每个16
-个字节,
93 1 到第八个字节就是该分区的起始绝对分区,是双字)446+8=454了,然后向后四个字节(双字),而引导扇区在第一个分区里
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -