📄 fat.lis
字号:
.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 + -