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

📄 msd.txt

📁 MP3_PLAYER.rar
💻 TXT
📖 第 1 页 / 共 4 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 938] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\msd.o --depend=.\Obj\msd.d --device=DARMSTM --apcs=interwork -O3 -I.\Code\FATSystem\INC -I.\Code\Library\INC -I.\Code\SDCard\INC -I.\Code\Speaker\INC -I.\Code\System\INC -I.\Code\USBMassStorage\INC -I.\Code\User\INC -I.\Code\VS1003\INC -ID:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\Obj\msd.crf Code\SDCard\SRC\msd.c]
                          THUMB

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

                  MSD_WriteByte PROC
000000  b570              PUSH     {r4-r6,lr}
000002  4c07              LDR      r4,|L1.32|
000004  4605              MOV      r5,r0
                  |L1.6|
000006  2102              MOVS     r1,#2
000008  4620              MOV      r0,r4
00000a  f7fffffe          BL       SPI_I2S_GetFlagStatus
00000e  2800              CMP      r0,#0
000010  d0f9              BEQ      |L1.6|
000012  4629              MOV      r1,r5
000014  4620              MOV      r0,r4
000016  e8bd4070          POP      {r4-r6,lr}
00001a  f7ffbffe          B.W      SPI_I2S_SendData
                          ENDP

00001e  0000              DCW      0x0000
                  |L1.32|
000020  40013000          DCD      0x40013000

                          AREA ||i.MSD_SendCmd||, CODE, READONLY, ALIGN=1

                  MSD_SendCmd PROC
