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

📄 msd.txt

📁 MP3_PLAYER.rar
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;;;440    
;;;441      /* MSD chip select low */
;;;442      MSD_CS_LOW();
000004  4f3e              LDR      r7,|L13.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,|L13.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,|L13.60|
00002e  466e              MOV      r6,sp
                  |L13.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      |L13.48|
                  |L13.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
                  |L13.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

                  |L13.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,|L14.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
                  |L14.56|
000038  40011800          DCD      0x40011800

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

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

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

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

                  SPI_Config PROC
000000  b510              PUSH     {r4,lr}
000002  b086              SUB      sp,sp,#0x18
000004  2101              MOVS     r1,#1
000006  2044              MOVS     r0,#0x44
000008  f7fffffe          BL       RCC_APB2PeriphClockCmd
00000c  2101              MOVS     r1,#1
00000e  0308              LSLS     r0,r1,#12
000010  f7fffffe          BL       RCC_APB2PeriphClockCmd
000014  20e0              MOVS     r0,#0xe0
000016  f8ad0014          STRH     r0,[sp,#0x14]
00001a  2403              MOVS     r4,#3
00001c  f88d4016          STRB     r4,[sp,#0x16]
000020  2018              MOVS     r0,#0x18
000022  f88d0017          STRB     r0,[sp,#0x17]
000026  a905              ADD      r1,sp,#0x14
000028  4819              LDR      r0,|L16.144|
00002a  f7fffffe          BL       GPIO_Init
00002e  2008              MOVS     r0,#8
000030  f8ad0014          STRH     r0,[sp,#0x14]
000034  f88d4016          STRB     r4,[sp,#0x16]
000038  2010              MOVS     r0,#0x10
00003a  f88d0017          STRB     r0,[sp,#0x17]
00003e  a905              ADD      r1,sp,#0x14
000040  4814              LDR      r0,|L16.148|
000042  f7fffffe          BL       GPIO_Init
000046  2000              MOVS     r0,#0
000048  f8ad0000          STRH     r0,[sp,#0]
00004c  f44f7182          MOV      r1,#0x104
000050  f8ad1002          STRH     r1,[sp,#2]
000054  f8ad0004          STRH     r0,[sp,#4]
000058  2102              MOVS     r1,#2
00005a  f8ad1006          STRH     r1,[sp,#6]
00005e  2101              MOVS     r1,#1
000060  f8ad1008          STRH     r1,[sp,#8]
000064  0249              LSLS     r1,r1,#9
000066  f8ad100a          STRH     r1,[sp,#0xa]
00006a  2120              MOVS     r1,#0x20
00006c  f8ad100c          STRH     r1,[sp,#0xc]
000070  f8ad000e          STRH     r0,[sp,#0xe]
000074  2007              MOVS     r0,#7
000076  4c08              LDR      r4,|L16.152|
000078  f8ad0010          STRH     r0,[sp,#0x10]
00007c  4669              MOV      r1,sp
00007e  4620              MOV      r0,r4
000080  f7fffffe          BL       SPI_Init
000084  2101              MOVS     r1,#1
000086  4620              MOV      r0,r4
000088  f7fffffe          BL       SPI_Cmd
00008c  b006              ADD      sp,sp,#0x18
00008e  bd10              POP      {r4,pc}
                          ENDP

                  |L16.144|
000090  40010800          DCD      0x40010800
                  |L16.148|
000094  40011800          DCD      0x40011800
                  |L16.152|
000098  40013000          DCD      0x40013000

                          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 + -