📄 fat.lis
字号:
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 + -