;;;518    void MSD_SendCmd(u8 Cmd, u32 Arg, u8 Crc)
;;;519    {
000000  b57c              PUSH     {r2-r6,lr}
;;;520      u32 i = 0x00;
;;;521      u8 Frame[6];
;;;522    
;;;523      /* Construct byte1 */
;;;524      Frame[0] = (Cmd | 0x40);
000002  f0400040          ORR      r0,r0,#0x40
000006  f88d0000          STRB     r0,[sp,#0]
;;;525      /* Construct byte2 */
;;;526      Frame[1] = (u8)(Arg >> 24);
00000a  0e08              LSRS     r0,r1,#24
00000c  f88d0001          STRB     r0,[sp,#1]
;;;527      /* Construct byte3 */
;;;528      Frame[2] = (u8)(Arg >> 16);
000010  0c08              LSRS     r0,r1,#16
000012  2400              MOVS     r4,#0                 ;520
000014  f88d0002          STRB     r0,[sp,#2]
;;;529      /* Construct byte4 */
;;;530      Frame[3] = (u8)(Arg >> 8);
000018  0a08              LSRS     r0,r1,#8
;;;531      /* Construct byte5 */
;;;532      Frame[4] = (u8)(Arg);
00001a  f88d1004          STRB     r1,[sp,#4]
00001e  f88d0003          STRB     r0,[sp,#3]            ;530
;;;533      /* Construct CRC: byte6 */
;;;534      Frame[5] = (Crc);
000022  f88d2005          STRB     r2,[sp,#5]
000026  466d              MOV      r5,sp
                  |L2.40|
;;;535    
;;;536      /* Send the Cmd bytes */
;;;537      for (i = 0; i < 6; i++)
;;;538      {
;;;539        MSD_WriteByte(Frame[i]);
000028  5d28              LDRB     r0,[r5,r4]
00002a  f7fffffe          BL       MSD_WriteByte
00002e  1c64              ADDS     r4,r4,#1              ;537
000030  2c06              CMP      r4,#6                 ;537
000032  d3f9              BCC      |L2.40|
;;;540      }
;;;541    }
000034  bd7c              POP      {r2-r6,pc}
;;;542    
                          ENDP


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

                  MSD_ReadByte PROC
;;;723    u8 MSD_ReadByte(void)
;;;724    {
000000  b510              PUSH     {r4,lr}
000002  4c0b              LDR      r4,|L3.48|
                  |L3.4|
;;;725      u8 Data = 0;
;;;726    
;;;727      /* Wait until the transmit buffer is empty */
;;;728      while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
000004  2102              MOVS     r1,#2
000006  4620              MOV      r0,r4
000008  f7fffffe          BL       SPI_I2S_GetFlagStatus
00000c  2800              CMP      r0,#0
00000e  d0f9              BEQ      |L3.4|
;;;729      /* Send the byte */
;;;730      SPI_I2S_SendData(SPI1, DUMMY);
000010  21ff              MOVS     r1,#0xff
000012  4620              MOV      r0,r4
000014  f7fffffe          BL       SPI_I2S_SendData
                  |L3.24|
;;;731    
;;;732      /* Wait until a data is received */
;;;733      while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
000018  2101              MOVS     r1,#1
00001a  4620              MOV      r0,r4
00001c  f7fffffe          BL       SPI_I2S_GetFlagStatus
000020  2800              CMP      r0,#0
000022  d0f9              BEQ      |L3.24|
;;;734      /* Get the received data */
;;;735      Data = SPI_I2S_ReceiveData(SPI1);
000024  4620              MOV      r0,r4
000026  f7fffffe          BL       SPI_I2S_ReceiveData
00002a  b2c0              UXTB     r0,r0
;;;736    
;;;737      /* Return the shifted data */
;;;738      return Data;
;;;739    }
00002c  bd10              POP      {r4,pc}
;;;740    
                          ENDP

00002e  0000              DCW      0x0000
                  |L3.48|
000030  40013000          DCD      0x40013000

                          AREA ||i.MSD_GetResponse||, CODE, READONLY, ALIGN=1

                  MSD_GetResponse PROC
000000  b570              PUSH     {r4-r6,lr}
000002  4605              MOV      r5,r0
000004  f64074ff          MOV      r4,#0xfff
000008  e000              B        |L4.12|
                  |L4.10|
00000a  1e64              SUBS     r4,r4,#1
                  |L4.12|
00000c  f7fffffe          BL       MSD_ReadByte
000010  42a8              CMP      r0,r5
000012  d002              BEQ      |L4.26|
000014  2c00              CMP      r4,#0
000016  d1f8              BNE      |L4.10|
000018  e000              B        |L4.28|
                  |L4.26|
00001a  b90c              CBNZ     r4,|L4.32|
                  |L4.28|
00001c  20ff              MOVS     r0,#0xff
00001e  bd70              POP      {r4-r6,pc}
                  |L4.32|
000020  2000              MOVS     r0,#0
000022  bd70              POP      {r4-r6,pc}
                          ENDP


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

                  MSD_GoIdleState PROC
;;;663    u8 MSD_GoIdleState(void)
;;;664    {
000000  b510              PUSH     {r4,lr}
;;;665      /* MSD chip select low */
;;;666      MSD_CS_LOW();
000002  4c17              LDR      r4,|L5.96|
000004  2108              MOVS     r1,#8
000006  4620              MOV      r0,r4
000008  f7fffffe          BL       GPIO_ResetBits
;;;667      /* Send CMD0 (GO_IDLE_STATE) to put MSD in SPI mode */
;;;668      MSD_SendCmd(MSD_GO_IDLE_STATE, 0, 0x95);
00000c  2100              MOVS     r1,#0
00000e  2295              MOVS     r2,#0x95
000010  4608              MOV      r0,r1
000012  f7fffffe          BL       MSD_SendCmd
;;;669    
;;;670      /* Wait for In Idle State Response (R1 Format) equal to 0x01 */
;;;671      if (MSD_GetResponse(MSD_IN_IDLE_STATE))
000016  2001              MOVS     r0,#1
000018  f7fffffe          BL       MSD_GetResponse
00001c  b108              CBZ      r0,|L5.34|
;;;672      {
;;;673        /* No Idle State Response: return response failue */
;;;674        return MSD_RESPONSE_FAILURE;
00001e  20ff              MOVS     r0,#0xff
;;;675      }
;;;676      /*----------Activates the card initialization process-----------*/
;;;677      do
;;;678      {
;;;679        /* MSD chip select high */
;;;680        MSD_CS_HIGH();
;;;681        /* Send Dummy byte 0xFF */
;;;682        MSD_WriteByte(DUMMY);
;;;683    
;;;684        /* MSD chip select low */
;;;685        MSD_CS_LOW();
;;;686    
;;;687        /* Send CMD1 (Activates the card process) until response equal to 0x0 */
;;;688        MSD_SendCmd(MSD_SEND_OP_COND, 0, 0xFF);
;;;689        /* Wait for no error Response (R1 Format) equal to 0x00 */
;;;690      }
;;;691      while (MSD_GetResponse(MSD_RESPONSE_NO_ERROR));
;;;692    
;;;693      /* MSD chip select high */
;;;694      MSD_CS_HIGH();
;;;695      /* Send dummy byte 0xFF */
;;;696      MSD_WriteByte(DUMMY);
;;;697    
;;;698      return MSD_RESPONSE_NO_ERROR;
;;;699    }
000020  bd10              POP      {r4,pc}
                  |L5.34|
000022  2108              MOVS     r1,#8                 ;680
000024  4620              MOV      r0,r4                 ;680
000026  f7fffffe          BL       GPIO_SetBits
00002a  20ff              MOVS     r0,#0xff              ;682
00002c  f7fffffe          BL       MSD_WriteByte
000030  2108              MOVS     r1,#8                 ;685
000032  4620              MOV      r0,r4                 ;685
000034  f7fffffe          BL       GPIO_ResetBits
000038  22ff              MOVS     r2,#0xff              ;688
00003a  2100              MOVS     r1,#0                 ;688
00003c  2001              MOVS     r0,#1                 ;688
00003e  f7fffffe          BL       MSD_SendCmd
000042  2000              MOVS     r0,#0                 ;691
000044  f7fffffe          BL       MSD_GetResponse
000048  2800              CMP      r0,#0                 ;691
00004a  d1ea              BNE      |L5.34|
00004c  2108              MOVS     r1,#8                 ;694
00004e  4620              MOV      r0,r4                 ;694
000050  f7fffffe          BL       GPIO_SetBits
000054  20ff              MOVS     r0,#0xff              ;696
000056  f7fffffe          BL       MSD_WriteByte
00005a  2000              MOVS     r0,#0                 ;698
00005c  bd10              POP      {r4,pc}
;;;700    
                          ENDP

00005e  0000              DCW      0x0000
                  |L5.96|
000060  40011800          DCD      0x40011800

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

                  SPI_Config PROC
;;;748    void SPI_Config(u16 BaudRatePrescaler)
;;;749    {
000000  b530              PUSH     {r4,r5,lr}
000002  4605              MOV      r5,r0
000004  b087              SUB      sp,sp,#0x1c
;;;750      GPIO_InitTypeDef  GPIO_InitStructure;
;;;751      SPI_InitTypeDef   SPI_InitStructure;
;;;752    
;;;753      /* GPIOA and GPIOC Periph clock enable */
;;;754      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOE, ENABLE);
000006  2101              MOVS     r1,#1
000008  2044              MOVS     r0,#0x44
00000a  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;755      /* SPI1 Periph clock enable */
;;;756      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
00000e  2101              MOVS     r1,#1
000010  0308              LSLS     r0,r1,#12
000012  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;757    
;;;758      /* Configure SPI1 pins: SCK, MISO and MOSI */
;;;759      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
000016  20e0              MOVS     r0,#0xe0
000018  f8ad0018          STRH     r0,[sp,#0x18]
;;;760      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00001c  2403              MOVS     r4,#3
00001e  f88d401a          STRB     r4,[sp,#0x1a]
;;;761      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
000022  2018              MOVS     r0,#0x18
000024  f88d001b          STRB     r0,[sp,#0x1b]
;;;762      GPIO_Init(GPIOA, &GPIO_InitStructure);
000028  a906              ADD      r1,sp,#0x18
00002a  4819              LDR      r0,|L6.144|
00002c  f7fffffe          BL       GPIO_Init
;;;763    
;;;764      /* Configure PE3 pin: CS pin */
;;;765      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
000030  2008              MOVS     r0,#8
000032  f8ad0018          STRH     r0,[sp,#0x18]
;;;766      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000036  f88d401a          STRB     r4,[sp,#0x1a]
;;;767      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
00003a  2010              MOVS     r0,#0x10
00003c  f88d001b          STRB     r0,[sp,#0x1b]
;;;768      GPIO_Init(GPIOE, &GPIO_InitStructure);
000040  a906              ADD      r1,sp,#0x18
000042  4814              LDR      r0,|L6.148|
000044  f7fffffe          BL       GPIO_Init
;;;769    
;;;770      /* SPI1 Config */
;;;771      SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
000048  2000              MOVS     r0,#0
00004a  f8ad0004          STRH     r0,[sp,#4]
;;;772      SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
;;;773      SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
00004e  f8ad0008          STRH     r0,[sp,#8]
000052  f44f7182          MOV      r1,#0x104             ;772
000056  f8ad1006          STRH     r1,[sp,#6]            ;772
;;;774      SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
00005a  2102              MOVS     r1,#2
00005c  f8ad100a          STRH     r1,[sp,#0xa]
;;;775      SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
000060  2101              MOVS     r1,#1
;;;776      SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
;;;777      SPI_InitStructure.SPI_BaudRatePrescaler = BaudRatePrescaler;
000062  f8ad5010          STRH     r5,[sp,#0x10]
000066  f8ad100c          STRH     r1,[sp,#0xc]          ;775
;;;778      SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
00006a  f8ad0012          STRH     r0,[sp,#0x12]
00006e  0249              LSLS     r1,r1,#9              ;776
;;;779      SPI_InitStructure.SPI_CRCPolynomial = 7;
000070  2007              MOVS     r0,#7
;;;780      SPI_Init(SPI1, &SPI_InitStructure);
000072  4c09              LDR      r4,|L6.152|
000074  f8ad100e          STRH     r1,[sp,#0xe]          ;776
000078  f8ad0014          STRH     r0,[sp,#0x14]         ;779
00007c  a901              ADD      r1,sp,#4
00007e  4620              MOV      r0,r4
000080  f7fffffe          BL       SPI_Init
;;;781    
;;;782      /* SPI1 enable */
;;;783      SPI_Cmd(SPI1, ENABLE);
000084  2101              MOVS     r1,#1
000086  4620              MOV      r0,r4
000088  f7fffffe          BL       SPI_Cmd
;;;784    }
00008c  b007              ADD      sp,sp,#0x1c
00008e  bd30              POP      {r4,r5,pc}
;;;785    
                          ENDP

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

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

                  MSD_Init PROC
;;;57     u8 MSD_Init(void)
;;;58     {
000000  b510              PUSH     {r4,lr}
;;;59       u32 i = 0;
000002  2400              MOVS     r4,#0
;;;60     
;;;61       /* Initialize SPI1 */
;;;62       SPI_Config(SPI_BaudRatePrescaler_32);
000004  2020              MOVS     r0,#0x20
000006  f7fffffe          BL       SPI_Config
;;;63       /* MSD chip select high */
;;;64       MSD_CS_HIGH();
00000a  2108              MOVS     r1,#8
00000c  4806              LDR      r0,|L7.40|
00000e  f7fffffe          BL       GPIO_SetBits
                  |L7.18|
;;;65       /* Send dummy byte 0xFF, 10 times with CS high*/

⌨️ 快捷键说明

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