📄 fat.lis
字号:
.module fat.c
.area text(rom, con, rel)
0000 .dbfile C:\AVR\M\1\fat.c
0000 .dbfunc e Fat_Init _Fat_Init fc
.even
0000 _Fat_Init::
0000 0E940000 xcall push_gset3
0004 2297 sbiw R28,2
0006 .dbline -1
0006 .dbline 18
0006 ;
0006 ; #include"fat.h"
0006 ; #include "Usart.h"
0006 ; uint32 FAT_MASK;
0006 ; uint8 Fat_Buffer[512];
0006 ; uint32 NumOfFile; //文件的数量
0006 ;
0006 ;
0006 ; //DISK_FAT_INFO结构,用来存储SD卡的信息
0006 ; struct DISK_FAT_INFO DiskFATInfo;
0006 ;
0006 ; //MUSIC_INFO结构,用来存储音乐的信息,MusicInfoList用来存放音乐列表,这里限制100首
0006 ; struct MUSIC_INFO MusicInfoList[3];
0006 ;
0006 ; //******************************************************************************
0006 ; //初始化FAT,将SD卡信息,存到DiskFATInfo结构
0006 ; uint8 Fat_Init(void)
0006 ; {
0006 .dbline 19
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 20
001A ; if(Fat_Buffer[0] != 0xEB)
001A 80919A00 lds R24,_Fat_Buffer
001E 8B3E cpi R24,235
0020 09F4 brne X2
0022 68C0 xjmp L2
0024 X2:
0024 .dbline 21
0024 ; {
0024 .dbline 22
0024 ; DiskFATInfo.DBR_LBA = (Fat_Buffer[454]|(Fat_Buffer[455]<<8)|((uint32)Fat_Buffer[456]<<16)|((uint32)Fat_Buffer[457]<<24));
0024 20906102 lds R2,_Fat_Buffer+455
0028 3324 clr R3
002A 322C mov R3,R2
002C 2224 clr R2
002E 40906002 lds R4,_Fat_Buffer+454
0032 5524 clr R5
0034 4228 or R4,R2
0036 5328 or R5,R3
0038 1201 movw R2,R4
003A 4424 clr R4
003C 37FC sbrc R3,7
003E 4094 com R4
0040 5524 clr R5
0042 47FC sbrc R4,7
0044 5094 com R5
0046 60906202 lds R6,_Fat_Buffer+456
004A 7724 clr R7
004C 8824 clr R8
004E 9924 clr R9
0050 4301 movw R8,R6
0052 6624 clr R6
0054 7724 clr R7
0056 2628 or R2,R6
0058 3728 or R3,R7
005A 4828 or R4,R8
005C 5928 or R5,R9
005E 88E1 ldi R24,24
0060 90E0 ldi R25,0
0062 60906302 lds R6,_Fat_Buffer+457
0066 7724 clr R7
0068 8824 clr R8
006A 9924 clr R9
006C 8A93 st -y,R24
006E 8301 movw R16,R6
0070 9401 movw R18,R8
0072 0E940000 xcall lsl32
0076 202A or R2,R16
0078 312A or R3,R17
007A 422A or R4,R18
007C 532A or R5,R19
007E 30927C00 sts _DiskFATInfo+1,R3
0082 20927B00 sts _DiskFATInfo,R2
0086 50927E00 sts _DiskFATInfo+2+1,R5
008A 40927D00 sts _DiskFATInfo+2,R4
008E .dbline 23
008E ; switch(Fat_Buffer[0x1C2])
008E A0905C02 lds R10,_Fat_Buffer+450
0092 BB24 clr R11
0094 C501 movw R24,R10
0096 8430 cpi R24,4
0098 E0E0 ldi R30,0
009A 9E07 cpc R25,R30
009C D9F0 breq L14
009E 8430 cpi R24,4
00A0 E0E0 ldi R30,0
00A2 9E07 cpc R25,R30
00A4 0CF4 brge X3
00A6 5EC0 xjmp L3
00A8 X3:
00A8 L16:
00A8 C501 movw R24,R10
00AA 8B30 cpi R24,11
00AC E0E0 ldi R30,0
00AE 9E07 cpc R25,R30
00B0 09F0 breq L12
00B2 58C0 xjmp L3
00B4 X0:
00B4 .dbline 24
00B4 ; {
00B4 L12:
00B4 .dbline 26
00B4 ; case 0x0B:
00B4 ; DiskFATInfo.FAT_Style = 32;
00B4 80E2 ldi R24,32
00B6 80938900 sts _DiskFATInfo+14,R24
00BA .dbline 27
00BA ; FAT_MASK = FAT32_MASK;
00BA 4FEF ldi R20,255
00BC 5FEF ldi R21,255
00BE 6FEF ldi R22,255
00C0 7FE0 ldi R23,15
00C2 50939300 sts _FAT_MASK+1,R21
00C6 40939200 sts _FAT_MASK,R20
00CA 70939500 sts _FAT_MASK+2+1,R23
00CE 60939400 sts _FAT_MASK+2,R22
00D2 .dbline 28
00D2 ; break;
00D2 48C0 xjmp L3
00D4 L14:
00D4 .dbline 30
00D4 ; case 0x04:
00D4 ; DiskFATInfo.FAT_Style = 16;
00D4 80E1 ldi R24,16
00D6 80938900 sts _DiskFATInfo+14,R24
00DA .dbline 31
00DA ; FAT_MASK = FAT16_MASK;
00DA 4FEF ldi R20,255
00DC 5FEF ldi R21,255
00DE 60E0 ldi R22,0
00E0 70E0 ldi R23,0
00E2 50939300 sts _FAT_MASK+1,R21
00E6 40939200 sts _FAT_MASK,R20
00EA 70939500 sts _FAT_MASK+2+1,R23
00EE 60939400 sts _FAT_MASK+2,R22
00F2 .dbline 32
00F2 ; break;
00F2 .dbline 34
00F2 ; }
00F2 ; }
00F2 38C0 xjmp L3
00F4 L2:
00F4 .dbline 36
00F4 ; else
00F4 ; {
00F4 .dbline 37
00F4 ; DiskFATInfo.DBR_LBA = 0;
00F4 40E0 ldi R20,0
00F6 50E0 ldi R21,0
00F8 60E0 ldi R22,0
00FA 70E0 ldi R23,0
00FC 50937C00 sts _DiskFATInfo+1,R21
0100 40937B00 sts _DiskFATInfo,R20
0104 70937E00 sts _DiskFATInfo+2+1,R23
0108 60937D00 sts _DiskFATInfo+2,R22
010C .dbline 38
010C ; switch(Fat_Buffer[0x55])
010C A090EF00 lds R10,_Fat_Buffer+85
0110 BB24 clr R11
0112 C501 movw R24,R10
0114 8133 cpi R24,49
0116 E0E0 ldi R30,0
0118 9E07 cpc R25,R30
011A A9F0 breq L23
011C 8333 cpi R24,51
011E E0E0 ldi R30,0
0120 9E07 cpc R25,R30
0122 09F0 breq L21
0124 1FC0 xjmp L17
0126 X1:
0126 .dbline 39
0126 ; {
0126 L21:
0126 .dbline 41
0126 ; case 0x33:
0126 ; DiskFATInfo.FAT_Style = 32;
0126 80E2 ldi R24,32
0128 80938900 sts _DiskFATInfo+14,R24
012C .dbline 42
012C ; FAT_MASK = FAT32_MASK;
012C 4FEF ldi R20,255
012E 5FEF ldi R21,255
0130 6FEF ldi R22,255
0132 7FE0 ldi R23,15
0134 50939300 sts _FAT_MASK+1,R21
0138 40939200 sts _FAT_MASK,R20
013C 70939500 sts _FAT_MASK+2+1,R23
0140 60939400 sts _FAT_MASK+2,R22
0144 .dbline 43
0144 ; break;
0144 0FC0 xjmp L18
0146 L23:
0146 .dbline 45
0146 ; case 0x31:
0146 ; DiskFATInfo.FAT_Style = 16;
0146 80E1 ldi R24,16
0148 80938900 sts _DiskFATInfo+14,R24
014C .dbline 46
014C ; FAT_MASK = FAT16_MASK;
014C 4FEF ldi R20,255
014E 5FEF ldi R21,255
0150 60E0 ldi R22,0
0152 70E0 ldi R23,0
0154 50939300 sts _FAT_MASK+1,R21
0158 40939200 sts _FAT_MASK,R20
015C 70939500 sts _FAT_MASK+2+1,R23
0160 60939400 sts _FAT_MASK+2,R22
0164 .dbline 47
0164 ; break;
0164 L17:
0164 L18:
0164 .dbline 50
0164 ;
0164 ; }
0164 ; }
0164 L3:
0164 .dbline 51
0164 ; SD_ReadBlock(DiskFATInfo.DBR_LBA,Fat_Buffer);
0164 80E0 ldi R24,<_Fat_Buffer
0166 90E0 ldi R25,>_Fat_Buffer
0168 9983 std y+1,R25
016A 8883 std y+0,R24
016C 20917D00 lds R18,_DiskFATInfo+2
0170 30917E00 lds R19,_DiskFATInfo+2+1
0174 00917B00 lds R16,_DiskFATInfo
0178 10917C00 lds R17,_DiskFATInfo+1
017C 0E940000 xcall _SD_ReadBlock
0180 .dbline 52
0180 ; DiskFATInfo.BytesPerSector = Fat_Buffer[0x0B] |(Fat_Buffer[0x0C] << 8);
0180 2090A600 lds R2,_Fat_Buffer+12
0184 3324 clr R3
0186 322C mov R3,R2
0188 2224 clr R2
018A 4090A500 lds R4,_Fat_Buffer+11
018E 5524 clr R5
0190 4228 or R4,R2
0192 5328 or R5,R3
0194 50928B00 sts _DiskFATInfo+15+1,R5
0198 40928A00 sts _DiskFATInfo+15,R4
019C .dbline 53
019C ; DiskFATInfo.SectorsPerClustor = Fat_Buffer[0x0D];
019C 2090A700 lds R2,_Fat_Buffer+13
01A0 20928C00 sts _DiskFATInfo+17,R2
01A4 .dbline 56
01A4 ;
01A4 ;
01A4 ; DiskFATInfo.NumOfFATs = Fat_Buffer[0x10] |(Fat_Buffer[0x11] << 8);
01A4 2090AB00 lds R2,_Fat_Buffer+17
01A8 3324 clr R3
01AA 322C mov R3,R2
01AC 2224 clr R2
01AE 4090AA00 lds R4,_Fat_Buffer+16
01B2 5524 clr R5
01B4 4228 or R4,R2
01B6 5328 or R5,R3
01B8 40928D00 sts _DiskFATInfo+18,R4
01BC .dbline 59
01BC ;
01BC ;
01BC ; DiskFATInfo.SectorsPerFAT = Fat_Buffer[0x24] |Fat_Buffer[0x25] << 8|(uint32)Fat_Buffer[0x26]<<16|(uint32)Fat_Buffer[0x27]<<24;
01BC 2090BF00 lds R2,_Fat_Buffer+37
01C0 3324 clr R3
01C2 322C mov R3,R2
01C4 2224 clr R2
01C6 4090BE00 lds R4,_Fat_Buffer+36
01CA 5524 clr R5
01CC 4228 or R4,R2
01CE 5328 or R5,R3
01D0 1201 movw R2,R4
01D2 4424 clr R4
01D4 37FC sbrc R3,7
01D6 4094 com R4
01D8 5524 clr R5
01DA 47FC sbrc R4,7
01DC 5094 com R5
01DE 6090C000 lds R6,_Fat_Buffer+38
01E2 7724 clr R7
01E4 8824 clr R8
01E6 9924 clr R9
01E8 4301 movw R8,R6
01EA 6624 clr R6
01EC 7724 clr R7
01EE 2628 or R2,R6
01F0 3728 or R3,R7
01F2 4828 or R4,R8
01F4 5928 or R5,R9
01F6 88E1 ldi R24,24
01F8 90E0 ldi R25,0
01FA 6090C100 lds R6,_Fat_Buffer+39
01FE 7724 clr R7
0200 8824 clr R8
0202 9924 clr R9
0204 8A93 st -y,R24
0206 8301 movw R16,R6
0208 9401 movw R18,R8
020A 0E940000 xcall lsl32
020E 202A or R2,R16
0210 312A or R3,R17
0212 422A or R4,R18
0214 532A or R5,R19
0216 30928F00 sts _DiskFATInfo+19+1,R3
021A 20928E00 sts _DiskFATInfo+19,R2
021E 50929100 sts _DiskFATInfo+19+2+1,R5
0222 40929000 sts _DiskFATInfo+19+2,R4
0226 .dbline 62
0226 ;
0226 ;
0226 ; DiskFATInfo.FAT_LBA = DiskFATInfo.DBR_LBA + (Fat_Buffer[0x0E]|Fat_Buffer[0x0F]<<8);
0226 2090A900 lds R2,_Fat_Buffer+15
022A 3324 clr R3
022C 322C mov R3,R2
022E 2224 clr R2
0230 4090A800 lds R4,_Fat_Buffer+14
0234 5524 clr R5
0236 4228 or R4,R2
0238 5328 or R5,R3
023A 1201 movw R2,R4
023C 4424 clr R4
023E 37FC sbrc R3,7
0240 4094 com R4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -