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

📄 fat.lis

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module fat.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\桌面\mp3\FAT\fat.c
 0000                   .dbfunc e FAT_Init _FAT_Init fV
                        .even
 0000           _FAT_Init::
 0000                   .dbline -1
 0000                   .dbline 23
 0000           ; 
 0000           ; 
 0000           ; #include "config.h"
 0000           ; 
 0000           ; 
 0000           ; uint8 FAT_ReadBlock(uint32 LBA);
 0000           ; uint8 FAT_WriteBlock(uint32 LBA);
 0000           ; uint8 IsEqual(void* A, void* B, uint8 Size);
 0000           ; void ReadBPB(void);
 0000           ; uint32 ClusConvLBA(uint16 ClusID);
 0000           ; uint16 FAT_ReadFAT(uint16 Index);
 0000           ; uint8 GetFileID(uint8 Name[11], DIR* ID);
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; static uint8    BUFFER[512];
 0000           ; static FileSystemInfo  Info;
 0000           ; static FATFileIndex     FileIndex;
 0000           ; //******************************************************************************************** 
 0000           ; //初始化驱动,建立必要数据结构 
 0000           ; //void FAT_Init(void); 
 0000           ; //******************************************************************************************** 
 0000           ; void FAT_Init(void) {
 0000                   .dbline 24
 0000           ;         ReadBPB();
 0000 39D0              xcall _ReadBPB
 0002                   .dbline -2
 0002           L7:
 0002                   .dbline 0 ; func end
 0002 0895              ret
 0004                   .dbend
 0004                   .dbfunc e FAT_ReadBlock _FAT_ReadBlock fc
 0004           ;            LBA -> y+2
                        .even
 0004           _FAT_ReadBlock::
 0004 0E940000          xcall push_arg4
 0008 2297              sbiw R28,2
 000A                   .dbline -1
 000A                   .dbline 30
 000A           ; }
 000A           ; 
 000A           ; //********************************************************************************************  
 000A           ; //读一个扇区  
 000A           ; //******************************************************************************************** 
 000A           ; uint8 FAT_ReadBlock(uint32 LBA) {
 000A                   .dbline 31
 000A           ;         return(MMC_Read_Sector(LBA , BUFFER));
 000A 80E0              ldi R24,<_BUFFER
 000C 90E0              ldi R25,>_BUFFER
 000E 9983              std y+1,R25
 0010 8883              std y+0,R24
 0012 FE01              movw R30,R28
 0014 0281              ldd R16,z+2
 0016 1381              ldd R17,z+3
 0018 2481              ldd R18,z+4
 001A 3581              ldd R19,z+5
 001C 0E940000          xcall _MMC_Read_Sector
 0020                   .dbline -2
 0020           L8:
 0020 2696              adiw R28,6
 0022                   .dbline 0 ; func end
 0022 0895              ret
 0024                   .dbsym l LBA 2 l
 0024                   .dbend
 0024                   .dbfunc e FAT_WriteBlock _FAT_WriteBlock fc
 0024           ;            LBA -> y+2
                        .even
 0024           _FAT_WriteBlock::
 0024 0E940000          xcall push_arg4
 0028 2297              sbiw R28,2
 002A                   .dbline -1
 002A                   .dbline 38
 002A           ; }
 002A           ; //********************************************************************************************  
 002A           ; //写一个扇区  
 002A           ; //********************************************************************************************  
 002A           ; 
 002A           ; uint8 FAT_WriteBlock(uint32 LBA) 
 002A           ; {
 002A                   .dbline 39
 002A           ;         return(MMC_Write_Sector(LBA, BUFFER));
 002A 80E0              ldi R24,<_BUFFER
 002C 90E0              ldi R25,>_BUFFER
 002E 9983              std y+1,R25
 0030 8883              std y+0,R24
 0032 FE01              movw R30,R28
 0034 0281              ldd R16,z+2
 0036 1381              ldd R17,z+3
 0038 2481              ldd R18,z+4
 003A 3581              ldd R19,z+5
 003C 0E940000          xcall _MMC_Write_Sector
 0040                   .dbline -2
 0040           L9:
 0040 2696              adiw R28,6
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbsym l LBA 2 l
 0044                   .dbend
 0044                   .dbfunc e IsEqual _IsEqual fc
 0044           ;              b -> R20,R21
 0044           ;              a -> R22,R23
 0044           ;              i -> R10
 0044           ;           Size -> R12
 0044           ;              B -> R18,R19
 0044           ;              A -> R16,R17
                        .even
 0044           _IsEqual::
 0044 0E940000          xcall push_gset4
 0048 C884              ldd R12,y+8
 004A                   .dbline -1
 004A                   .dbline 43
 004A           ; }
 004A           ; 
 004A           ; uint8 IsEqual(void* A, void* B, uint8 Size) 
 004A           ; {
 004A                   .dbline 44
 004A           ;         uint8 i, *a = A, *b = B;
 004A B801              movw R22,R16
 004C                   .dbline 44
 004C A901              movw R20,R18
 004E                   .dbline 45
 004E           ;         for(i = 0; i < Size; i++)
 004E AA24              clr R10
 0050 0BC0              xjmp L14
 0052           L11:
 0052                   .dbline 46
 0052           ;                 if(*a++!= *b++)
 0052 FA01              movw R30,R20
 0054 2190              ld R2,Z+
 0056 AF01              movw R20,R30
 0058 FB01              movw R30,R22
 005A 3190              ld R3,Z+
 005C BF01              movw R22,R30
 005E 3214              cp R3,R2
 0060 11F0              breq L15
 0062                   .dbline 47
 0062           ;                         return FALSE;
 0062 0027              clr R16
 0064 04C0              xjmp L10
 0066           L15:
 0066           L12:
 0066                   .dbline 45
 0066 A394              inc R10
 0068           L14:
 0068                   .dbline 45
 0068 AC14              cp R10,R12
 006A 98F3              brlo L11
 006C                   .dbline 48
 006C           ;         return TRUE;
 006C 01E0              ldi R16,1
 006E                   .dbline -2
 006E           L10:
 006E 0E940000          xcall pop_gset4
 0072                   .dbline 0 ; func end
 0072 0895              ret
 0074                   .dbsym r b 20 pc
 0074                   .dbsym r a 22 pc
 0074                   .dbsym r i 10 c
 0074                   .dbsym r Size 12 c
 0074                   .dbsym r B 18 pV
 0074                   .dbsym r A 16 pV
 0074                   .dbend
 0074                   .dbfunc e ReadBPB _ReadBPB fV
 0074                   .dbstruct 0 512 .3
 0074                   .dbfield 0 BS_jmpBoot A[3:3]c
 0074                   .dbfield 3 BS_OEMName A[8:8]c
 0074                   .dbfield 11 BPB_BytesPerSec i
 0074                   .dbfield 13 BPB_SecPerClus c
 0074                   .dbfield 14 BPB_RsvdSecCnt i
 0074                   .dbfield 16 BPB_NumFATs c
 0074                   .dbfield 17 BPB_RootEntCnt i
 0074                   .dbfield 19 BPB_TotSec16 i
 0074                   .dbfield 21 BPB_Media c
 0074                   .dbfield 22 BPB_FATSz16 i
 0074                   .dbfield 24 BPB_SecPerTrk i
 0074                   .dbfield 26 BPB_NumHeads i
 0074                   .dbfield 28 BPB_HiddSec l
 0074                   .dbfield 32 BPB_TotSec32 l
 0074                   .dbfield 36 BS_DrvNum c
 0074                   .dbfield 37 BS_Reservedl c
 0074                   .dbfield 38 BS_BootSig c
 0074                   .dbfield 39 BS_VolID l
 0074                   .dbfield 43 BS_VolLab A[11:11]c
 0074                   .dbfield 54 BS_FilSysType A[8:8]c
 0074                   .dbfield 62 ExecutableCode A[448:448]c
 0074                   .dbfield 510 ExecutableMarker A[2:2]c
 0074                   .dbend
 0074           ;            BPB -> R10,R11
                        .even
 0074           _ReadBPB::
 0074 0E940000          xcall push_gset3
 0078                   .dbline -1
 0078                   .dbline 56
 0078           ; }
 0078           ; //********************************************************************************************  
 0078           ; //读取BPB数据结构  
 0078           ; //static void ReadBPB(void)  
 0078           ; //********************************************************************************************  
 0078           ; 
 0078           ; void ReadBPB(void) 
 0078           ; {
 0078                   .dbline 57
 0078           ;         FAT_BPB* BPB = (FAT_BPB*)BUFFER;
 0078 80E0              ldi R24,<_BUFFER
 007A 90E0              ldi R25,>_BUFFER
 007C 5C01              movw R10,R24
 007E                   .dbline 58
 007E           ;         FAT_ReadBlock(0);
 007E 00E0              ldi R16,0
 0080 10E0              ldi R17,0
 0082 20E0              ldi R18,0
 0084 30E0              ldi R19,0
 0086 BEDF              xcall _FAT_ReadBlock
 0088                   .dbline 61
 0088           ; 
 0088           ;         //缓存相关参数
 0088           ;         Info.BPB_SecPerClus     =   BPB->BPB_SecPerClus;
 0088 F501              movw R30,R10
 008A 2584              ldd R2,z+13
 008C 20920C00          sts _Info,R2
 0090                   .dbline 62
 0090           ;         Info.BPB_RsvdSecCnt     =   BPB->BPB_RsvdSecCnt;
 0090 F501              movw R30,R10
 0092 2684              ldd R2,z+14
 0094 3784              ldd R3,z+15
 0096 30920E00          sts _Info+1+1,R3
 009A 20920D00          sts _Info+1,R2
 009E                   .dbline 63
 009E           ;         Info.BPB_NumFATs        =   BPB->BPB_NumFATs;
 009E F501              movw R30,R10
 00A0 2088              ldd R2,z+16
 00A2 20920F00          sts _Info+3,R2
 00A6                   .dbline 64
 00A6           ;         Info.BPB_RootEntCnt     =   BPB->BPB_RootEntCnt;
 00A6 F501              movw R30,R10
 00A8 2188              ldd R2,z+17
 00AA 3288              ldd R3,z+18
 00AC 30921100          sts _Info+4+1,R3
 00B0 20921000          sts _Info+4,R2
 00B4                   .dbline 65
 00B4           ;         Info.BPB_TotSec16       =   BPB->BPB_TotSec16;
 00B4 F501              movw R30,R10
 00B6 2388              ldd R2,z+19
 00B8 3488              ldd R3,z+20
 00BA 30921300          sts _Info+6+1,R3
 00BE 20921200          sts _Info+6,R2
 00C2                   .dbline 66
 00C2           ;         Info.BPB_FATSz16        =   BPB->BPB_FATSz16;
 00C2 F501              movw R30,R10
 00C4 2688              ldd R2,z+22
 00C6 3788              ldd R3,z+23
 00C8 30921500          sts _Info+8+1,R3
 00CC 20921400          sts _Info+8,R2
 00D0                   .dbline 67
 00D0           ;         Info.BPB_HiddSec        =   BPB->BPB_HiddSec;
 00D0 F501              movw R30,R10
 00D2 248C              ldd R2,z+28
 00D4 358C              ldd R3,z+29
 00D6 468C              ldd R4,z+30
 00D8 578C              ldd R5,z+31
 00DA 30921700          sts _Info+10+1,R3
 00DE 20921600          sts _Info+10,R2
 00E2 50921900          sts _Info+10+2+1,R5
 00E6 40921800          sts _Info+10+2,R4
 00EA                   .dbline 69
 00EA           ; 
 00EA           ;     Info.DirStartSec        =   Info.BPB_RsvdSecCnt + Info.BPB_NumFATs * Info.BPB_FATSz16;  //获取根目录开始扇区号  
 00EA 20911400          lds R18,_Info+8
 00EE 30911500          lds R19,_Info+8+1
 00F2 00910F00          lds R16,_Info+3
 00F6 1127              clr R17
 00F8 0E940000          xcall empy16s
 00FC 20900D00          lds R2,_Info+1
 0100 30900E00          lds R3,_Info+1+1
 0104 200E              add R2,R16
 0106 311E              adc R3,R17
 0108 4424              clr R4
 010A 5524              clr R5
 010C 30921B00          sts _Info+14+1,R3
 0110 20921A00          sts _Info+14,R2
 0114 50921D00          sts _Info+14+2+1,R5
 0118 40921C00          sts _Info+14+2,R4
 011C                   .dbline 70
 011C           ;     Info.DataStartSec       =   Info.DirStartSec + Info.BPB_RootEntCnt * 32 / 512;          //获取数据区开始扇区号  
 011C 20911000          lds R18,_Info+4
 0120 30911100          lds R19,_Info+4+1
 0124 00E2              ldi R16,32
 0126 10E0              ldi R17,0
 0128 0E940000          xcall empy16s
 012C 29E0              ldi R18,9
 012E 30E0              ldi R19,0
 0130 0E940000          xcall lsr16
 0134 1801              movw R2,R16
 0136 4424              clr R4
 0138 5524              clr R5
 013A 80901C00          lds R8,_Info+14+2
 013E 90901D00          lds R9,_Info+14+2+1
 0142 60901A00          lds R6,_Info+14
 0146 70901B00          lds R7,_Info+14+1
 014A 620C              add R6,R2
 014C 731C              adc R7,R3
 014E 841C              adc R8,R4
 0150 951C              adc R9,R5
 0152 70921F00          sts _Info+18+1,R7
 0156 60921E00          sts _Info+18,R6
 015A 90922100          sts _Info+18+2+1,R9
 015E 80922000          sts _Info+18+2,R8
 0162                   .dbline 71
 0162           ;     Info.DirSecCount        =   Info.BPB_RootEntCnt * 32 / 512;                                                       //目录项占用的扇区数  
 0162 20911000          lds R18,_Info+4
 0166 30911100          lds R19,_Info+4+1
 016A 00E2              ldi R16,32
 016C 10E0              ldi R17,0
 016E 0E940000          xcall empy16s
 0172 29E0              ldi R18,9
 0174 30E0              ldi R19,0
 0176 0E940000          xcall lsr16
 017A 10932300          sts _Info+22+1,R17
 017E 00932200          sts _Info+22,R16
 0182                   .dbline -2
 0182           L17:
 0182 0E940000          xcall pop_gset3
 0186                   .dbline 0 ; func end
 0186 0895              ret
 0188                   .dbsym r BPB 10 pS[.3]
 0188                   .dbend
 0188                   .dbfunc e ClusConvLBA _ClusConvLBA fl
 0188           ;         ClusID -> R10,R11
                        .even
 0188           _ClusConvLBA::
 0188 0E940000          xcall push_gset3

⌨️ 快捷键说明

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