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

📄 mmc.lst

📁 针对at91sam7a3为主芯片开发板开发的spi口应用程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    347             //Read Start Byte form MMC/SD-Card (FEh/Start Byte)
    348             while (Read_Byte_MMC() != 0xfe){};
   \                     ??MMC_Read_Block_3:
   \   0000001E   ........           BL          Read_Byte_MMC
   \   00000022   FE28               CMP         R0,#+0xFE
   \   00000024   FBD1               BNE         ??MMC_Read_Block_3
    349          	
    350             //Write blocks(normal 512Bytes) to MMC/SD-Card
    351             for (i=0;i<Bytes;i++)
   \   00000026   0020               MOV         R0,#+0
   \   00000028   051C               MOV         R5,R0
   \                     ??MMC_Read_Block_4:
   \   0000002A   0198               LDR         R0,[SP, #+0x4]
   \   0000002C   8542               CMP         R5,R0
   \   0000002E   05D2               BCS         ??MMC_Read_Block_5
    352             {
    353                *Buffer++ = Read_Byte_MMC();
   \   00000030   ........           BL          Read_Byte_MMC
   \   00000034   2070               STRB        R0,[R4, #+0]
   \   00000036   641C               ADD         R4,#+0x1
    354             }
   \   00000038   6D1C               ADD         R5,#+0x1
   \   0000003A   F6E7               B           ??MMC_Read_Block_4
    355          
    356             //CRC-Byte
    357             Read_Byte_MMC();//CRC - Byte
   \                     ??MMC_Read_Block_5:
   \   0000003C   ........           BL          Read_Byte_MMC
    358             Read_Byte_MMC(); //CRC - Byte
   \   00000040   ........           BL          Read_Byte_MMC
    359          	
    360             //set MMC_Chip_Select to high (MMC/SD-Card invalid)
    361             AT91F_PIO_SetOutput(AT91C_BASE_PIOA,MMC_Chip_Select) ;
   \   00000044   8021               MOV         R1,#+0x80
   \   00000046   8901               LSL         R1,R1,#+0x6        ;; #+0x2000
   \   00000048   ....               LDR         R0,??DataTable25   ;; 0xfffff400
   \   0000004A   ........           _BLF        AT91F_PIO_SetOutput,AT91F_PIO_SetOutput??rT
    362             return('0');
   \   0000004E   3020               MOV         R0,#+0x30
   \                     ??MMC_Read_Block_2:
   \   00000050   02B0               ADD         SP,#+0x8
   \   00000052   F0BC               POP         {R4-R7}
   \   00000054   02BC               POP         {R1}
   \   00000056   0847               BX          R1                 ;; return
    363          }
    364          
    365          //****************************************************************************
    366          //Routine for reading Blocks(512Byte) from MMC/SD-Card
    367          //Return 0 if no Error.

   \                                 In segment CODE, align 4, keep-with-next
    368          unsigned char MMC_read_sector(unsigned long addr,unsigned char *Buffer)
    369          //****************************************************************************
    370          {	
   \                     MMC_read_sector:
   \   00000000   70B5               PUSH        {R4-R6,LR}
   \   00000002   82B0               SUB         SP,#+0x8
   \   00000004   041C               MOV         R4,R0
   \   00000006   0D1C               MOV         R5,R1
    371             //Command 16 is reading Blocks from MMC/SD-Card
    372             unsigned char CMD[] = {0x51,0x00,0x00,0x00,0x00,0xFF};  //Command 17 read a single block
   \   00000008   6846               MOV         R0,SP
   \   0000000A   1049               LDR         R1,??MMC_read_sector_0  ;; `?<Constant {81, 0, 0, 0, 0, 255}>`
   \   0000000C   0A68               LDR         R2,[R1, #0]
   \   0000000E   0260               STR         R2,[R0, #0]
   \   00000010   4A68               LDR         R2,[R1, #+0x4]
   \   00000012   4260               STR         R2,[R0, #+0x4]
    373             unsigned char temp;
    374          
    375             AT91F_PIO_GetInterruptStatus(AT91C_BASE_PIOA) ;         //clear all interrupt.
   \   00000014   ....               LDR         R0,??DataTable25   ;; 0xfffff400
   \   00000016   ........           _BLF        AT91F_PIO_GetInterruptStatus,AT91F_PIO_GetInterruptStatus??rT
    376          
    377             //Address conversation(logic block address-->byte address)
    378             addr = addr << 9; //addr = addr * 512
   \   0000001A   6402               LSL         R4,R4,#+0x9
    379          
    380             CMD[1] = ((addr & 0xFF000000) >>24 );
   \   0000001C   6846               MOV         R0,SP
   \   0000001E   211C               MOV         R1,R4
   \   00000020   090E               LSR         R1,R1,#+0x18
   \   00000022   4170               STRB        R1,[R0, #+0x1]
    381             CMD[2] = ((addr & 0x00FF0000) >>16 );
   \   00000024   6846               MOV         R0,SP
   \   00000026   211C               MOV         R1,R4
   \   00000028   090C               LSR         R1,R1,#+0x10
   \   0000002A   8170               STRB        R1,[R0, #+0x2]
    382             CMD[3] = ((addr & 0x0000FF00) >>8  );
   \   0000002C   6846               MOV         R0,SP
   \   0000002E   211C               MOV         R1,R4
   \   00000030   090A               LSR         R1,R1,#+0x8
   \   00000032   C170               STRB        R1,[R0, #+0x3]
    383          
    384             temp=MMC_Read_Block(CMD,Buffer,512);
   \   00000034   8022               MOV         R2,#+0x80
   \   00000036   9200               LSL         R2,R2,#+0x2        ;; #+0x200
   \   00000038   291C               MOV         R1,R5
   \   0000003A   6846               MOV         R0,SP
   \   0000003C   ........           BL          MMC_Read_Block
   \   00000040   061C               MOV         R6,R0
    385          
    386             return(temp);
   \   00000042   301C               MOV         R0,R6
   \   00000044   02B0               ADD         SP,#+0x8
   \   00000046   70BC               POP         {R4-R6}
   \   00000048   02BC               POP         {R1}
   \   0000004A   0847               BX          R1                 ;; return
   \                     ??MMC_read_sector_0:
   \   0000004C   ........           DC32        `?<Constant {81, 0, 0, 0, 0, 255}>`
    387          }
    388          
    389          //***************************************************************************
    390          //读 CID Registers from MMC/SD-Card (16Bytes)
    391          //错误返回0.

   \                                 In segment CODE, align 4, keep-with-next
    392          unsigned char Read_CID_MMC(unsigned char *Buffer)
    393          //***************************************************************************
    394          {
   \                     Read_CID_MMC:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   82B0               SUB         SP,#+0x8
   \   00000004   041C               MOV         R4,R0
    395             //Command for reading CID Registers  //Command 10
    396             unsigned char CMD[] = {0x4A,0x00,0x00,0x00,0x00,0xFF};
   \   00000006   6846               MOV         R0,SP
   \   00000008   0749               LDR         R1,??Read_CID_MMC_0  ;; `?<Constant {74, 0, 0, 0, 0, 255}>`
   \   0000000A   0A68               LDR         R2,[R1, #0]
   \   0000000C   0260               STR         R2,[R0, #0]
   \   0000000E   4A68               LDR         R2,[R1, #+0x4]
   \   00000010   4260               STR         R2,[R0, #+0x4]
    397             unsigned char temp;
    398             temp=MMC_Read_Block(CMD,Buffer,16); //read 16 bytes  ***CID为128字节的寄存器
   \   00000012   1022               MOV         R2,#+0x10
   \   00000014   211C               MOV         R1,R4
   \   00000016   6846               MOV         R0,SP
   \   00000018   ........           BL          MMC_Read_Block
   \   0000001C   051C               MOV         R5,R0
    399          
    400             return(temp);
   \   0000001E   281C               MOV         R0,R5
   \   00000020   02B0               ADD         SP,#+0x8
   \   00000022   30BC               POP         {R4,R5}
   \   00000024   02BC               POP         {R1}
   \   00000026   0847               BX          R1                 ;; return
   \                     ??Read_CID_MMC_0:
   \   00000028   ........           DC32        `?<Constant {74, 0, 0, 0, 0, 255}>`
    401          }
    402          
    403          //***************************************************************************
    404          //读 CSD Reg from MMC/SD-Card (16Bytes)
    405          //错误返回0.

   \                                 In segment CODE, align 4, keep-with-next
    406          unsigned char Read_CSD_MMC(unsigned char *Buffer)
    407          //***************************************************************************
    408          {	
   \                     Read_CSD_MMC:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   82B0               SUB         SP,#+0x8
   \   00000004   041C               MOV         R4,R0
    409             //Command for reading CSD Registers
    410             unsigned char CMD[] = {0x49,0x00,0x00,0x00,0x00,0xFF};   //Command 9
   \   00000006   6846               MOV         R0,SP
   \   00000008   0749               LDR         R1,??Read_CSD_MMC_0  ;; `?<Constant {73, 0, 0, 0, 0, 255}>`
   \   0000000A   0A68               LDR         R2,[R1, #0]
   \   0000000C   0260               STR         R2,[R0, #0]
   \   0000000E   4A68               LDR         R2,[R1, #+0x4]
   \   00000010   4260               STR         R2,[R0, #+0x4]
    411             unsigned char temp;
    412             temp=MMC_Read_Block(CMD,Buffer,16);    //read 16 bytes CSD长度为512=16*16
   \   00000012   1022               MOV         R2,#+0x10
   \   00000014   211C               MOV         R1,R4
   \   00000016   6846               MOV         R0,SP
   \   00000018   ........           BL          MMC_Read_Block
   \   0000001C   051C               MOV         R5,R0
    413          
    414             return(temp);
   \   0000001E   281C               MOV         R0,R5
   \   00000020   02B0               ADD         SP,#+0x8
   \   00000022   30BC               POP         {R4,R5}
   \   00000024   02BC               POP         {R1}
   \   00000026   0847               BX          R1                 ;; return
   \                     ??Read_CSD_MMC_0:
   \   00000028   ........           DC32        `?<Constant {73, 0, 0, 0, 0, 255}>`
    415          }
    416          
    417          //***************************************************************************
    418          //返回制: [0]-success or something error!

   \                                 In segment CODE, align 4, keep-with-next
    419          unsigned char MMC_Start_Read_Sector(unsigned long sector)   //读一个扇区
    420          //***************************************************************************
    421          {
   \                     MMC_Start_Read_Sector:
   \   00000000   70B5               PUSH        {R4-R6,LR}
   \   00000002   82B0               SUB         SP,#+0x8
   \   00000004   041C               MOV         R4,R0
    422             unsigned char retry;
    423             //Command 16 is reading Blocks from MMC/SD-Card
    424             unsigned char CMD[] = {0x51,0x00,0x00,0x00,0x00,0xFF};   //command 17  1010001
   \   00000006   6846               MOV         R0,SP
   \   00000008   1649               LDR         R1,??MMC_Start_Read_Sector_0  ;; `?<Constant {81, 0, 0, 0, 0, 255}>_1`
   \   0000000A   0A68               LDR         R2,[R1, #0]
   \   0000000C   0260               STR         R2,[R0, #0]
   \   0000000E   4A68               LDR         R2,[R1, #+0x4]
   \   00000010   4260               STR         R2,[R0, #+0x4]
    425             unsigned char temp;
    426          
    427             AT91F_PIO_GetInterruptStatus(AT91C_BASE_PIOA);           //clear all interrupt.
   \   00000012   ....               LDR         R0,??DataTable25   ;; 0xfffff400
   \   00000014   ........           _BLF        AT91F_PIO_GetInter

⌨️ 快捷键说明

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