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

📄 msd.txt

📁 MP3_PLAYER.rar
💻 TXT
📖 第 1 页 / 共 4 页
字号:
00002a  2800              CMP      r0,#0                 ;593
00002c  d0fb              BEQ      |L7.38|
00002e  4620              MOV      r0,r4                 ;595
000030  bd70              POP      {r4-r6,pc}
;;;597    
                          ENDP


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

                  MSD_WriteBlock PROC
;;;88     u8 MSD_WriteBlock(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite)
;;;89     {
000000  e92d47f0          PUSH     {r4-r10,lr}
;;;90       u32 i = 0;
;;;91       u8 rvalue = MSD_RESPONSE_FAILURE;
;;;92     
;;;93       /* MSD chip select low */
;;;94       MSD_CS_LOW();
000004  f8df8068          LDR      r8,|L8.112|
000008  4605              MOV      r5,r0                 ;89
00000a  4689              MOV      r9,r1                 ;89
00000c  4616              MOV      r6,r2                 ;89
00000e  2400              MOVS     r4,#0                 ;90
000010  27ff              MOVS     r7,#0xff              ;91
000012  2108              MOVS     r1,#8
000014  4640              MOV      r0,r8
000016  f7fffffe          BL       GPIO_ResetBits
;;;95       /* Send CMD24 (MSD_WRITE_BLOCK) to write multiple block */
;;;96       MSD_SendCmd(MSD_WRITE_BLOCK, WriteAddr, 0xFF);
00001a  22ff              MOVS     r2,#0xff
00001c  4649              MOV      r1,r9
00001e  2018              MOVS     r0,#0x18
000020  f7fffffe          BL       MSD_SendCmd
;;;97     
;;;98       /* Check if the MSD acknowledged the write block command: R1 response (0x00: no errors) */
;;;99       if (!MSD_GetResponse(MSD_RESPONSE_NO_ERROR))
000024  2000              MOVS     r0,#0
000026  f7fffffe          BL       MSD_GetResponse
00002a  b9b0              CBNZ     r0,|L8.90|
;;;100      {
;;;101        /* Send a dummy byte */
;;;102        MSD_WriteByte(DUMMY);
00002c  20ff              MOVS     r0,#0xff
00002e  f7fffffe          BL       MSD_WriteByte
;;;103        /* Send the data token to signify the start of the data */
;;;104        MSD_WriteByte(0xFE);
000032  20fe              MOVS     r0,#0xfe
000034  f7fffffe          BL       MSD_WriteByte
;;;105        /* Write the block data to MSD : write count data by block */
;;;106        for (i = 0; i < NumByteToWrite; i++)
000038  e004              B        |L8.68|
                  |L8.58|
;;;107        {
;;;108          /* Send the pointed byte */
;;;109          MSD_WriteByte(*pBuffer);
00003a  7828              LDRB     r0,[r5,#0]
00003c  f7fffffe          BL       MSD_WriteByte
;;;110          /* Point to the next location where the byte read will be saved */
;;;111          pBuffer++;
000040  1c6d              ADDS     r5,r5,#1
000042  1c64              ADDS     r4,r4,#1              ;106
                  |L8.68|
000044  42b4              CMP      r4,r6                 ;106
000046  d3f8              BCC      |L8.58|
;;;112        }
;;;113        /* Put CRC bytes (not really needed by us, but required by MSD) */
;;;114        MSD_ReadByte();
000048  f7fffffe          BL       MSD_ReadByte
;;;115        MSD_ReadByte();
00004c  f7fffffe          BL       MSD_ReadByte
;;;116        /* Read data response */
;;;117        if (MSD_GetDataResponse() == MSD_DATA_OK)
000050  f7fffffe          BL       MSD_GetDataResponse
000054  2805              CMP      r0,#5
000056  d100              BNE      |L8.90|
;;;118        {
;;;119          rvalue = MSD_RESPONSE_NO_ERROR;
000058  2700              MOVS     r7,#0
                  |L8.90|
;;;120        }
;;;121      }
;;;122    
;;;123      /* MSD chip select high */
;;;124      MSD_CS_HIGH();
00005a  2108              MOVS     r1,#8
00005c  4640              MOV      r0,r8
00005e  f7fffffe          BL       GPIO_SetBits
;;;125      /* Send dummy byte: 8 Clock pulses of delay */
;;;126      MSD_WriteByte(DUMMY);
000062  20ff              MOVS     r0,#0xff
000064  f7fffffe          BL       MSD_WriteByte
;;;127      /* Returns the reponse */
;;;128      return rvalue;
000068  4638              MOV      r0,r7
;;;129    }
00006a  e8bd87f0          POP      {r4-r10,pc}
;;;130    
                          ENDP

00006e  0000              DCW      0x0000
                  |L8.112|
000070  40011800          DCD      0x40011800

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

                  MSD_ReadBlock PROC
;;;142    u8 MSD_ReadBlock(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead)
;;;143    {
000000  e92d47f0          PUSH     {r4-r10,lr}
;;;144      u32 i = 0;
;;;145      u8 rvalue = MSD_RESPONSE_FAILURE;
;;;146    
;;;147      /* MSD chip select low */
;;;148      MSD_CS_LOW();
000004  4f18              LDR      r7,|L9.104|
000006  4605              MOV      r5,r0                 ;143
000008  4689              MOV      r9,r1                 ;143
00000a  4616              MOV      r6,r2                 ;143
00000c  2400              MOVS     r4,#0                 ;144
00000e  f04f08ff          MOV      r8,#0xff              ;145
000012  2108              MOVS     r1,#8
000014  4638              MOV      r0,r7
000016  f7fffffe          BL       GPIO_ResetBits
;;;149      /* Send CMD17 (MSD_READ_SINGLE_BLOCK) to read one block */
;;;150      MSD_SendCmd(MSD_READ_SINGLE_BLOCK, ReadAddr, 0xFF);
00001a  22ff              MOVS     r2,#0xff
00001c  4649              MOV      r1,r9
00001e  2011              MOVS     r0,#0x11
000020  f7fffffe          BL       MSD_SendCmd
;;;151    
;;;152      /* Check if the MSD acknowledged the read block command: R1 response (0x00: no errors) */
;;;153      if (!MSD_GetResponse(MSD_RESPONSE_NO_ERROR))
000024  2000              MOVS     r0,#0
000026  f7fffffe          BL       MSD_GetResponse
00002a  b990              CBNZ     r0,|L9.82|
;;;154      {
;;;155        /* Now look for the data token to signify the start of the data */
;;;156        if (!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ))
00002c  20fe              MOVS     r0,#0xfe
00002e  f7fffffe          BL       MSD_GetResponse
000032  b970              CBNZ     r0,|L9.82|
000034  e005              B        |L9.66|
;;;157        {
;;;158          /* Read the MSD block data : read NumByteToRead data */
;;;159          for (i = 0; i < NumByteToRead; i++)
;;;160          {
;;;161            /* Save the received data */
;;;162            *pBuffer = MSD_ReadByte();
000036  bf00              NOP      
                  |L9.56|
000038  f7fffffe          BL       MSD_ReadByte
00003c  f8050b01          STRB     r0,[r5],#1
000040  1c64              ADDS     r4,r4,#1              ;159
                  |L9.66|
000042  42b4              CMP      r4,r6                 ;159
000044  d3f8              BCC      |L9.56|
;;;163            /* Point to the next location where the byte read will be saved */
;;;164            pBuffer++;
;;;165          }
;;;166          /* Get CRC bytes (not really needed by us, but required by MSD) */
;;;167          MSD_ReadByte();
000046  f7fffffe          BL       MSD_ReadByte
;;;168          MSD_ReadByte();
00004a  f7fffffe          BL       MSD_ReadByte
;;;169          /* Set response value to success */
;;;170          rvalue = MSD_RESPONSE_NO_ERROR;
00004e  f04f0800          MOV      r8,#0
                  |L9.82|
;;;171        }
;;;172      }
;;;173    
;;;174      /* MSD chip select high */
;;;175      MSD_CS_HIGH();
000052  2108              MOVS     r1,#8
000054  4638              MOV      r0,r7
000056  f7fffffe          BL       GPIO_SetBits
;;;176      /* Send dummy byte: 8 Clock pulses of delay */
;;;177      MSD_WriteByte(DUMMY);
00005a  20ff              MOVS     r0,#0xff
00005c  f7fffffe          BL       MSD_WriteByte
;;;178      /* Returns the reponse */
;;;179      return rvalue;
000060  4640              MOV      r0,r8
;;;180    }
000062  e8bd87f0          POP      {r4-r10,pc}
;;;181    
                          ENDP

