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

📄 fat16.lis

📁 AVR单片机做的MP3
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module fat16.c
                        .area data(ram, con, rel)
 0000           _vol:
 0000                   .blkb 2
                        .area idata
 0000 0A0A              .word 2570
                        .area data(ram, con, rel)
 0002                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 0002                   .dbsym s vol _vol i
 0002           _fileindex:
 0002                   .blkb 2
                        .area idata
 0002 0000              .word 0
                        .area data(ram, con, rel)
 0004                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 0004                   .dbsym s fileindex _fileindex i
 0004           _flag:
 0004                   .blkb 1
                        .area idata
 0004 01                .byte 1
                        .area data(ram, con, rel)
 0005                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 0005                   .dbsym s flag _flag c
 0005           _keyflag:
 0005                   .blkb 1
                        .area idata
 0005 00                .byte 0
                        .area data(ram, con, rel)
 0006                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 0006                   .dbsym s keyflag _keyflag c
 0006           _longfileflag:
 0006                   .blkb 1
                        .area idata
 0006 00                .byte 0
                        .area data(ram, con, rel)
 0007                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 0007                   .dbsym s longfileflag _longfileflag c
 0007           _volume:
 0007                   .blkb 2
                        .area idata
 0007 3530              .byte 53,48
                        .area data(ram, con, rel)
 0009                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 0009                   .dbsym s volume _volume A[2:2]c
 0009           _timecount:
 0009                   .blkb 1
                        .area idata
 0009 00                .byte 0
                        .area data(ram, con, rel)
 000A                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 000A                   .dbsym s timecount _timecount c
 000A           _zero::
 000A                   .blkb 1
                        .area idata
 000A 00                .byte 0
                        .area data(ram, con, rel)
 000B                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 000B                   .blkb 31
                        .area idata
 000B 00000000000000000000      .word 0,0,0,0,0
 0015 00000000000000000000      .word 0,0,0,0,0
 001F 00000000000000000000      .word 0,0,0,0,0
 0029 00                .byte 0
                        .area data(ram, con, rel)
 002A                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 002A                   .dbsym e zero _zero A[32:32]c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 0000                   .dbfunc e FAT_Init _FAT_Init fV
                        .even
 0000           _FAT_Init::
 0000                   .dbline -1
 0000                   .dbline 48
 0000           ; #include<iom16v.h>
 0000           ; #include<main.h>
 0000           ; #include<fat16.h>
 0000           ; #include<12232.h>
 0000           ; #include<sd.h>
 0000           ; #include<vs1003.h>
 0000           ; extern uint8 BUFFER[512];
 0000           ; extern zikustart;
 0000           ; static uint16 unicodestart;
 0000           ; static uint16 vol=0x0a0a;
 0000           ; static uint16 fileindex=0;
 0000           ; static DIR fileid;
 0000           ; static uint8 flag=1;
 0000           ; static uint8 keyflag=0;
 0000           ; static uint8 longfileflag=0;
 0000           ; static uint8 volume[2]="50";
 0000           ; volatile static uint8  timecount=0;
 0000           ; 
 0000           ; unsigned char zero[32]={0};
 0000           ; typedef struct
 0000           ; {
 0000           ;       uint16 m;
 0000           ;       uint16 ClusID;
 0000           ;       uint32 i;
 0000           ;       uint32 LBA;
 0000           ; } FATFileIndex;
 0000           ; static FATFileIndex    FileIndex;        //当前打开的文件
 0000           ; uint8                  BPB_SecPerClus;
 0000           ; static uint16          BPB_RsvdSecCnt;
 0000           ; static uint8           BPB_NumFATs;
 0000           ; static uint16          BPB_RootEntCnt;
 0000           ; static uint16          BPB_TotSec16;
 0000           ; static uint16          BPB_FATSz16;
 0000           ; static uint32          BPB_HiddSec;
 0000           ; 
 0000           ; void     ReadBlock        (uint32 LBA);
 0000           ; void     WriteBlock       (uint32 LBA);
 0000           ; static   uint8    IsEqual          (void* A, void* B, uint8 Size);
 0000           ; static uint8 Ismp3(void* A);
 0000           ; void     ReadBPB          (void);
 0000           ; static uint32   ClusConvLBA      (uint16 ClusID);
 0000           ; uint16   ReadFAT          (uint16 Index);
 0000           ; static uint16    GetNextmp3(void);
 0000           ; static uint8 GetFileID(uint8 Name[11],DIR* ID);
 0000           ; void show(uint8 filename[2],uint8 location,uint8 loca);
 0000           ; 
 0000           ; void FAT_Init(void)
 0000           ; {
 0000                   .dbline 49
 0000           ;       ReadBPB();
 0000 80D0              rcall _ReadBPB
 0002                   .dbline -2
 0002           L5:
 0002                   .dbline 0 ; func end
 0002 0895              ret
 0004                   .dbend
 0004                   .dbfunc e SD_SPI_HIGH _SD_SPI_HIGH fV
                        .even
 0004           _SD_SPI_HIGH::
 0004                   .dbline -1
 0004                   .dbline 53
 0004           ; }
 0004           ; 
 0004           ; void SD_SPI_HIGH(void)
 0004           ; {
 0004                   .dbline 54
 0004           ;    SPCR=(1<<SPE)|(1<<MSTR);
 0004 80E5              ldi R24,80
 0006 8DB9              out 0xd,R24
 0008                   .dbline 55
 0008           ;    SPSR|= (1<<SPI2X);
 0008 709A              sbi 0xe,0
 000A                   .dbline -2
 000A           L6:
 000A                   .dbline 0 ; func end
 000A 0895              ret
 000C                   .dbend
 000C                   .dbfunc e ReadBlock _ReadBlock fV
 000C           ;            LBA -> y+2
                        .even
 000C           _ReadBlock::
 000C 00D0              rcall push_arg4
 000E 2297              sbiw R28,2
 0010                   .dbline -1
 0010                   .dbline 61
 0010           ; }
 0010           ; //********************************************************************************************
 0010           ; //读一个扇区
 0010           ; void ReadBlock(uint32 LBA)
 0010           ; //********************************************************************************************
 0010           ; {
 0010                   .dbline 62
 0010           ;       SD_read_sector(LBA, BUFFER);
 0010 80E0              ldi R24,<_BUFFER
 0012 90E0              ldi R25,>_BUFFER
 0014 9983              std y+1,R25
 0016 8883              std y+0,R24
 0018 FE01              movw R30,R28
 001A 0281              ldd R16,z+2
 001C 1381              ldd R17,z+3
 001E 2481              ldd R18,z+4
 0020 3581              ldd R19,z+5
 0022 00D0              rcall _SD_read_sector
 0024                   .dbline -2
 0024           L7:
 0024 2696              adiw R28,6
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym l LBA 2 l
 0028                   .dbend
 0028                   .dbfunc e WriteBlock _WriteBlock fV
 0028           ;            LBA -> y+2
                        .even
 0028           _WriteBlock::
 0028 00D0              rcall push_arg4
 002A 2297              sbiw R28,2
 002C                   .dbline -1
 002C                   .dbline 68
 002C           ; }
 002C           ; 
 002C           ; //********************************************************************************************
 002C           ; void WriteBlock(uint32 LBA)
 002C           ; //********************************************************************************************
 002C           ; {
 002C                   .dbline 69
 002C           ;       SD_write_sector(LBA , BUFFER);
 002C 80E0              ldi R24,<_BUFFER
 002E 90E0              ldi R25,>_BUFFER
 0030 9983              std y+1,R25
 0032 8883              std y+0,R24
 0034 FE01              movw R30,R28
 0036 0281              ldd R16,z+2
 0038 1381              ldd R17,z+3
 003A 2481              ldd R18,z+4
 003C 3581              ldd R19,z+5
 003E 00D0              rcall _SD_write_sector
 0040                   .dbline -2
 0040           L8:
 0040 2696              adiw R28,6
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbsym l LBA 2 l
 0044                   .dbend
 0044                   .dbfunc s 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 00D0              rcall push_gset4
 0046 C884              ldd R12,y+8
 0048                   .dbline -1
 0048                   .dbline 75
 0048           ; }
 0048           ; 
 0048           ; //********************************************************************************************
 0048           ; static uint8 IsEqual(void* A, void* B, uint8 Size)
 0048           ; //********************************************************************************************
 0048           ; {
 0048                   .dbline 76
 0048           ;       uint8 i, *a = A, *b = B;
 0048 B801              movw R22,R16
 004A                   .dbline 76
 004A A901              movw R20,R18
 004C                   .dbline 77
 004C           ;       for(i = 0; i < Size; i++)
 004C AA24              clr R10
 004E 0FC0              rjmp L13
 0050           L10:
 0050                   .dbline 78
 0050           ;       {
 0050                   .dbline 79
 0050           ;               if((a[i] != b[i]))
 0050 EA2D              mov R30,R10
 0052 FF27              clr R31
 0054 E40F              add R30,R20
 0056 F51F              adc R31,R21
 0058 2080              ldd R2,z+0
 005A EA2D              mov R30,R10
 005C FF27              clr R31
 005E E60F              add R30,R22
 0060 F71F              adc R31,R23
 0062 3080              ldd R3,z+0
 0064 3214              cp R3,R2
 0066 11F0              breq L14
 0068                   .dbline 80
 0068           ;                       return 0;
 0068 0027              clr R16
 006A 04C0              rjmp L9
 006C           L14:
 006C                   .dbline 81
 006C           L11:
 006C                   .dbline 77
 006C A394              inc R10
 006E           L13:
 006E                   .dbline 77
 006E AC14              cp R10,R12
 0070 78F3              brlo L10
 0072                   .dbline 82
 0072           ;       }
 0072           ;       return 1;
 0072 01E0              ldi R16,1
 0074                   .dbline -2
 0074           L9:
 0074 00D0              rcall pop_gset4
 0076                   .dbline 0 ; func end
 0076 0895              ret
 0078                   .dbsym r b 20 pc
 0078                   .dbsym r a 22 pc
 0078                   .dbsym r i 10 c
 0078                   .dbsym r Size 12 c
 0078                   .dbsym r B 18 pV
 0078                   .dbsym r A 16 pV
 0078                   .dbend
                        .area lit(rom, con, rel)
 0000           L17:
 0000 4D5033            .byte 'M,'P,51
 0003           L18:
 0003 574D41            .byte 'W,'M,'A
                        .area text(rom, con, rel)
 0078                   .dbfile D:\ICCFIL~1\五键MP3ICC\fat16.c
 0078                   .dbfunc s Ismp3 _Ismp3 fc
 0078           ;              c -> y+3
 0078           ;              b -> y+0
 0078           ;              a -> R20,R21
 0078           ;              i -> R22
 0078           ;              A -> R22,R23
                        .even
 0078           _Ismp3:
 0078 00D0              rcall push_gset2
 007A B801              movw R22,R16
 007C 2697              sbiw R28,6
 007E                   .dbline -1
 007E                   .dbline 85
 007E           ; }
 007E           ; static uint8 Ismp3(void* A)
 007E           ; {
 007E                   .dbline 86
 007E           ;  uint8 i,*a=A;
 007E AB01              movw R20,R22
 0080                   .dbline 87
 0080           ;  uint8 b[3]="MP3";
 0080 80E0              ldi R24,<L17
 0082 90E0              ldi R25,>L17
 0084 FE01              movw R30,R28
 0086 03E0              ldi R16,3
 0088 10E0              ldi R17,0
 008A FA93              st -y,R31
 008C EA93              st -y,R30
 008E 9A93              st -y,R25
 0090 8A93              st -y,R24
 0092 00D0              rcall asgncblk
 0094                   .dbline 88
 0094           ;  uint8 c[3]="WMA";
 0094 80E0              ldi R24,<L18
 0096 90E0              ldi R25,>L18
 0098 FE01              movw R30,R28
 009A 3396              adiw R30,3
 009C 03E0              ldi R16,3
 009E 10E0              ldi R17,0

⌨️ 快捷键说明

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