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

📄 fat.lis

📁 M16-Mp3.rar
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module fat.c
                        .area text(rom, con, rel)
 0000                   .dbfile ..\..\..\..\..\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\fat.c
                        .area data(ram, con, rel)
 0000                   .dbfile ..\..\..\..\..\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\fat.c
 0000           _SectorIndex::
 0000                   .blkb 4
                        .area idata
 0000 00000000          .word 0,0
                        .area data(ram, con, rel)
 0004                   .dbfile ..\..\..\..\..\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\fat.c
 0004                   .dbfile C:\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\fat.c
 0004                   .dbsym e SectorIndex _SectorIndex l
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\fat.c
 0000                   .dbfunc e Fat_Init _Fat_Init fc
 0000           ;           temp -> y+2
                        .even
 0000           _Fat_Init::
 0000 0E940000          xcall push_xgsetF00C
 0004 2697              sbiw R28,6
 0006                   .dbline -1
 0006                   .dbline 63
 0006           ; 
 0006           ; //---------------------------- 文件系统程序 -----------------------------
 0006           ; //
 0006           ; //文件系统:简易FAT32
 0006           ; //代码作者:廖华明(师兄)
 0006           ; //时间:2009.7.8
 0006           ; //
 0006           ; //------------------------------------------------------------------------
 0006           ; 
 0006           ; #include"fat.h"
 0006           ; 
 0006           ; uint32 SearchFile_Clust;
 0006           ; uint32 Music_Dir;
 0006           ; 
 0006           ; uint32 fclust[20];
 0006           ; uint8  fcount;
 0006           ; uint32 fsize[20];
 0006           ; 
 0006           ; uint32  NextCluster;                          //指向当前正在读取文件的簇号
 0006           ; uint32  SectorIndex=0;                //正在读扇区
 0006           ; 
 0006           ; uint32        Partition_StartLBA;                             // 该分区内第一个扇区地址
 0006           ; 
 0006           ; uint16        BPB_BytesPerSec;                                //扇区字节数
 0006           ; uint8 BPB_SecPerClus;                                 //每簇扇区数
 0006           ; uint16        BPB_RsvdSecCnt;                                 //保留扇区数
 0006           ; uint8 BPB_NumFATs;                                    //FAT数目
 0006           ; uint16        BPB_RootEntCnt;                                 //根目录项数 0
 0006           ; uint16        BPB_TotSec16;                                   //小扇区总数 0
 0006           ; uint8 BPB_Media;                                              //媒体描述符
 0006           ; uint16        BPB_FATSz16;                                    //每FAT扇区数fat32不用为0
 0006           ; uint16        BPB_SecPerTrk;                                  //每道扇区数
 0006           ; uint16        BPB_NumHeads;                                   //磁头数
 0006           ; uint32        BPB_HiddSec;                                    //隐藏扇区数
 0006           ; uint32        BPB_TotSec32;                                   //总扇区数   
 0006           ; uint32        BPB_FATSz32;                                    //每FAT扇区数fat32
 0006           ; uint16        BPB_ExtFlags;                                   //fat32扩展标志
 0006           ; uint16  BPB_FSVer;                                            //fat32特有,高位为fat32的主版本号,底位为次版本号
 0006           ; uint32        BPB_RootClus;                                   //根目录簇号
 0006           ; uint16        BPB_FSInfo;                                             //文件系统信息扇区号
 0006           ; uint16        BPB_BKBootSec;                                  //引导扇区备份号
 0006           ; 
 0006           ; uint8         deName[8];
 0006           ; uint8         deExtension[3];
 0006           ; uint32  Clust;                                                        //当前目录的簇号
 0006           ; uint16        Nums;                                                   //仅FAT12—FAT16中的根目录区有效
 0006           ; uint32        Index;                                                  //当前的BLOCK中目录项索引
 0006           ; uint32        FileSize;                                               //文件长度
 0006           ; 
 0006           ; uint32  FAT1Sec;                                              //FAT1表的位置
 0006           ; uint32  FAT2Sec;
 0006           ; uint32  FirstDataSector;                              //第一个根目录位置,区号为2
 0006           ; uint32  FirstDirSector;
 0006           ; 
 0006           ; uint8   Fat_Buffer[512]; 
 0006           ; 
 0006           ; 
 0006           ; uint32  FAT_MASK;
 0006           ; uint16  RootDirEnts;         // 根目录总的项数(FAT12&FAT16)
 0006           ; 
 0006           ; 
 0006           ; uint8 Fat_Init(void)
 0006           ; {   
 0006                   .dbline 67
 0006           ;       
 0006           ;       uint32 temp;
 0006           ;       
 0006           ;       SD_ReadBlock(0,Fat_Buffer);             
 0006 80E0              ldi R24,<_Fat_Buffer
 0008 90E0              ldi R25,>_Fat_Buffer
 000A 9983              std y+1,R25
 000C 8883              std y+0,R24
 000E 00E0              ldi R16,0
 0010 10E0              ldi R17,0
 0012 20E0              ldi R18,0
 0014 30E0              ldi R19,0
 0016 0E940000          xcall _SD_ReadBlock
 001A                   .dbline 69
 001A           ; 
 001A           ;     Partition_StartLBA = (Fat_Buffer[454]|(Fat_Buffer[455]<<8)|((uint32)Fat_Buffer[456]<<16)|((uint32)Fat_Buffer[457]<<24));          
 001A 20901202          lds R2,_Fat_Buffer+455
 001E 3324              clr R3
 0020 322C              mov R3,R2
 0022 2224              clr R2
 0024 40901102          lds R4,_Fat_Buffer+454
 0028 5524              clr R5
 002A 4228              or R4,R2
 002C 5328              or R5,R3
 002E 1201              movw R2,R4
 0030 4424              clr R4
 0032 37FC              sbrc R3,7
 0034 4094              com R4
 0036 5524              clr R5
 0038 47FC              sbrc R4,7
 003A 5094              com R5
 003C 60901302          lds R6,_Fat_Buffer+456
 0040 7724              clr R7
 0042 8824              clr R8
 0044 9924              clr R9
 0046 4301              movw R8,R6
 0048 6624              clr R6
 004A 7724              clr R7
 004C 2628              or R2,R6
 004E 3728              or R3,R7
 0050 4828              or R4,R8
 0052 5928              or R5,R9
 0054 88E1              ldi R24,24
 0056 90E0              ldi R25,0
 0058 00911402          lds R16,_Fat_Buffer+457
 005C 1127              clr R17
 005E 2227              clr R18
 0060 3327              clr R19
 0062 8A93              st -y,R24
 0064 0E940000          xcall lsl32
 0068 202A              or R2,R16
 006A 312A              or R3,R17
 006C 422A              or R4,R18
 006E 532A              or R5,R19
 0070 30923C00          sts _Partition_StartLBA+1,R3
 0074 20923B00          sts _Partition_StartLBA,R2
 0078 50923E00          sts _Partition_StartLBA+2+1,R5
 007C 40923D00          sts _Partition_StartLBA+2,R4
 0080                   .dbline 71
 0080           ;               
 0080           ;       SD_ReadBlock(Partition_StartLBA,Fat_Buffer);                                    //FAT32 read BPB
 0080 80E0              ldi R24,<_Fat_Buffer
 0082 90E0              ldi R25,>_Fat_Buffer
 0084 9983              std y+1,R25
 0086 8883              std y+0,R24
 0088 8101              movw R16,R2
 008A 9201              movw R18,R4
 008C 0E940000          xcall _SD_ReadBlock
 0090                   .dbline 73
 0090           ; 
 0090           ;       BPB_BytesPerSec = Fat_Buffer[11] |(Fat_Buffer[12] << 8);                        //0x0200                        //每个扇区字节数
 0090 20905700          lds R2,_Fat_Buffer+12
 0094 3324              clr R3
 0096 322C              mov R3,R2
 0098 2224              clr R2
 009A 40905600          lds R4,_Fat_Buffer+11
 009E 5524              clr R5
 00A0 4228              or R4,R2
 00A2 5328              or R5,R3
 00A4 50923A00          sts _BPB_BytesPerSec+1,R5
 00A8 40923900          sts _BPB_BytesPerSec,R4
 00AC                   .dbline 74
 00AC           ;       BPB_SecPerClus  = Fat_Buffer[13];                                                               //0x08                  //每个簇的扇区数
 00AC 20905800          lds R2,_Fat_Buffer+13
 00B0 20923800          sts _BPB_SecPerClus,R2
 00B4                   .dbline 75
 00B4           ;       BPB_RsvdSecCnt  = Fat_Buffer[14] |(Fat_Buffer[15] << 8);                        //0x20                          //保留扇区数
 00B4 20905A00          lds R2,_Fat_Buffer+15
 00B8 3324              clr R3
 00BA 322C              mov R3,R2
 00BC 2224              clr R2
 00BE 40905900          lds R4,_Fat_Buffer+14
 00C2 5524              clr R5
 00C4 4228              or R4,R2
 00C6 5328              or R5,R3
 00C8 50923700          sts _BPB_RsvdSecCnt+1,R5
 00CC 40923600          sts _BPB_RsvdSecCnt,R4
 00D0                   .dbline 76
 00D0           ;       BPB_NumFATs     = Fat_Buffer[16];                                                               //0x02                          //FAT 表数目
 00D0 20905B00          lds R2,_Fat_Buffer+16
 00D4 20923500          sts _BPB_NumFATs,R2
 00D8                   .dbline 77
 00D8           ;       BPB_RootEntCnt  = Fat_Buffer[17] | (Fat_Buffer[18] << 8);
 00D8 20905D00          lds R2,_Fat_Buffer+18
 00DC 3324              clr R3
 00DE 322C              mov R3,R2
 00E0 2224              clr R2
 00E2 40905C00          lds R4,_Fat_Buffer+17
 00E6 5524              clr R5
 00E8 4228              or R4,R2
 00EA 5328              or R5,R3
 00EC 50923400          sts _BPB_RootEntCnt+1,R5
 00F0 40923300          sts _BPB_RootEntCnt,R4
 00F4                   .dbline 78
 00F4           ;       BPB_TotSec16    = Fat_Buffer[19] | (Fat_Buffer[20] << 8);
 00F4 20905F00          lds R2,_Fat_Buffer+20
 00F8 3324              clr R3
 00FA 322C              mov R3,R2
 00FC 2224              clr R2
 00FE 40905E00          lds R4,_Fat_Buffer+19
 0102 5524              clr R5
 0104 4228              or R4,R2
 0106 5328              or R5,R3
 0108 50923200          sts _BPB_TotSec16+1,R5
 010C 40923100          sts _BPB_TotSec16,R4
 0110                   .dbline 79
 0110           ;       BPB_Media               = Fat_Buffer[21];
 0110 20906000          lds R2,_Fat_Buffer+21
 0114 20923000          sts _BPB_Media,R2
 0118                   .dbline 80
 0118           ;       BPB_FATSz16             = Fat_Buffer[22] | (Fat_Buffer[23] << 8); 
 0118 20906200          lds R2,_Fat_Buffer+23
 011C 3324              clr R3
 011E 322C              mov R3,R2
 0120 2224              clr R2
 0122 40906100          lds R4,_Fat_Buffer+22
 0126 5524              clr R5
 0128 4228              or R4,R2
 012A 5328              or R5,R3
 012C 50922F00          sts _BPB_FATSz16+1,R5
 0130 40922E00          sts _BPB_FATSz16,R4
 0134                   .dbline 81
 0134           ;     BPB_SecPerTrk     = Fat_Buffer[24] | (Fat_Buffer[25] << 8);
 0134 20906400          lds R2,_Fat_Buffer+25
 0138 3324              clr R3
 013A 322C              mov R3,R2
 013C 2224              clr R2
 013E 40906300          lds R4,_Fat_Buffer+24
 0142 5524              clr R5
 0144 4228              or R4,R2
 0146 5328              or R5,R3
 0148 50922D00          sts _BPB_SecPerTrk+1,R5
 014C 40922C00          sts _BPB_SecPerTrk,R4
 0150                   .dbline 82
 0150           ;     BPB_NumHeads      = Fat_Buffer[26] | (Fat_Buffer[27] << 8); 
 0150 20906600          lds R2,_Fat_Buffer+27
 0154 3324              clr R3
 0156 322C              mov R3,R2
 0158 2224              clr R2
 015A 40906500          lds R4,_Fat_Buffer+26
 015E 5524              clr R5
 0160 4228              or R4,R2
 0162 5328              or R5,R3
 0164 50922B00          sts _BPB_NumHeads+1,R5
 0168 40922A00          sts _BPB_NumHeads,R4
 016C                   .dbline 83
 016C           ;     BPB_HiddSec       = Fat_Buffer[28] | (Fat_Buffer[29] << 8) | ((uint32)Fat_Buffer[30] << 16) | ((uint32)Fat_Buffer[31] << 24);  
 016C 20906800          lds R2,_Fat_Buffer+29
 0170 3324              clr R3
 0172 322C              mov R3,R2
 0174 2224              clr R2
 0176 40906700          lds R4,_Fat_Buffer+28
 017A 5524              clr R5
 017C 4228              or R4,R2
 017E 5328              or R5,R3
 0180 1201              movw R2,R4
 0182 4424              clr R4
 0184 37FC              sbrc R3,7
 0186 4094              com R4
 0188 5524              clr R5
 018A 47FC              sbrc R4,7
 018C 5094              com R5
 018E 60906900          lds R6,_Fat_Buffer+30
 0192 7724              clr R7
 0194 8824              clr R8
 0196 9924              clr R9
 0198 4301              movw R8,R6
 019A 6624              clr R6
 019C 7724              clr R7
 019E 2628              or R2,R6
 01A0 3728              or R3,R7
 01A2 4828              or R4,R8
 01A4 5928              or R5,R9
 01A6 88E1              ldi R24,24
 01A8 90E0              ldi R25,0
 01AA 00916A00          lds R16,_Fat_Buffer+31
 01AE 1127              clr R17
 01B0 2227              clr R18
 01B2 3327              clr R19
 01B4 8A93              st -y,R24
 01B6 0E940000          xcall lsl32
 01BA 202A              or R2,R16
 01BC 312A              or R3,R17
 01BE 422A              or R4,R18
 01C0 532A              or R5,R19
 01C2 30922700          sts _BPB_HiddSec+1,R3
 01C6 20922600          sts _BPB_HiddSec,R2
 01CA 50922900          sts _BPB_HiddSec+2+1,R5
 01CE 40922800          sts _BPB_HiddSec+2,R4
 01D2                   .dbline 84
 01D2           ;     BPB_TotSec32      = Fat_Buffer[32] | (Fat_Buffer[33] << 8) | ((uint32)Fat_Buffer[34] << 16) | ((uint32)Fat_Buffer[35] << 24);  
 01D2 20906C00          lds R2,_Fat_Buffer+33
 01D6 3324              clr R3
 01D8 322C              mov R3,R2
 01DA 2224              clr R2
 01DC 40906B00          lds R4,_Fat_Buffer+32
 01E0 5524              clr R5
 01E2 4228              or R4,R2
 01E4 5328              or R5,R3
 01E6 1201              movw R2,R4
 01E8 4424              clr R4
 01EA 37FC              sbrc R3,7
 01EC 4094              com R4
 01EE 5524              clr R5
 01F0 47FC              sbrc R4,7
 01F2 5094              com R5
 01F4 60906D00          lds R6,_Fat_Buffer+34
 01F8 7724              clr R7
 01FA 8824              clr R8
 01FC 9924              clr R9
 01FE 4301              movw R8,R6
 0200 6624              clr R6
 0202 7724              clr R7
 0204 2628              or R2,R6
 0206 3728              or R3,R7
 0208 4828              or R4,R8
 020A 5928              or R5,R9
 020C 88E1              ldi R24,24
 020E 90E0              ldi R25,0
 0210 00916E00          lds R16,_Fat_Buffer+35

⌨️ 快捷键说明

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