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

📄 fat16.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   0000001A   ....               LDR         R2,??DataTable25   ;; ClusterBuffer
   \   0000001C   0028               CMP         R0,#+0
   \   0000001E   03D0               BEQ         ??FlushFAT_0
   \                     ??FlushFAT_1:
   \   00000020   401E               SUB         R0,R0,#+1
   \   00000022   0B5C               LDRB        R3,[R1, R0]
   \   00000024   1354               STRB        R3,[R2, R0]
   \   00000026   FBD1               BNE         ??FlushFAT_1
   \                     ??FlushFAT_0:
   \   00000028   ....               LDR         R0,??DataTable14   ;; fat_get + 48
   \   0000002A   0668               LDR         R6,[R0, #+0]
   \   0000002C   11E0               B           ??FlushFAT_2
    274          	
    275          	for(i=FirstDirSector;i<SectorsPerCluster;i++)
    276          	{
    277          		mmc_read_page(0,i,SectorBuffer);
   \                     ??FlushFAT_3:
   \   0000002E   2A1C               MOV         R2,R5
   \   00000030   311C               MOV         R1,R6
   \   00000032   0020               MOV         R0,#+0
   \   00000034   ........           _BLF        mmc_read_page,??mmc_read_page??rT
    278          		memcpy(ClusterBuffer[i],SectorBuffer,BytesPerSector);
   \   00000038   ....               LDR         R0,??DataTable23   ;; fat_get + 32
   \   0000003A   0068               LDR         R0,[R0, #+0]
   \   0000003C   ....               LDR         R1,??DataTable24   ;; ClusterBuffer + 16384
   \   0000003E   7202               LSL         R2,R6,#+9
   \   00000040   ....               LDR         R3,??DataTable25   ;; ClusterBuffer
   \   00000042   9A18               ADD         R2,R3,R2
   \   00000044   0028               CMP         R0,#+0
   \   00000046   03D0               BEQ         ??FlushFAT_4
   \                     ??FlushFAT_5:
   \   00000048   401E               SUB         R0,R0,#+1
   \   0000004A   0B5C               LDRB        R3,[R1, R0]
   \   0000004C   1354               STRB        R3,[R2, R0]
   \   0000004E   FBD1               BNE         ??FlushFAT_5
    279          	}
   \                     ??FlushFAT_4:
   \   00000050   761C               ADD         R6,R6,#+1
   \                     ??FlushFAT_2:
   \   00000052   ....               LDR         R0,??DataTable26   ;; fat_get + 40
   \   00000054   0068               LDR         R0,[R0, #+0]
   \   00000056   8642               CMP         R6,R0
   \   00000058   E9D3               BCC         ??FlushFAT_3
   \   0000005A   0023               MOV         R3,#+0
   \   0000005C   1EE0               B           ??FlushFAT_6
    280          	for(i=0;i<FATsectors;i++)
    281          	{
    282          		for(j=0;j<256;j++)
   \                     ??FlushFAT_7:
   \   0000005E   0020               MOV         R0,#+0
    283          		{
    284          			SectorBuffer[j*2]=(FatCache[i*256+j])%256;
   \                     ??FlushFAT_8:
   \   00000060   1D02               LSL         R5,R3,#+8
   \   00000062   2D18               ADD         R5,R5,R0
   \   00000064   AD00               LSL         R5,R5,#+2
   \   00000066   5559               LDR         R5,[R2, R5]
   \   00000068   8E01               LSL         R6,R1,#+6
   \   0000006A   4700               LSL         R7,R0,#+1
   \   0000006C   E719               ADD         R7,R4,R7
   \   0000006E   BE19               ADD         R6,R7,R6
   \   00000070   3570               STRB        R5,[R6, #+0]
    285          		    SectorBuffer[j*2+1]=(FatCache[i*256+j])>>8;
   \   00000072   2D0A               LSR         R5,R5,#+8
   \   00000074   7570               STRB        R5,[R6, #+1]
    286          		}
   \   00000076   401C               ADD         R0,R0,#+1
   \   00000078   8842               CMP         R0,R1
   \   0000007A   F1DB               BLT         ??FlushFAT_8
    287          		memcpy(ClusterBuffer[i+FirstFATSector],SectorBuffer,BytesPerSector);
   \   0000007C   ....               LDR         R0,??DataTable23   ;; fat_get + 32
   \   0000007E   0068               LDR         R0,[R0, #+0]
   \   00000080   ....               LDR         R1,??DataTable24   ;; ClusterBuffer + 16384
   \   00000082   274A               LDR         R2,??FlushFAT_9    ;; fat_get + 44
   \   00000084   1268               LDR         R2,[R2, #+0]
   \   00000086   9A18               ADD         R2,R3,R2
   \   00000088   5202               LSL         R2,R2,#+9
   \   0000008A   ....               LDR         R5,??DataTable25   ;; ClusterBuffer
   \   0000008C   AA18               ADD         R2,R5,R2
   \   0000008E   0028               CMP         R0,#+0
   \   00000090   03D0               BEQ         ??FlushFAT_10
   \                     ??FlushFAT_11:
   \   00000092   401E               SUB         R0,R0,#+1
   \   00000094   0D5C               LDRB        R5,[R1, R0]
   \   00000096   1554               STRB        R5,[R2, R0]
   \   00000098   FBD1               BNE         ??FlushFAT_11
    288          	}
   \                     ??FlushFAT_10:
   \   0000009A   5B1C               ADD         R3,R3,#+1
   \                     ??FlushFAT_6:
   \   0000009C   8021               MOV         R1,#+128
   \   0000009E   4900               LSL         R1,R1,#+1          ;; #+256
   \   000000A0   ....               LDR         R2,??DataTable33   ;; FatCache
   \   000000A2   2048               LDR         R0,??FlushFAT_9+0x4  ;; fat_get + 36
   \   000000A4   0068               LDR         R0,[R0, #+0]
   \   000000A6   8342               CMP         R3,R0
   \   000000A8   D9D3               BCC         ??FlushFAT_7
    289          	for(i=0;i<FATsectors;i++)//backup FAT field
   \   000000AA   0023               MOV         R3,#+0
   \   000000AC   20E0               B           ??FlushFAT_12
    290          	{
    291          		for(j=0;j<256;j++)
    292          		{
    293          			SectorBuffer[j*2]=(FatCache[i*256+j])%256;
   \                     ??FlushFAT_13:
   \   000000AE   1D02               LSL         R5,R3,#+8
   \   000000B0   2D18               ADD         R5,R5,R0
   \   000000B2   AD00               LSL         R5,R5,#+2
   \   000000B4   5559               LDR         R5,[R2, R5]
   \   000000B6   8E01               LSL         R6,R1,#+6
   \   000000B8   4700               LSL         R7,R0,#+1
   \   000000BA   E719               ADD         R7,R4,R7
   \   000000BC   BE19               ADD         R6,R7,R6
   \   000000BE   3570               STRB        R5,[R6, #+0]
    294          		    SectorBuffer[j*2+1]=(FatCache[i*256+j])>>8;
   \   000000C0   2D0A               LSR         R5,R5,#+8
   \   000000C2   7570               STRB        R5,[R6, #+1]
    295          		}
   \   000000C4   401C               ADD         R0,R0,#+1
   \   000000C6   8842               CMP         R0,R1
   \   000000C8   F1DB               BLT         ??FlushFAT_13
    296          		memcpy(ClusterBuffer[i+FirstFATSector+FATsectors],SectorBuffer,BytesPerSector);
   \   000000CA   ....               LDR         R0,??DataTable23   ;; fat_get + 32
   \   000000CC   0668               LDR         R6,[R0, #+0]
   \   000000CE   ....               LDR         R0,??DataTable24   ;; ClusterBuffer + 16384
   \   000000D0   134D               LDR         R5,??FlushFAT_9    ;; fat_get + 44
   \   000000D2   2D68               LDR         R5,[R5, #+0]
   \   000000D4   5D19               ADD         R5,R3,R5
   \   000000D6   134F               LDR         R7,??FlushFAT_9+0x4  ;; fat_get + 36
   \   000000D8   3F68               LDR         R7,[R7, #+0]
   \   000000DA   ED19               ADD         R5,R5,R7
   \   000000DC   6D02               LSL         R5,R5,#+9
   \   000000DE   ....               LDR         R7,??DataTable25   ;; ClusterBuffer
   \   000000E0   7D19               ADD         R5,R7,R5
   \   000000E2   002E               CMP         R6,#+0
   \   000000E4   03D0               BEQ         ??FlushFAT_14
   \                     ??FlushFAT_15:
   \   000000E6   761E               SUB         R6,R6,#+1
   \   000000E8   875D               LDRB        R7,[R0, R6]
   \   000000EA   AF55               STRB        R7,[R5, R6]
   \   000000EC   FBD1               BNE         ??FlushFAT_15
    297          	}
   \                     ??FlushFAT_14:
   \   000000EE   5B1C               ADD         R3,R3,#+1
   \                     ??FlushFAT_12:
   \   000000F0   0C48               LDR         R0,??FlushFAT_9+0x4  ;; fat_get + 36
   \   000000F2   0068               LDR         R0,[R0, #+0]
   \   000000F4   8342               CMP         R3,R0
   \   000000F6   0020               MOV         R0,#+0
   \   000000F8   D9D3               BCC         ??FlushFAT_13
    298          	Erase_MMC_Cluster(0);//写入之前,擦除当前簇;
   \   000000FA   ........           _BLF        Erase_MMC_Cluster,??Erase_MMC_Cluster??rT
    299          	for(i=0;i<SectorsPerCluster;i++)//一扇区接一扇区写入
   \   000000FE   0025               MOV         R5,#+0
   \   00000100   06E0               B           ??FlushFAT_16
    300              {
    301              	for(j=0;j<255;j++);//延时
    302              	mmc_write_page(0,i,ClusterBuffer[i]);
   \                     ??FlushFAT_17:
   \   00000102   6802               LSL         R0,R5,#+9
   \   00000104   2218               ADD         R2,R4,R0
   \   00000106   291C               MOV         R1,R5
   \   00000108   0020               MOV         R0,#+0
   \   0000010A   ........           _BLF        mmc_write_page,??mmc_write_page??rT
    303              } 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
   \   0000010E   6D1C               ADD         R5,R5,#+1
   \                     ??FlushFAT_16:
   \   00000110   ....               LDR         R0,??DataTable26   ;; fat_get + 40
   \   00000112   0068               LDR         R0,[R0, #+0]
   \   00000114   8542               CMP         R5,R0
   \   00000116   F4D3               BCC         ??FlushFAT_17
    304          }
   \   00000118   F0BC               POP         {R4-R7}
   \   0000011A   01BC               POP         {R0}
   \   0000011C   0047               BX          R0                 ;; return
   \   0000011E   C046               NOP         
   \                     ??FlushFAT_9:
   \   00000120   ........           DC32        fat_get + 44
   \   00000124   ........           DC32        fat_get + 36
    305          
    306          //The sector number of the first sector of that cluster.
    307          //FirstSectorofCluster = ((N – 2) * BPB_SecPerClus) + FirstDataSector;
    308          //Because No MBR,so: clust-1!

   \                                 In segment CODE, align 4, keep-with-next
    309          unsigned long FirstSectorofCluster(unsigned long clust)//数据存放的cluster转为sector
    310          {
    311               return ((clust-1) * SectorsPerCluster + FirstDataSector);
   \                     FirstSectorofCluster:
   \   00000000   ....               LDR         R1,??DataTable27   ;; fat_get
   \   00000002   401E               SUB         R0,R0,#+1
   \   00000004   8A6A               LDR         R2,[R1, #+40]
   \   00000006   5043               MUL         R0,R2
   \   00000008   C969               LDR         R1,[R1, #+28]
   \   0000000A   4018               ADD         R0,R0,R1
   \   0000000C   7047               BX          LR                 ;; return
    312          }
    313           
    314          // alloc a free cluster. policy is searching from prev cluster number, if no free cluster till end of fat, then search from head of fat.
    315          // return a cluster number. 0xffff indicate faild, disk overflow.
    316          // argument 0 : no prev cluster.

   \                                 In segment CODE, align 4, keep-with-next
    317          WORD AllocCluster(WORD PrevClusterNum)
    318          {
   \                     AllocCluster:
   \   00000000   70B5               PUSH        {R4-R6,LR}
   \   00000002   011C               MOV         R1,R0
    319          	static WORD LastAllocClusterNum=0;
    320          	WORD i;
    321          
    322          	if(LastAllocClusterNum == 0)
   \   00000004   ....           

⌨️ 快捷键说明

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