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

📄 fat16.txt

📁 MP3_PLAYER.rar
💻 TXT
📖 第 1 页 / 共 4 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 938] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o..\Release\fat16.o --depend=..\Release\fat16.d --device=DARMSTM --apcs=interwork -O3 -I..\code\header -I..\code\library\inc -I..\..\include -I..\..\..\..\library\inc -I..\..\..\..\..\FWLib\library\inc -I..\code\FAT16 -I..\code\driver -ID:\Keil\ARM\INC\ST\STM32F10x -DVECT_TAB_FLASH --omf_browse=..\Release\fat16.crf ..\code\FAT16\fat16.c]
                          THUMB

                          AREA ||i.FAT_Init||, CODE, READONLY, ALIGN=2

                  FAT_Init PROC
;;;53     void FAT_Init(void)
;;;54     {
000000  b570              PUSH     {r4-r6,lr}
000002  4c12              LDR      r4,|L1.76|
000004  2000              MOVS     r0,#0
000006  f7fffffe          BL       ReadBlock
00000a  4d11              LDR      r5,|L1.80|
00000c  f89401c2          LDRB     r0,[r4,#0x1c2]
000010  7028              STRB     r0,[r5,#0]  ; SystemID
000012  f8d401c6          LDR      r0,[r4,#0x1c6]
000016  6128              STR      r0,[r5,#0x10]  ; RelativeSectors
000018  f8d411ca          LDR      r1,[r4,#0x1ca]
00001c  6169              STR      r1,[r5,#0x14]  ; TotalSectors
00001e  f7fffffe          BL       ReadBlock
000022  7b60              LDRB     r0,[r4,#0xd]
000024  7068              STRB     r0,[r5,#1]  ; BPB_SecPerClus
000026  89e0              LDRH     r0,[r4,#0xe]
000028  80a8              STRH     r0,[r5,#4]  ; BPB_RsvdSecCnt
00002a  7c20              LDRB     r0,[r4,#0x10]
00002c  70a8              STRB     r0,[r5,#2]  ; BPB_NumFATs
00002e  f8b40011          LDRH     r0,[r4,#0x11]
000032  80e8              STRH     r0,[r5,#6]  ; BPB_RootEntCnt
000034  f8b40013          LDRH     r0,[r4,#0x13]
000038  8128              STRH     r0,[r5,#8]  ; BPB_TotSec16
00003a  8ae0              LDRH     r0,[r4,#0x16]
00003c  8168              STRH     r0,[r5,#0xa]  ; BPB_FATSz16
00003e  69e0              LDR      r0,[r4,#0x1c]
000040  61a8              STR      r0,[r5,#0x18]  ; BPB_HiddSec
000042  f8b4000b          LDRH     r0,[r4,#0xb]
000046  81a8              STRH     r0,[r5,#0xc]  ; BPB_BytesPerSec
;;;55     	ReadMBR();
;;;56     	ReadBPB();
;;;57     }
000048  bd70              POP      {r4-r6,pc}
;;;58     
                          ENDP

00004a  0000              DCW      0x0000
                  |L1.76|
00004c  00000000          DCD      ||.bss||
                  |L1.80|
000050  00000000          DCD      ||.data||

                          AREA ||i.DirStartSec||, CODE, READONLY, ALIGN=2

                  DirStartSec PROC
000000  4804              LDR      r0,|L2.20|
000002  8882              LDRH     r2,[r0,#4]  ; BPB_RsvdSecCnt
000004  6901              LDR      r1,[r0,#0x10]  ; RelativeSectors
000006  4411              ADD      r1,r1,r2
000008  7882              LDRB     r2,[r0,#2]  ; BPB_NumFATs
00000a  8940              LDRH     r0,[r0,#0xa]  ; BPB_FATSz16
00000c  fb021000          MLA      r0,r2,r0,r1
000010  4770              BX       lr
                          ENDP

000012  0000              DCW      0x0000
                  |L2.20|
000014  00000000          DCD      ||.data||

                          AREA ||i.CalcuFreeSpace||, CODE, READONLY, ALIGN=2

                  CalcuFreeSpace PROC
;;;196    u32 CalcuFreeSpace()
;;;197    {
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;198        u32 size;
;;;199    	u16 i, j;
;;;200    	u16 *RAM = (u16*)BUFFER;
;;;201    	size = 0;
000004  2500              MOVS     r5,#0
000006  4e0f              LDR      r6,|L3.68|
;;;202    	//BPB_FATSz16
;;;203    	for(i = 0 ; i < BPB_FATSz16 ; i++)
000008  462c              MOV      r4,r5
00000a  4f0f              LDR      r7,|L3.72|
00000c  e013              B        |L3.54|
                  |L3.14|
;;;204    	{
;;;205    	    ReadBlock(RelativeSectors + BPB_RsvdSecCnt + i);
00000e  88b9              LDRH     r1,[r7,#4]  ; BPB_RsvdSecCnt
000010  6938              LDR      r0,[r7,#0x10]  ; RelativeSectors
000012  4408              ADD      r0,r0,r1
000014  4420              ADD      r0,r0,r4
000016  f7fffffe          BL       ReadBlock
;;;206    		for(j = 0; j < 256; j++)
00001a  7879              LDRB     r1,[r7,#1]
00001c  89ba              LDRH     r2,[r7,#0xc]
00001e  2000              MOVS     r0,#0
                  |L3.32|
;;;207    		{
;;;208    		   if(RAM[j] == 0x00)//空闭簇
000020  f8363010          LDRH     r3,[r6,r0,LSL #1]
000024  b90b              CBNZ     r3,|L3.42|
;;;209    		      size += BPB_SecPerClus * BPB_BytesPerSec;
000026  fb015502          MLA      r5,r1,r2,r5
                  |L3.42|
00002a  1c40              ADDS     r0,r0,#1              ;206
00002c  b280              UXTH     r0,r0                 ;206
00002e  28ff              CMP      r0,#0xff              ;206
000030  d9f6              BLS      |L3.32|
000032  1c64              ADDS     r4,r4,#1              ;203
000034  b2a4              UXTH     r4,r4                 ;203
                  |L3.54|
000036  8978              LDRH     r0,[r7,#0xa]          ;203  ; BPB_FATSz16
000038  4284              CMP      r4,r0                 ;203
00003a  d3e8              BCC      |L3.14|
;;;210    		}
;;;211    	}
;;;212    	return size;
00003c  4628              MOV      r0,r5
;;;213    }
00003e  e8bd81f0          POP      {r4-r8,pc}
;;;214    
                          ENDP

000042  0000              DCW      0x0000
                  |L3.68|
000044  00000000          DCD      ||.bss||
                  |L3.72|
000048  00000000          DCD      ||.data||

                          AREA ||i.GetFileName||, CODE, READONLY, ALIGN=2

                  GetFileName PROC
;;;226    void GetFileName(u32 secAddr, u16 secNumOff, u8 persecdirOff, u8 filename[], u8 *len)	
;;;227    {
000000  e92d5ff0          PUSH     {r4-r12,lr}
000004  ea5f0802          MOVS     r8,r2
;;;228        u8 i,k;
;;;229    	DIR *ID;
;;;230    	u16 tmp ,GB2312;
;;;231    	signed char j;
;;;232    	*len = 0;
000008  9c0a              LDR      r4,[sp,#0x28]
00000a  f04f0200          MOV      r2,#0
00000e  4e6a              LDR      r6,|L4.440|
000010  461d              MOV      r5,r3                 ;227
000012  7022              STRB     r2,[r4,#0]
000014  eb000a01          ADD      r10,r0,r1
;;;233    	if(persecdirOff == 0)	 //当短文件名在扇区的第一目录项时,由于需要以上一目录项来判断是否有长文件名,需要特殊处理
000018  d10d              BNE      |L4.54|
;;;234    	{
;;;235    		ReadBlock(secAddr + secNumOff - 1);
00001a  f1aa0001          SUB      r0,r10,#1
00001e  f7fffffe          BL       ReadBlock
;;;236    		if( BUFFER[15 * 32 + 0xB] == 0x0F) //该文件有长文件名
000022  f89601eb          LDRB     r0,[r6,#0x1eb]  ; BUFFER
000026  280f              CMP      r0,#0xf
000028  d102              BNE      |L4.48|
;;;237    			persecdirOff = 16;//从上一扇区的最后一个目录项开始读(长文件的目录项是倒放在扇区中)
00002a  f04f0810          MOV      r8,#0x10
00002e  e002              B        |L4.54|
                  |L4.48|
000030  4650              MOV      r0,r10
;;;238    	    else 
;;;239        		ReadBlock(secAddr + secNumOff);//该文件无长名,需要返回原来扇区读短文件名
000032  f7fffffe          BL       ReadBlock
                  |L4.54|
;;;240    	}
;;;241    	if( BUFFER[(persecdirOff - 1) * 32 + 0xB] == 0x0F) //该文件有长文件名
000036  eb061148          ADD      r1,r6,r8,LSL #5
00003a  f8110c15          LDRB     r0,[r1,#-0x15]
00003e  280f              CMP      r0,#0xf
000040  d178              BNE      |L4.308|
000042  f04f09ff          MOV      r9,#0xff
                  |L4.70|
;;;242    	{
;;;243    		k = persecdirOff;
;;;244    		while(1)
;;;245    		{
;;;246    	        ID = (DIR*)(&BUFFER[(k - 1) * 32]);
000046  485c              LDR      r0,|L4.440|
;;;247    
;;;248    			//从长文件目录项中读取文件名,每个长目录分3个区域存放  
;;;249        		for(i = 0x1 ; i <=  0xA; i+=2)
000048  2701              MOVS     r7,#1
00004a  eb001b48          ADD      r11,r0,r8,LSL #5      ;246
00004e  f1ab0620          SUB      r6,r11,#0x20          ;246
                  |L4.82|
;;;250    			{
;;;251    			   tmp = *(((u8 *)ID) + i) + (*(((u8 *)ID) + i + 1) << 8);
000052  19f1              ADDS     r1,r6,r7
000054  5df0              LDRB     r0,[r6,r7]
000056  7849              LDRB     r1,[r1,#1]
000058  eb002001          ADD      r0,r0,r1,LSL #8
00005c  b280              UXTH     r0,r0
;;;252    			   GB2312 = UnicodeToGB2312(tmp); //将对应的Unicode码转化为GB2312码
00005e  f7fffffe          BL       UnicodeToGB2312
;;;253    	  		   if(((GB2312 & 0xFF00) != 0) && ((GB2312 & 0xFF00) != 0xFF00))//去掉0和FF
000062  0a01              LSRS     r1,r0,#8
000064  d007              BEQ      |L4.118|
000066  ebb92f10          CMP      r9,r0,LSR #8
00006a  d004              BEQ      |L4.118|
;;;254        		      filename[(*len)++] = (GB2312 & 0xFF00) >> 8;
00006c  7821              LDRB     r1,[r4,#0]
00006e  0a03              LSRS     r3,r0,#8
000070  1c4a              ADDS     r2,r1,#1
000072  7022              STRB     r2,[r4,#0]
000074  554b              STRB     r3,[r1,r5]
                  |L4.118|
;;;255        		   if(((GB2312 & 0x00FF) != 0) && ((GB2312 & 0x00FF) != 0x00FF))
000076  f0100fff          TST      r0,#0xff
00007a  d007              BEQ      |L4.140|
00007c  43c1              MVNS     r1,r0
00007e  f0110fff          TST      r1,#0xff
000082  d003              BEQ      |L4.140|
;;;256        		      filename[(*len)++] = (GB2312 & 0x00FF);
000084  7821              LDRB     r1,[r4,#0]
000086  1c4a              ADDS     r2,r1,#1
000088  7022              STRB     r2,[r4,#0]
00008a  5548              STRB     r0,[r1,r5]
                  |L4.140|
00008c  1cbf              ADDS     r7,r7,#2              ;249
00008e  b2ff              UXTB     r7,r7                 ;249
000090  2f0a              CMP      r7,#0xa               ;249
000092  d9de              BLS      |L4.82|
;;;257    			}
;;;258        		for(i = 0xE ; i <=  0x19; i+=2)
000094  270e              MOVS     r7,#0xe
                  |L4.150|
;;;259    			{
;;;260    			   tmp = *(((u8 *)ID) + i) + (*(((u8 *)ID) + i + 1) << 8);
000096  19f1              ADDS     r1,r6,r7
000098  5df0              LDRB     r0,[r6,r7]
00009a  7849              LDRB     r1,[r1,#1]
00009c  eb002001          ADD      r0,r0,r1,LSL #8
0000a0  b280              UXTH     r0,r0
;;;261    			   GB2312 = UnicodeToGB2312(tmp); //将对应的Unicode码转化为GB2312码
0000a2  f7fffffe          BL       UnicodeToGB2312
;;;262    	  		   if(((GB2312 & 0xFF00) != 0) && ((GB2312 & 0xFF00) != 0xFF00))//去掉0和FF
0000a6  0a01              LSRS     r1,r0,#8
0000a8  d007              BEQ      |L4.186|
0000aa  ebb92f10          CMP      r9,r0,LSR #8
0000ae  d004              BEQ      |L4.186|
;;;263        		      filename[(*len)++] = (GB2312 & 0xFF00) >> 8;
0000b0  7821              LDRB     r1,[r4,#0]
0000b2  0a03              LSRS     r3,r0,#8
0000b4  1c4a              ADDS     r2,r1,#1
0000b6  7022              STRB     r2,[r4,#0]
0000b8  554b              STRB     r3,[r1,r5]
                  |L4.186|
;;;264        		   if(((GB2312 & 0x00FF) != 0) && ((GB2312 & 0x00FF) != 0x00FF))
0000ba  f0100fff          TST      r0,#0xff
0000be  d007              BEQ      |L4.208|
0000c0  43c1              MVNS     r1,r0
0000c2  f0110fff          TST      r1,#0xff
0000c6  d003              BEQ      |L4.208|
;;;265        		      filename[(*len)++] = (GB2312 & 0x00FF);
0000c8  7821              LDRB     r1,[r4,#0]
0000ca  1c4a              ADDS     r2,r1,#1
0000cc  7022              STRB     r2,[r4,#0]
0000ce  5548              STRB     r0,[r1,r5]
                  |L4.208|
0000d0  1cbf              ADDS     r7,r7,#2              ;258
0000d2  b2ff              UXTB     r7,r7                 ;258
0000d4  2f19              CMP      r7,#0x19              ;258
0000d6  d9de              BLS      |L4.150|
;;;266    			}
;;;267                for(i = 0x1C ; i <=  0x1F; i+=2)
0000d8  271c              MOVS     r7,#0x1c
                  |L4.218|
;;;268    			{
;;;269    			   tmp = *(((u8 *)ID) + i) + (*(((u8 *)ID) + i + 1) << 8);
0000da  19f1              ADDS     r1,r6,r7
0000dc  5df0              LDRB     r0,[r6,r7]
0000de  7849              LDRB     r1,[r1,#1]
0000e0  eb002001          ADD      r0,r0,r1,LSL #8
0000e4  b280              UXTH     r0,r0
;;;270    			   GB2312 = UnicodeToGB2312(tmp); //将对应的Unicode码转化为GB2312码
0000e6  f7fffffe          BL       UnicodeToGB2312
;;;271    	  		   if(((GB2312 & 0xFF00) != 0) && ((GB2312 & 0xFF00) != 0xFF00))//去掉0和FF
0000ea  0a01              LSRS     r1,r0,#8
0000ec  d007              BEQ      |L4.254|
0000ee  ebb92f10          CMP      r9,r0,LSR #8
0000f2  d004              BEQ      |L4.254|
;;;272        		      filename[(*len)++] = (GB2312 & 0xFF00) >> 8;
0000f4  7821              LDRB     r1,[r4,#0]
0000f6  0a02              LSRS     r2,r0,#8
0000f8  1c4b              ADDS     r3,r1,#1
0000fa  7023              STRB     r3,[r4,#0]
0000fc  554a              STRB     r2,[r1,r5]
                  |L4.254|
;;;273        		   if(((GB2312 & 0x00FF) != 0) && ((GB2312 & 0x00FF) != 0x00FF))
0000fe  f0100fff          TST      r0,#0xff
000102  d007              BEQ      |L4.276|
000104  43c1              MVNS     r1,r0

⌨️ 快捷键说明

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