000066  0000              DCW      0x0000
                  |L9.104|
000068  40011800          DCD      0x40011800

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

                  MSD_WriteBuffer PROC
;;;193    u8 MSD_WriteBuffer(u8* pBuffer, u32 WriteAddr, u32 NumByteToWrite)
;;;194    {
000000  e92d47f0          PUSH     {r4-r10,lr}
;;;195      u32 i = 0, NbrOfBlock = 0, Offset = 0;
;;;196      u8 rvalue = MSD_RESPONSE_FAILURE;
;;;197    
;;;198      /* Calculate number of blocks to write */
;;;199      NbrOfBlock = NumByteToWrite / BLOCK_SIZE;
;;;200      /* MSD chip select low */
;;;201      MSD_CS_LOW();
000004  f8dfa080          LDR      r10,|L10.136|
000008  4605              MOV      r5,r0                 ;194
00000a  4689              MOV      r9,r1                 ;194
00000c  2600              MOVS     r6,#0                 ;195
00000e  24ff              MOVS     r4,#0xff              ;196
000010  0a57              LSRS     r7,r2,#9              ;199
000012  2108              MOVS     r1,#8
000014  4650              MOV      r0,r10
000016  f7fffffe          BL       GPIO_ResetBits
;;;202    
;;;203      /* Data transfer */
;;;204      while (NbrOfBlock --)
00001a  e02a              B        |L10.114|
                  |L10.28|
;;;205      {
;;;206        /* Send CMD24 (MSD_WRITE_BLOCK) to write blocks */
;;;207        MSD_SendCmd(MSD_WRITE_BLOCK, WriteAddr + Offset, 0xFF);
00001c  eb090106          ADD      r1,r9,r6
000020  22ff              MOVS     r2,#0xff
000022  2018              MOVS     r0,#0x18
000024  f7fffffe          BL       MSD_SendCmd
;;;208    
;;;209        /* Check if the MSD acknowledged the write block command: R1 response (0x00: no errors) */
;;;210        if (MSD_GetResponse(MSD_RESPONSE_NO_ERROR))
000028  2000              MOVS     r0,#0
00002a  f7fffffe          BL       MSD_GetResponse
00002e  2800              CMP      r0,#0
;;;211        {
;;;212          return MSD_RESPONSE_FAILURE;
000030  f04f00ff          MOV      r0,#0xff
000034  d001              BEQ      |L10.58|
                  |L10.54|
;;;213        }
;;;214        /* Send dummy byte */
;;;215        MSD_WriteByte(DUMMY);
;;;216        /* Send the data token to signify the start of the data */
;;;217        MSD_WriteByte(MSD_START_DATA_SINGLE_BLOCK_WRITE);
;;;218        /* Write the block data to MSD : write count data by block */
;;;219        for (i = 0; i < BLOCK_SIZE; i++)
;;;220        {
;;;221          /* Send the pointed byte */
;;;222          MSD_WriteByte(*pBuffer);
;;;223          /* Point to the next location where the byte read will be saved */
;;;224          pBuffer++;
;;;225        }
;;;226        /* Set next write address */
;;;227        Offset += 512;
;;;228        /* Put CRC bytes (not really needed by us, but required by MSD) */
;;;229        MSD_ReadByte();
;;;230        MSD_ReadByte();
;;;231        /* Read data response */
;;;232        if (MSD_GetDataResponse() == MSD_DATA_OK)
;;;233        {
;;;234          /* Set response value to success */
;;;235          rvalue = MSD_RESPONSE_NO_ERROR;
;;;236        }
;;;237        else
;;;238        {
;;;239          /* Set response value to failure */
;;;240          rvalue = MSD_RESPONSE_FAILURE;
;;;241        }
;;;242      }
;;;243    
;;;244      /* MSD chip select high */
;;;245      MSD_CS_HIGH();
;;;246      /* Send dummy byte: 8 Clock pulses of delay */
;;;247      MSD_WriteByte(DUMMY);
;;;248      /* Returns the reponse */
;;;249      return rvalue;
;;;250    }
000036  e8bd87f0          POP      {r4-r10,pc}
                  |L10.58|
