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

📄 bfsa_api.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   000000F8   4176               STRB        R1,[R0, #+25]
    305                BFSABuffer.BFSA_fatBuff[0x3A] = '2';
   \   000000FA   3221               MOV         R1,#+50
   \   000000FC   8176               STRB        R1,[R0, #+26]
    306                BFSABuffer.BFSA_fatBuff[0x3B] = 0x20;  // space
   \   000000FE   2021               MOV         R1,#+32
   \   00000100   C276               STRB        R2,[R0, #+27]
    307                BFSABuffer.BFSA_fatBuff[0x3C] = 0x20;  // space
   \   00000102   0277               STRB        R2,[R0, #+28]
    308                BFSABuffer.BFSA_fatBuff[0x3D] = 0x20;  // space
   \   00000104   4277               STRB        R2,[R0, #+29]
    309              // ************* END "extended BIOS Parameter Block" (EBPB) *************
    310          
    311              // ************* Identification code : 0xAA55 = good partition *************
    312                BFSABuffer.BFSA_fatBuff[0x1FE] = 0x55;  // 0x1FE
   \   00000106   5520               MOV         R0,#+85
   \   00000108   3870               STRB        R0,[R7, #+0]
    313                BFSABuffer.BFSA_fatBuff[0x1FF] = 0xAA;  // 0x1FF
   \   0000010A   AA20               MOV         R0,#+170
   \   0000010C   7870               STRB        R0,[R7, #+1]
    314              // ************* End Identification code *************
    315          
    316                // Write MBR (MBR的地址为第一扇区,不知道flash为什么会写下一个区:BASE_mmc_Add+MBR_SIZE ?  在此更正)
    317              if( TRUE == AT91F_Flash_Write_Address((unsigned int)BASE_mmc_Add, MBR_SIZE/*sizeof(BFSA_fatBuff)*/, (unsigned char*)BFSABuffer.BFSA_fatBuff, FALSE ) )
   \   0000010E   0023               MOV         R3,#+0
   \   00000110   2A1C               MOV         R2,R5
   \   00000112   0901               LSL         R1,R1,#+4
   \   00000114   181C               MOV         R0,R3
   \   00000116   ........           _BLF        AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
   \   0000011A   0128               CMP         R0,#+1
   \                     ??BFSA_format_1:
   \   0000011C   45D1               BNE         ??BFSA_format_3
    318              {
    319                 // Erase only need HD Flash size:BPB_NumFATs:去掉原有的扇区信息,写fat 表,
    320                 //fat表的起始地址为   :基本地址+保留扇区(BPB[0E~0F])+1 ; 此处保留扇区的设置为 1  ;    ????
    321                 //fat表的大小为(byte) :根目录数 + fat 数  ,此数据根据验证无误
    322                if( TRUE == AT91F_Flash_Write_Address((unsigned int)BASE_mmc_Add+2*MBR_SIZE,   //fat表的基本地址 ,(从 2*512开始)
    323                                                (int)(BPB_FATSz16+BFSABuffer.BFSA_fatBuff[0x10])*SIZEONESECTOR+(BFSABuffer.BFSA_fatBuff[0x12]*0x100+BFSABuffer.BFSA_fatBuff[0x11])*32,
    324                                                (unsigned char*) &value, TRUE) )
   \   0000011E   0123               MOV         R3,#+1
   \   00000120   6A46               MOV         R2,SP
   \   00000122   287C               LDRB        R0,[R5, #+16]
   \   00000124   801C               ADD         R0,R0,#+2
   \   00000126   4002               LSL         R0,R0,#+9
   \   00000128   A97C               LDRB        R1,[R5, #+18]
   \   0000012A   0902               LSL         R1,R1,#+8
   \   0000012C   6F7C               LDRB        R7,[R5, #+17]
   \   0000012E   C919               ADD         R1,R1,R7
   \   00000130   4901               LSL         R1,R1,#+5
   \   00000132   4118               ADD         R1,R0,R1
   \   00000134   201C               MOV         R0,R4
   \   00000136   ........           _BLF        AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
   \   0000013A   0128               CMP         R0,#+1
   \   0000013C   35D1               BNE         ??BFSA_format_3
    325                {
    326                  // Write FAT
    327                  // Set the FAT[0] to 0xFF0 and FAT[1] to 0xFFF
    328                  // FF8-FFE   may be used to mark end of a file chain
    329                  BFSABuffer.BFSA_fatBuff[0] = 0xF8;
   \   0000013E   F820               MOV         R0,#+248
   \   00000140   2870               STRB        R0,[R5, #+0]
    330                  BFSABuffer.BFSA_fatBuff[1] = 0xFF;
   \   00000142   FF20               MOV         R0,#+255
   \   00000144   6870               STRB        R0,[R5, #+1]
    331                  BFSABuffer.BFSA_fatBuff[2] = 0xFF;
   \   00000146   A870               STRB        R0,[R5, #+2]
    332                  BFSABuffer.BFSA_fatBuff[3] = 0x00;
   \   00000148   0020               MOV         R0,#+0
   \   0000014A   E870               STRB        R0,[R5, #+3]
    333                  //写fat 表的起始标识(在此,fat格式规定为 0xF8,0xFF,0xFF,0xFF ,也不尽相同,有的地方是更长的0xFF)
    334                  if( TRUE == AT91F_Flash_Write_Address((unsigned int)BASE_mmc_Add+2*MBR_SIZE, 4, (unsigned char*)BFSABuffer.BFSA_fatBuff, FALSE) )
   \   0000014C   0023               MOV         R3,#+0
   \   0000014E   2A1C               MOV         R2,R5
   \   00000150   0421               MOV         R1,#+4
   \   00000152   201C               MOV         R0,R4
   \   00000154   ........           _BLF        AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
   \   00000158   0128               CMP         R0,#+1
   \   0000015A   26D1               BNE         ??BFSA_format_3
    335                  {
    336                    // Depend of the number and size of FAT  (4 if 2 sector/fat, 3 si 1 sector/fat)
    337                     // 写第二个fat项目 ,地址为:从基本地址开始的地址 偏移一个fat和 保留扇区  ,数据与fat1相同,只是个fat 头
    338                    if( TRUE == AT91F_Flash_Write_Address((unsigned int)BASE_mmc_Add+(BPB_FATSz16+2)*MBR_SIZE, 4, (unsigned char*)BFSABuffer.BFSA_fatBuff, FALSE) )
   \   0000015C   6400               LSL         R4,R4,#+1
   \   0000015E   0023               MOV         R3,#+0
   \   00000160   2A1C               MOV         R2,R5
   \   00000162   0421               MOV         R1,#+4
   \   00000164   201C               MOV         R0,R4
   \   00000166   ........           _BLF        AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
   \   0000016A   0128               CMP         R0,#+1
   \   0000016C   1DD1               BNE         ??BFSA_format_3
    339                    {
    340                      // Label name of volume
    341                      BFSABuffer.BFSA_fatBuff[0x00] = 'A';
   \   0000016E   2E70               STRB        R6,[R5, #+0]
    342                      BFSABuffer.BFSA_fatBuff[0x01] = 'T';
   \   00000170   5420               MOV         R0,#+84
   \   00000172   6870               STRB        R0,[R5, #+1]
    343                      BFSABuffer.BFSA_fatBuff[0x02] = 'M';
   \   00000174   4D20               MOV         R0,#+77
   \   00000176   A870               STRB        R0,[R5, #+2]
    344                      BFSABuffer.BFSA_fatBuff[0x03] = 'E';
   \   00000178   4520               MOV         R0,#+69
   \   0000017A   E870               STRB        R0,[R5, #+3]
    345                      BFSABuffer.BFSA_fatBuff[0x04] = 'L';
   \   0000017C   4C20               MOV         R0,#+76
   \   0000017E   2871               STRB        R0,[R5, #+4]
    346                      BFSABuffer.BFSA_fatBuff[0x05] = 0x20;
   \   00000180   2020               MOV         R0,#+32
   \   00000182   6871               STRB        R0,[R5, #+5]
    347                      BFSABuffer.BFSA_fatBuff[0x06] = 0x20;
   \   00000184   A871               STRB        R0,[R5, #+6]
    348                      BFSABuffer.BFSA_fatBuff[0x07] = 0x20;
   \   00000186   E871               STRB        R0,[R5, #+7]
    349                      BFSABuffer.BFSA_fatBuff[0x08] = 0x20;
   \   00000188   2872               STRB        R0,[R5, #+8]
    350                      BFSABuffer.BFSA_fatBuff[0x09] = 0x20;
   \   0000018A   6872               STRB        R0,[R5, #+9]
    351                      BFSABuffer.BFSA_fatBuff[0x0A] = 0x20;
   \   0000018C   A872               STRB        R0,[R5, #+10]
    352                      BFSABuffer.BFSA_fatBuff[0x0B] = 0x08;
   \   0000018E   0820               MOV         R0,#+8
   \   00000190   E872               STRB        R0,[R5, #+11]
    353                      BFSABuffer.BFSA_fatBuff[0x0C] = 0x00;
   \   00000192   0020               MOV         R0,#+0
   \   00000194   A881               STRH        R0,[R5, #+12]
    354                      BFSABuffer.BFSA_fatBuff[0x0D] = 0x00;
    355                      if( TRUE == AT91F_Flash_Write_Address((unsigned int)BASE_mmc_Add+0x800, 14, (unsigned char*)BFSABuffer.BFSA_fatBuff, FALSE) )
   \   00000196   0023               MOV         R3,#+0
   \   00000198   2A1C               MOV         R2,R5
   \   0000019A   0E21               MOV         R1,#+14
   \   0000019C   201C               MOV         R0,R4
   \   0000019E   ........           _BLF        AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
   \   000001A2   0128               CMP         R0,#+1
   \   000001A4   01D1               BNE         ??BFSA_format_3
    356                      {
    357                        // Format completed
    358                        _status = BFSA_SUCCESS;
   \   000001A6   0020               MOV         R0,#+0
   \   000001A8   0190               STR         R0,[SP, #+4]
    359                      }
    360                    }
    361                  }
    362                }
    363              }
    364            }
    365            po_unlock();
   \                     ??BFSA_format_3:
   \   000001AA   ........           _BLF        po_unlock,??po_unlock??rT
    366            unsigned char buff[512] ;
    367            disk_read (
    368          	  buff,		/* Data buffer to store read data */
    369          	  0,		/* Sector number (LBA) */
    370          	  1	
    371                      ) ;
   \   000001AE   0122               MOV         R2,#+1
   \   000001B0   0021               MOV         R1,#+0
   \   000001B2   02A8               ADD         R0,SP,#+8
   \   000001B4   ........           _BLF        disk_read,??disk_read??rT
    372            return _status;
   \   000001B8   0198               LDR         R0,[SP, #+4]
   \   000001BA   7FB0               ADD         SP,#+508
   \   000001BC   03B0               ADD         SP,#+12
   \   000001BE   C046               NOP         
   \   000001C0                      REQUIRE ?Subroutine12
   \   000001C0                      ;; // Fall through to label ?Subroutine12
    373          }
    374          
    375          
    376          /*****************************************************************
    377          *
    378          *
    379          * S U B - R O U T I N E  : BFSA_DIR
    380          *
    381          *-----------------------------------------------------------------
    382          *
    383          * Object :
    384          *
    385          *
    386          * Argument :
    387          *
    388          * Return value :
    389          *
    390          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    391          ULONG BFSA_dir( void )
    392          {
   \                     BFSA_dir:
   \   00000000   FFB5               PUSH        {R0-R7,LR}
    393            ULONG  _ulNbRead = 0xFF;
   \   00000002   FF20               MOV         R0,#+255
   \   00000004   0090               STR         R0,[SP, #+0]
    394            int    a;
    395            ULONG  status = BAD_ARGUMENT;
    396            USHORT iFatEntry;
    397            ULONG  freeSpace = 0;
   \   00000006   0020               MOV         R0,#+0
   \   00000008   0390               STR         R0,[SP, #+12]
   \   0000000A   6A46               MOV         R2,SP
   \   0000000C   0521               MOV         R1,#+5
   \   0000000E   7348               LDR         R0,??BFSA_dir_0    ;; file_list
    398          
    399            status = BFSA_list(file_list,sizeof(file_list)/sizeof(file_list[0]),&_ulNbRead);
   \   00000010   ........           BL          BFSA_list
   \   00000014   0190               STR         R0,[SP, #+4]
    400            if(!BFSA_FAILURE(status))
   \   00000016   8025               MOV         R5,#+128
   \   00000018   2D06               LSL         R5,R5,#+24         ;; #-2147483648
   \   0000001A   2842               TST         R0,R5
   \   0000001C   ....               BEQ         .+5
   \   0000001E   D9E0               B           ??BFSA_dir_1
    401            {
    402              if (_ulNbRead)

⌨️ 快捷键说明

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