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

📄 fat.lis

📁 采用Mega16+VS1011B+SD卡制作的Mp3
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0544 4282              std z+2,R4
 0546 5382              std z+3,R5
 0548                   .dbline 132
 0548           ;                       }
 0548           L27:
 0548                   .dbline 133
 0548           ;               }
 0548           L21:
 0548                   .dbline 134
 0548           ;               if(*Block == 0xFFF)
 0548 4FEF              ldi R20,255
 054A 5FE0              ldi R21,15
 054C 60E0              ldi R22,0
 054E 70E0              ldi R23,0
 0550 F501              movw R30,R10
 0552 2080              ldd R2,z+0
 0554 3180              ldd R3,z+1
 0556 4280              ldd R4,z+2
 0558 5380              ldd R5,z+3
 055A 2416              cp R2,R20
 055C 3506              cpc R3,R21
 055E 4606              cpc R4,R22
 0560 5706              cpc R5,R23
 0562 09F0              breq X22
 0564 BAC0              xjmp L9
 0566           X22:
 0566           X15:
 0566                   .dbline 135
 0566           ;                       *Block = 0xFFFFFFFF;
 0566 4FEF              ldi R20,255
 0568 5FEF              ldi R21,255
 056A 6FEF              ldi R22,255
 056C 7FEF              ldi R23,255
 056E 4083              std z+0,R20
 0570 5183              std z+1,R21
 0572 6283              std z+2,R22
 0574 7383              std z+3,R23
 0576                   .dbline 136
 0576           ;       }
 0576 B1C0              xjmp L9
 0578           L16:
 0578                   .dbline 137
 0578           ;       else if(FatFlags == FAT_Flg_32)
 0578 80910F00          lds R24,_FatFlags
 057C 8230              cpi R24,2
 057E 09F0              breq X23
 0580 ACC0              xjmp L9
 0582           X23:
 0582           X16:
 0582                   .dbline 138
 0582           ;       {
 0582                   .dbline 140
 0582           ;               unsigned long Tmp;
 0582           ;               Tmp=Cluster/128;
 0582 87E0              ldi R24,7
 0584 90E0              ldi R25,0
 0586 0C89              ldd R16,y+20
 0588 1D89              ldd R17,y+21
 058A 2E89              ldd R18,y+22
 058C 3F89              ldd R19,y+23
 058E 8A93              st -y,R24
 0590 0E940000          xcall lsr32
 0594 0E83              std y+6,R16
 0596 1F83              std y+7,R17
 0598 2887              std y+8,R18
 059A 3987              std y+9,R19
 059C                   .dbline 141
 059C           ;               if(Cluster == 0xFFFFFFFF)
 059C 4FEF              ldi R20,255
 059E 5FEF              ldi R21,255
 05A0 6FEF              ldi R22,255
 05A2 7FEF              ldi R23,255
 05A4 2C88              ldd R2,y+20
 05A6 3D88              ldd R3,y+21
 05A8 4E88              ldd R4,y+22
 05AA 5F88              ldd R5,y+23
 05AC 2416              cp R2,R20
 05AE 3506              cpc R3,R21
 05B0 4606              cpc R4,R22
 05B2 5706              cpc R5,R23
 05B4 51F4              brne L32
 05B6           X17:
 05B6                   .dbline 142
 05B6           ;               {
 05B6                   .dbline 143
 05B6           ;                       *Block = 0xFFFFFFFF;
 05B6 4FEF              ldi R20,255
 05B8 5FEF              ldi R21,255
 05BA 6FEF              ldi R22,255
 05BC 7FEF              ldi R23,255
 05BE F501              movw R30,R10
 05C0 4083              std z+0,R20
 05C2 5183              std z+1,R21
 05C4 6283              std z+2,R22
 05C6 7383              std z+3,R23
 05C8                   .dbline 144
 05C8           ;                       return; //文件已经到达末尾
 05C8 88C0              xjmp L9
 05CA           L32:
 05CA                   .dbline 147
 05CA           ;               }
 05CA           ;               
 05CA           ;                  FAT_Byte_Addresse = (Cluster*4)%512;
 05CA 82E0              ldi R24,2
 05CC 90E0              ldi R25,0
 05CE 0C89              ldd R16,y+20
 05D0 1D89              ldd R17,y+21
 05D2 2E89              ldd R18,y+22
 05D4 3F89              ldd R19,y+23
 05D6 8A93              st -y,R24
 05D8 0E940000          xcall lsl32
 05DC 1801              movw R2,R16
 05DE 2901              movw R4,R18
 05E0 4FEF              ldi R20,255
 05E2 51E0              ldi R21,1
 05E4 60E0              ldi R22,0
 05E6 70E0              ldi R23,0
 05E8 2422              and R2,R20
 05EA 3522              and R3,R21
 05EC 4622              and R4,R22
 05EE 5722              and R5,R23
 05F0 7101              movw R14,R2
 05F2                   .dbline 148
 05F2           ;                  FAT_Block_Addresse = Tmp + fat_offset ;
 05F2 40901600          lds R4,_fat_offset+2
 05F6 50901700          lds R5,_fat_offset+2+1
 05FA 20901400          lds R2,_fat_offset
 05FE 30901500          lds R3,_fat_offset+1
 0602 6E80              ldd R6,y+6
 0604 7F80              ldd R7,y+7
 0606 8884              ldd R8,y+8
 0608 9984              ldd R9,y+9
 060A 620C              add R6,R2
 060C 731C              adc R7,R3
 060E 841C              adc R8,R4
 0610 951C              adc R9,R5
 0612 6A82              std y+2,R6
 0614 7B82              std y+3,R7
 0616 8C82              std y+4,R8
 0618 9D82              std y+5,R9
 061A                   .dbline 150
 061A           ;                  
 061A           ;               MMC_SD_ReadSingleBlock (FAT_Block_Addresse,TMP_Buffer);
 061A D982              std y+1,R13
 061C C882              std y+0,R12
 061E 0A81              ldd R16,y+2
 0620 1B81              ldd R17,y+3
 0622 2C81              ldd R18,y+4
 0624 3D81              ldd R19,y+5
 0626 0E940000          xcall _MMC_SD_ReadSingleBlock
 062A                   .dbline 158
 062A           ;               //测试使用:
 062A           ;               //DisplayHexNum(1,1,TMP_Buffer[FAT_Byte_Addresse+3]);
 062A           ;               //DisplayHexNum(2,1,TMP_Buffer[FAT_Byte_Addresse+2]);
 062A           ;               //DisplayHexNum(3,1,TMP_Buffer[FAT_Byte_Addresse+1]);
 062A           ;               //DisplayHexNum(4,1,TMP_Buffer[FAT_Byte_Addresse]);
 062A           ;               //Delay(1000);
 062A           ;               //
 062A           ;               *Block = (TMP_Buffer[FAT_Byte_Addresse+3]*(unsigned long)16777216) +
 062A F701              movw R30,R14
 062C 3296              adiw R30,2
 062E EC0D              add R30,R12
 0630 FD1D              adc R31,R13
 0632 2080              ldd R2,z+0
 0634 3324              clr R3
 0636 4424              clr R4
 0638 5524              clr R5
 063A 40E0              ldi R20,0
 063C 50E0              ldi R21,0
 063E 61E0              ldi R22,1
 0640 70E0              ldi R23,0
 0642 5A92              st -y,R5
 0644 4A92              st -y,R4
 0646 3A92              st -y,R3
 0648 2A92              st -y,R2
 064A 8A01              movw R16,R20
 064C 9B01              movw R18,R22
 064E 0E940000          xcall empy32u
 0652 1801              movw R2,R16
 0654 2901              movw R4,R18
 0656 F701              movw R30,R14
 0658 3396              adiw R30,3
 065A EC0D              add R30,R12
 065C FD1D              adc R31,R13
 065E 6080              ldd R6,z+0
 0660 7724              clr R7
 0662 8824              clr R8
 0664 9924              clr R9
 0666 40E0              ldi R20,0
 0668 50E0              ldi R21,0
 066A 60E0              ldi R22,0
 066C 71E0              ldi R23,1
 066E 9A92              st -y,R9
 0670 8A92              st -y,R8
 0672 7A92              st -y,R7
 0674 6A92              st -y,R6
 0676 8A01              movw R16,R20
 0678 9B01              movw R18,R22
 067A 0E940000          xcall empy32u
 067E 3801              movw R6,R16
 0680 4901              movw R8,R18
 0682 620C              add R6,R2
 0684 731C              adc R7,R3
 0686 841C              adc R8,R4
 0688 951C              adc R9,R5
 068A F701              movw R30,R14
 068C 3196              adiw R30,1
 068E EC0D              add R30,R12
 0690 FD1D              adc R31,R13
 0692 2080              ldd R2,z+0
 0694 3324              clr R3
 0696 4424              clr R4
 0698 5524              clr R5
 069A 40E0              ldi R20,0
 069C 51E0              ldi R21,1
 069E 60E0              ldi R22,0
 06A0 70E0              ldi R23,0
 06A2 5A92              st -y,R5
 06A4 4A92              st -y,R4
 06A6 3A92              st -y,R3
 06A8 2A92              st -y,R2
 06AA 8A01              movw R16,R20
 06AC 9B01              movw R18,R22
 06AE 0E940000          xcall empy32u
 06B2 600E              add R6,R16
 06B4 711E              adc R7,R17
 06B6 821E              adc R8,R18
 06B8 931E              adc R9,R19
 06BA F701              movw R30,R14
 06BC EC0D              add R30,R12
 06BE FD1D              adc R31,R13
 06C0 2080              ldd R2,z+0
 06C2 3324              clr R3
 06C4 4424              clr R4
 06C6 5524              clr R5
 06C8 620C              add R6,R2
 06CA 731C              adc R7,R3
 06CC 841C              adc R8,R4
 06CE 951C              adc R9,R5
 06D0 F501              movw R30,R10
 06D2 6082              std z+0,R6
 06D4 7182              std z+1,R7
 06D6 8282              std z+2,R8
 06D8 9382              std z+3,R9
 06DA                   .dbline 162
 06DA           ;                                       (TMP_Buffer[FAT_Byte_Addresse+2]*(unsigned long)65536) +
 06DA           ;                                       (TMP_Buffer[FAT_Byte_Addresse+1]*(unsigned long)256) +
 06DA           ;                                        TMP_Buffer[FAT_Byte_Addresse];
 06DA           ;       }
 06DA                   .dbline 163
 06DA           ;       return;
 06DA                   .dbline -2
 06DA           L9:
 06DA                   .dbline 0 ; func end
 06DA 2A96              adiw R28,10
 06DC 0E940000          xcall pop_xgsetF0FC
 06E0 2496              adiw R28,4
 06E2 0895              ret
 06E4                   .dbsym l Tmp 6 l
 06E4                   .dbsym l FAT_Block_Addresse 2 l
 06E4                   .dbsym r FAT_Byte_Addresse 14 i
 06E4                   .dbsym r TMP_Buffer 12 pc
 06E4                   .dbsym r Block 10 pl
 06E4                   .dbsym l Cluster 20 l
 06E4                   .dbend
 06E4                   .dbfunc e fat_read_dir_ent _fat_read_dir_ent fl
 06E4                   .dbstruct 0 32 DirEntry
 06E4                   .dbfield 0 DIR_Name A[11:11]c
 06E4                   .dbfield 11 DIR_Attr c
 06E4                   .dbfield 12 DIR_NTRes c
 06E4                   .dbfield 13 DIR_CrtTimeTenth c
 06E4                   .dbfield 14 DIR_CrtTime i
 06E4                   .dbfield 16 DIR_CrtDate i
 06E4                   .dbfield 18 DIR_LastAccDate i
 06E4                   .dbfield 20 DIR_FstClusHI i
 06E4                   .dbfield 22 DIR_WrtTime i
 06E4                   .dbfield 24 DIR_WrtDate i
 06E4                   .dbfield 26 DIR_FstClusLO i
 06E4                   .dbfield 28 DIR_FileSize l
 06E4                   .dbend
 06E4           ;          Block -> y+6
 06E4           ;            blk -> y+2
 06E4           ; TMP_Entry_Count -> R10,R11
 06E4           ;              a -> R14,R15
 06E4           ;            dir -> R12,R13
 06E4           ;           buff -> y+30
 06E4           ;     Dir_Attrib -> y+28
 06E4           ;           Size -> y+26
 06E4           ;    Entry_Count -> y+24
 06E4           ;    dir_cluster -> y+20
                        .even
 06E4           _fat_read_dir_ent::
 06E4 0E940000          xcall push_arg4
 06E8 0E940000          xcall push_xgsetF0FC
 06EC 2A97              sbiw R28,10
 06EE                   .dbline -1
 06EE                   .dbline 174
 06EE           ; }
 06EE           ; 
 06EE           ; //############################################################################
 06EE           ; //读取文件目录区FDT相关信息,错误的时候返回0xffffffff,目录搜索完毕,返回0xFFFFFFFE
 06EE           ; unsigned long fat_read_dir_ent(unsigned long dir_cluster,//目录所在簇
 06EE           ;                                                       unsigned int Entry_Count,       //目录中文件序号
 06EE           ;                                                       unsigned long *Size,            //文件长度
 06EE           ;                                                       unsigned char *Dir_Attrib,      //文件属性
 06EE           ;                                                       unsigned char *buff)            //函数所需buffer
 06EE           ; //############################################################################
 06EE           ; {
 06EE                   .dbline 175
 06EE           ;       unsigned int TMP_Entry_Count = 0;
 06EE AA24              clr R10
 06F0 BB24              clr R11
 06F2                   .dbline 176
 06F2           ;       unsigned long Block=0;                  //目录所在扇区地址

⌨️ 快捷键说明

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