00003a  f7fffffe          BL       MSD_WriteByte
00003e  20fe              MOVS     r0,#0xfe              ;217
000040  f7fffffe          BL       MSD_WriteByte
000044  2400              MOVS     r4,#0                 ;219
000046  f44f7800          MOV      r8,#0x200             ;219
                  |L10.74|
00004a  7828              LDRB     r0,[r5,#0]            ;222
00004c  f7fffffe          BL       MSD_WriteByte
000050  1c6d              ADDS     r5,r5,#1              ;224
000052  1c64              ADDS     r4,r4,#1              ;219
000054  4544              CMP      r4,r8                 ;219
000056  d3f8              BCC      |L10.74|
000058  f5067600          ADD      r6,r6,#0x200          ;227
00005c  f7fffffe          BL       MSD_ReadByte
000060  f7fffffe          BL       MSD_ReadByte
000064  f7fffffe          BL       MSD_GetDataResponse
000068  2805              CMP      r0,#5                 ;232
00006a  d101              BNE      |L10.112|
00006c  2400              MOVS     r4,#0                 ;235
00006e  e000              B        |L10.114|
                  |L10.112|
000070  24ff              MOVS     r4,#0xff              ;240
                  |L10.114|
000072  1e7f              SUBS     r7,r7,#1              ;204
000074  d2d2              BCS      |L10.28|
000076  2108              MOVS     r1,#8                 ;245
000078  4650              MOV      r0,r10                ;245
00007a  f7fffffe          BL       GPIO_SetBits
00007e  20ff              MOVS     r0,#0xff              ;247
000080  f7fffffe          BL       MSD_WriteByte
000084  4620              MOV      r0,r4                 ;249
000086  e7d6              B        |L10.54|
;;;251    
                          ENDP

                  |L10.136|
000088  40011800          DCD      0x40011800

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

                  MSD_ReadBuffer PROC
;;;263    u8 MSD_ReadBuffer(u8* pBuffer, u32 ReadAddr, u32 NumByteToRead)
;;;264    {
000000  e92d47f0          PUSH     {r4-r10,lr}
;;;265      u32 i = 0, NbrOfBlock = 0, Offset = 0;
;;;266      u8 rvalue = MSD_RESPONSE_FAILURE;
;;;267    
;;;268      /* Calculate number of blocks to read */
;;;269      NbrOfBlock = NumByteToRead / BLOCK_SIZE;
;;;270      /* MSD chip select low */
;;;271      MSD_CS_LOW();
000004  f8dfa074          LDR      r10,|L11.124|
000008  4605              MOV      r5,r0                 ;264
00000a  4689              MOV      r9,r1                 ;264
00000c  2600              MOVS     r6,#0                 ;265
00000e  24ff              MOVS     r4,#0xff              ;266
000010  0a57              LSRS     r7,r2,#9              ;269
000012  2108              MOVS     r1,#8
000014  4650              MOV      r0,r10
000016  f7fffffe          BL       GPIO_ResetBits
00001a  f44f7800          MOV      r8,#0x200
00001e  e021              B        |L11.100|
                  |L11.32|
;;;272    
;;;273      /* Data transfer */
;;;274      while (NbrOfBlock --)
;;;275      {
;;;276        /* Send CMD17 (MSD_READ_SINGLE_BLOCK) to read one block */
;;;277        MSD_SendCmd (MSD_READ_SINGLE_BLOCK, ReadAddr + Offset, 0xFF);

⌨️ 快捷键说明

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