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

📄 fat.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -