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

📄 msd.txt

📁 MP3_PLAYER.rar
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;;;403      MSD_csd->WrSpeedFact = (CSD_Tab[12] & 0x1C) >> 2;
00012c  f3c00282          UBFX     r2,r0,#2,#3
000130  76a2              STRB     r2,[r4,#0x1a]
;;;404      MSD_csd->MaxWrBlockLen = (CSD_Tab[12] & 0x03) << 2;
000132  0780              LSLS     r0,r0,#30
000134  0f00              LSRS     r0,r0,#28
000136  76e0              STRB     r0,[r4,#0x1b]
;;;405      /* Byte 13 */
;;;406      MSD_csd->MaxWrBlockLen |= (CSD_Tab[13] & 0xc0) >> 6;
000138  7ee2              LDRB     r2,[r4,#0x1b]
00013a  f89d000d          LDRB     r0,[sp,#0xd]
00013e  ea421290          ORR      r2,r2,r0,LSR #6
000142  76e2              STRB     r2,[r4,#0x1b]
;;;407      MSD_csd->WriteBlockPaPartial = (CSD_Tab[13] & 0x20) >> 5;
000144  f3c01240          UBFX     r2,r0,#5,#1
000148  7722              STRB     r2,[r4,#0x1c]
;;;408      MSD_csd->Reserved3 = 0;
00014a  7761              STRB     r1,[r4,#0x1d]
;;;409      MSD_csd->ContentProtectAppli = (CSD_Tab[13] & 0x01);
00014c  f0000001          AND      r0,r0,#1
000150  77a0              STRB     r0,[r4,#0x1e]
;;;410      /* Byte 14 */
;;;411      MSD_csd->FileFormatGrouop = (CSD_Tab[14] & 0x80) >> 7;
000152  f89d000e          LDRB     r0,[sp,#0xe]
000156  09c1              LSRS     r1,r0,#7
000158  77e1              STRB     r1,[r4,#0x1f]
;;;412      MSD_csd->CopyFlag = (CSD_Tab[14] & 0x40) >> 6;
00015a  f3c01180          UBFX     r1,r0,#6,#1
00015e  f8841020          STRB     r1,[r4,#0x20]
;;;413      MSD_csd->PermWrProtect = (CSD_Tab[14] & 0x20) >> 5;
000162  f3c01140          UBFX     r1,r0,#5,#1
000166  f8841021          STRB     r1,[r4,#0x21]
;;;414      MSD_csd->TempWrProtect = (CSD_Tab[14] & 0x10) >> 4;
00016a  f3c01100          UBFX     r1,r0,#4,#1
00016e  f8841022          STRB     r1,[r4,#0x22]
;;;415      MSD_csd->FileFormat = (CSD_Tab[14] & 0x0C) >> 2;
000172  f3c00181          UBFX     r1,r0,#2,#2
000176  f8841023          STRB     r1,[r4,#0x23]
;;;416      MSD_csd->ECC = (CSD_Tab[14] & 0x03);
00017a  f0000003          AND      r0,r0,#3
00017e  f8840024          STRB     r0,[r4,#0x24]
;;;417      /* Byte 15 */
;;;418      MSD_csd->CRC_Check = (CSD_Tab[15] & 0xFE) >> 1;
000182  f89d000f          LDRB     r0,[sp,#0xf]
000186  0840              LSRS     r0,r0,#1
000188  f8840025          STRB     r0,[r4,#0x25]
;;;419      MSD_csd->Reserved4 = 1;
00018c  2001              MOVS     r0,#1
00018e  f8840026          STRB     r0,[r4,#0x26]
;;;420    
;;;421      /* Return the reponse */
;;;422      return rvalue;
000192  4630              MOV      r0,r6
;;;423    }
000194  b004              ADD      sp,sp,#0x10
000196  e8bd81f0          POP      {r4-r8,pc}
;;;424    
                          ENDP

00019a  0000              DCW      0x0000
                  |L13.412|
00019c  40011800          DCD      0x40011800

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

                  MSD_GetCIDRegister PROC
;;;435    u8 MSD_GetCIDRegister(sMSD_CID* MSD_cid)
;;;436    {
000000  e92d41ff          PUSH     {r0-r8,lr}
;;;437      u32 i = 0;
;;;438      u8 rvalue = MSD_RESPONSE_FAILURE;
;;;439      u8 CID_Tab[16];
;;;440    
;;;441      /* MSD chip select low */
;;;442      MSD_CS_LOW();
000004  4f3e              LDR      r7,|L14.256|
000006  4604              MOV      r4,r0                 ;436
000008  2500              MOVS     r5,#0                 ;437
00000a  26ff              MOVS     r6,#0xff              ;438
00000c  2108              MOVS     r1,#8
00000e  4638              MOV      r0,r7
000010  f7fffffe          BL       GPIO_ResetBits
;;;443      /* Send CMD10 (CID register) */
;;;444      MSD_SendCmd(MSD_SEND_CID, 0, 0xFF);
000014  22ff              MOVS     r2,#0xff
000016  2100              MOVS     r1,#0
000018  200a              MOVS     r0,#0xa
00001a  f7fffffe          BL       MSD_SendCmd
;;;445    
;;;446      /* Wait for response in the R1 format (0x00 is no errors) */
;;;447      if (!MSD_GetResponse(MSD_RESPONSE_NO_ERROR))
00001e  2000              MOVS     r0,#0
000020  f7fffffe          BL       MSD_GetResponse
000024  b988              CBNZ     r0,|L14.74|
;;;448      {
;;;449        if (!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ))
000026  20fe              MOVS     r0,#0xfe
000028  f7fffffe          BL       MSD_GetResponse
00002c  b930              CBNZ     r0,|L14.60|
00002e  466e              MOV      r6,sp
                  |L14.48|
;;;450        {
;;;451          /* Store CID register value on CID_Tab */
;;;452          for (i = 0; i < 16; i++)
;;;453          {
;;;454            CID_Tab[i] = MSD_ReadByte();
000030  f7fffffe          BL       MSD_ReadByte
000034  5570              STRB     r0,[r6,r5]
000036  1c6d              ADDS     r5,r5,#1              ;452
000038  2d10              CMP      r5,#0x10              ;452
00003a  d3f9              BCC      |L14.48|
                  |L14.60|
;;;455          }
;;;456        }
;;;457        /* Get CRC bytes (not really needed by us, but required by MSD) */
;;;458        MSD_WriteByte(DUMMY);
00003c  20ff              MOVS     r0,#0xff
00003e  f7fffffe          BL       MSD_WriteByte
;;;459        MSD_WriteByte(DUMMY);
000042  20ff              MOVS     r0,#0xff
000044  f7fffffe          BL       MSD_WriteByte
;;;460        /* Set response value to success */
;;;461        rvalue = MSD_RESPONSE_NO_ERROR;
000048  2600              MOVS     r6,#0
                  |L14.74|
;;;462      }
;;;463    
;;;464      /* MSD chip select high */
;;;465      MSD_CS_HIGH();
00004a  2108              MOVS     r1,#8
00004c  4638              MOV      r0,r7
00004e  f7fffffe          BL       GPIO_SetBits
;;;466      /* Send dummy byte: 8 Clock pulses of delay */
;;;467      MSD_WriteByte(DUMMY);
000052  20ff              MOVS     r0,#0xff
000054  f7fffffe          BL       MSD_WriteByte
;;;468    
;;;469      /* Byte 0 */
;;;470      MSD_cid->ManufacturerID = CID_Tab[0];
000058  f89d0000          LDRB     r0,[sp,#0]
00005c  7020              STRB     r0,[r4,#0]
;;;471      /* Byte 1 */
;;;472      MSD_cid->OEM_AppliID = CID_Tab[1] << 8;
00005e  f89d0001          LDRB     r0,[sp,#1]
000062  0200              LSLS     r0,r0,#8
000064  8060              STRH     r0,[r4,#2]
;;;473      /* Byte 2 */
;;;474      MSD_cid->OEM_AppliID |= CID_Tab[2];
000066  8860              LDRH     r0,[r4,#2]
000068  f89d1002          LDRB     r1,[sp,#2]
00006c  4308              ORRS     r0,r0,r1
00006e  8060              STRH     r0,[r4,#2]
;;;475      /* Byte 3 */
;;;476      MSD_cid->ProdName1 = CID_Tab[3] << 24;
000070  f89d0003          LDRB     r0,[sp,#3]
000074  0600              LSLS     r0,r0,#24
000076  6060              STR      r0,[r4,#4]
;;;477      /* Byte 4 */
;;;478      MSD_cid->ProdName1 |= CID_Tab[4] << 16;
000078  6860              LDR      r0,[r4,#4]
00007a  f89d1004          LDRB     r1,[sp,#4]
00007e  ea404001          ORR      r0,r0,r1,LSL #16
000082  6060              STR      r0,[r4,#4]
;;;479      /* Byte 5 */
;;;480      MSD_cid->ProdName1 |= CID_Tab[5] << 8;
000084  6860              LDR      r0,[r4,#4]
000086  f89d1005          LDRB     r1,[sp,#5]
00008a  ea402001          ORR      r0,r0,r1,LSL #8
00008e  6060              STR      r0,[r4,#4]
;;;481      /* Byte 6 */
;;;482      MSD_cid->ProdName1 |= CID_Tab[6];
000090  6860              LDR      r0,[r4,#4]
000092  f89d1006          LDRB     r1,[sp,#6]
000096  4308              ORRS     r0,r0,r1
000098  6060              STR      r0,[r4,#4]
;;;483      /* Byte 7 */
;;;484      MSD_cid->ProdName2 = CID_Tab[7];
00009a  f89d0007          LDRB     r0,[sp,#7]
00009e  7220              STRB     r0,[r4,#8]
;;;485      /* Byte 8 */
;;;486      MSD_cid->ProdRev = CID_Tab[8];
0000a0  f89d0008          LDRB     r0,[sp,#8]
0000a4  7260              STRB     r0,[r4,#9]
;;;487      /* Byte 9 */
;;;488      MSD_cid->ProdSN = CID_Tab[9] << 24;
0000a6  f89d0009          LDRB     r0,[sp,#9]
0000aa  0600              LSLS     r0,r0,#24
0000ac  60e0              STR      r0,[r4,#0xc]
;;;489      /* Byte 10 */
;;;490      MSD_cid->ProdSN |= CID_Tab[10] << 16;
0000ae  68e0              LDR      r0,[r4,#0xc]
0000b0  f89d100a          LDRB     r1,[sp,#0xa]
0000b4  ea404001          ORR      r0,r0,r1,LSL #16
0000b8  60e0              STR      r0,[r4,#0xc]
;;;491      /* Byte 11 */
;;;492      MSD_cid->ProdSN |= CID_Tab[11] << 8;
0000ba  68e0              LDR      r0,[r4,#0xc]
0000bc  f89d100b          LDRB     r1,[sp,#0xb]
0000c0  ea402001          ORR      r0,r0,r1,LSL #8
0000c4  60e0              STR      r0,[r4,#0xc]
;;;493      /* Byte 12 */
;;;494      MSD_cid->ProdSN |= CID_Tab[12];
0000c6  68e0              LDR      r0,[r4,#0xc]
0000c8  f89d100c          LDRB     r1,[sp,#0xc]
0000cc  4308              ORRS     r0,r0,r1
0000ce  60e0              STR      r0,[r4,#0xc]
;;;495      /* Byte 13 */
;;;496      MSD_cid->Reserved1 |= (CID_Tab[13] & 0xF0) >> 4;
0000d0  7c21              LDRB     r1,[r4,#0x10]
0000d2  f89d000d          LDRB     r0,[sp,#0xd]
0000d6  ea411110          ORR      r1,r1,r0,LSR #4
0000da  7421              STRB     r1,[r4,#0x10]
;;;497      /* Byte 14 */
;;;498      MSD_cid->ManufactDate = (CID_Tab[13] & 0x0F) << 8;
0000dc  0700              LSLS     r0,r0,#28
0000de  0d00              LSRS     r0,r0,#20
0000e0  8260              STRH     r0,[r4,#0x12]
;;;499      /* Byte 15 */
;;;500      MSD_cid->ManufactDate |= CID_Tab[14];
0000e2  8a60              LDRH     r0,[r4,#0x12]
0000e4  f89d100e          LDRB     r1,[sp,#0xe]
0000e8  4308              ORRS     r0,r0,r1
0000ea  8260              STRH     r0,[r4,#0x12]
;;;501      /* Byte 16 */
;;;502      MSD_cid->CRC_Check = (CID_Tab[15] & 0xFE) >> 1;
0000ec  f89d000f          LDRB     r0,[sp,#0xf]
0000f0  0840              LSRS     r0,r0,#1
0000f2  7520              STRB     r0,[r4,#0x14]
;;;503      MSD_cid->Reserved2 = 1;
0000f4  2001              MOVS     r0,#1
0000f6  7560              STRB     r0,[r4,#0x15]
;;;504    
;;;505      /* Return the reponse */
;;;506      return rvalue;
0000f8  4630              MOV      r0,r6
;;;507    }
0000fa  b004              ADD      sp,sp,#0x10
0000fc  e8bd81f0          POP      {r4-r8,pc}
;;;508    
                          ENDP

                  |L14.256|
000100  40011800          DCD      0x40011800

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

                  MSD_GetStatus PROC
;;;635    u16 MSD_GetStatus(void)
;;;636    {
000000  b570              PUSH     {r4-r6,lr}
;;;637      u16 Status = 0;
;;;638    
;;;639      /* MSD chip select low */
;;;640      MSD_CS_LOW();
000002  4d0d              LDR      r5,|L15.56|
000004  2108              MOVS     r1,#8
000006  4628              MOV      r0,r5
000008  f7fffffe          BL       GPIO_ResetBits
;;;641      /* Send CMD13 (MSD_SEND_STATUS) to get MSD status */
;;;642      MSD_SendCmd(MSD_SEND_STATUS, 0, 0xFF);
00000c  22ff              MOVS     r2,#0xff
00000e  2100              MOVS     r1,#0
000010  200d              MOVS     r0,#0xd
000012  f7fffffe          BL       MSD_SendCmd
;;;643    
;;;644      Status = MSD_ReadByte();
000016  f7fffffe          BL       MSD_ReadByte
00001a  4604              MOV      r4,r0
;;;645      Status |= (u16)(MSD_ReadByte() << 8);
00001c  f7fffffe          BL       MSD_ReadByte
000020  ea442400          ORR      r4,r4,r0,LSL #8
;;;646    
;;;647      /* MSD chip select high */
;;;648      MSD_CS_HIGH();
000024  2108              MOVS     r1,#8
000026  4628              MOV      r0,r5
000028  f7fffffe          BL       GPIO_SetBits
;;;649      /* Send dummy byte 0xFF */
;;;650      MSD_WriteByte(DUMMY);
00002c  20ff              MOVS     r0,#0xff
00002e  f7fffffe          BL       MSD_WriteByte
;;;651    
;;;652      return Status;
000032  4620              MOV      r0,r4
;;;653    }
000034  bd70              POP      {r4-r6,pc}
;;;654    
                          ENDP

000036  0000              DCW      0x0000
                  |L15.56|
000038  40011800          DCD      0x40011800

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

                  Get_Medium_Characteristics PROC
;;;793    void Get_Medium_Characteristics(void)
;;;794    {
000000  b510              PUSH     {r4,lr}
;;;795      u32 temp1 = 0;
;;;796      u32 temp2 = 0;
;;;797    
;;;798      MSD_GetCSDRegister(&MSD_csd);
000002  480a              LDR      r0,|L16.44|
000004  f7fffffe          BL       MSD_GetCSDRegister
;;;799    
;;;800      temp1 = MSD_csd.DeviceSize + 1;
000008  4b08              LDR      r3,|L16.44|
00000a  89d8              LDRH     r0,[r3,#0xe]  ; MSD_csd
;;;801      temp2 = 1 << (MSD_csd.DeviceSizeMul + 2);
00000c  7d1c              LDRB     r4,[r3,#0x14]  ; MSD_csd
00000e  1c40              ADDS     r0,r0,#1              ;800
000010  1ca4              ADDS     r4,r4,#2
000012  2101              MOVS     r1,#1
000014  fa01f204          LSL      r2,r1,r4
;;;802    
;;;803      Mass_Block_Count = temp1 * temp2;
000018  4350              MULS     r0,r2,r0
00001a  4a05              LDR      r2,|L16.48|
;;;804    
;;;805      Mass_Block_Size =  1 << MSD_csd.RdBlockLen;
00001c  6010              STR      r0,[r2,#0]  ; Mass_Block_Count
00001e  7a1b              LDRB     r3,[r3,#8]  ; MSD_csd
000020  4099              LSLS     r1,r1,r3
;;;806    
;;;807      Mass_Memory_Size = (Mass_Block_Count * Mass_Block_Size);
000022  4348              MULS     r0,r1,r0
;;;808    
;;;809    }
000024  e9c21001          STRD     r1,r0,[r2,#4]
000028  bd10              POP      {r4,pc}
;;;810    
                          ENDP

00002a  0000              DCW      0x0000
                  |L16.44|
00002c  00000000          DCD      ||.bss||
                  |L16.48|
000030  00000000          DCD      ||.data||

                          AREA ||.data||, DATA, ALIGN=2

                  Mass_Block_Count
000000  00000000          DCD      0x00000000
                  Mass_Block_Size
000004  00000000          DCD      0x00000000
                  Mass_Memory_Size
000008  00000000          DCD      0x00000000

                          AREA ||.bss||, DATA, NOINIT, ALIGN=1

                  MSD_csd
                          %        40

⌨️ 快捷键说明

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