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

📄 sdspi.lst

📁 Tried to make CAN logger on AT91sam7X-ek, but have no idea how to implement FATFs... -( I m just a
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000020   ........           BL       SDSPI_Read
    354                  if (error) {
   \   00000024   0010B0E1           MOVS     R1,R0
   \   00000028   0700001A           BNE      ??SDSPI_GetDataResp_1
    355                      return error;
    356                  }
    357                  if (((resp & 0x11) == 0x1) || ((resp & 0xf0) == 0))
   \   0000002C   0000DDE5           LDRB     R0,[SP, #+0]
   \   00000030   110000E2           AND      R0,R0,#0x11
   \   00000034   010050E3           CMP      R0,#+1
   \   00000038   0000DD15           LDRBNE   R0,[SP, #+0]
   \   0000003C   F0001013           TSTNE    R0,#0xF0
    358                      break;
    359          
    360                  respRetry--;
   \   00000040   01505512           SUBSNE   R5,R5,#+1
    361              } while(respRetry > 0);
   \   00000044   F2FFFF1A           BNE      ??SDSPI_GetDataResp_0
    362              //TRACE_DEBUG("SDSPI_GetDataResp 0x%X\n\r",resp);
    363              return resp;
   \   00000048   0000DDE5           LDRB     R0,[SP, #+0]
   \                     ??SDSPI_GetDataResp_1:
   \   0000004C   3240BDE8           POP      {R1,R4,R5,LR}
   \   00000050   1EFF2FE1           BX       LR               ;; return
    364          }
    365          
    366          //------------------------------------------------------------------------------
    367          /// Starts a SPI master transfer. This is a non blocking function. It will
    368          /// return as soon as the transfer is started.
    369          /// Returns 0 if the transfer has been started successfully; otherwise returns
    370          /// error.
    371          /// \param pSdSpi  Pointer to a SdSpi instance.
    372          /// \param pCommand Pointer to the SPI command to execute.
    373          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    374          unsigned char SDSPI_SendCommand(SdSpi *pSdSpi, SdSpiCmd *pCommand)
    375          {
   \                     SDSPI_SendCommand:
   \   00000000   F04F2DE9           PUSH     {R4-R11,LR}
   \   00000004   0CD04DE2           SUB      SP,SP,#+12
   \   00000008   0040A0E1           MOV      R4,R0
   \   0000000C   0150A0E1           MOV      R5,R1
    376              AT91S_SPI *pSpiHw = pSdSpi->pSpiHw;
    377              unsigned char CmdToken[6];
    378              unsigned char *pData;
    379              unsigned int blockSize;
    380              unsigned int i;
    381              unsigned char error;
    382              unsigned char dataHeader;
    383              unsigned int dataRetry1 = 100;
   \   00000010   6460A0E3           MOV      R6,#+100
    384              unsigned int dataRetry2 = 100;
   \   00000014   64B0A0E3           MOV      R11,#+100
    385              unsigned char crc[2];
    386              unsigned char crcPrev = 0;
    387              unsigned char crcPrev2 = 0;
    388          
    389              SANITY_CHECK(pSdSpi);
   \   00000018   000054E3           CMP      R4,#+0
   \   0000001C   0700001A           BNE      ??SDSPI_SendCommand_0
   \   00000020   ........           LDR      R0,??DataTable12  ;; `?<Constant "-F- ASSERT: ">`
   \   00000024   ........           BL       printf
   \   00000028   8520A0E3           MOV      R2,#+133
   \   0000002C   402F82E3           ORR      R2,R2,#0x100
   \   00000030   ........           LDR      R1,??DataTable13  ;; `?<Constant "F:\\\\Diplomovka\\\\IARproj...">`
   \   00000034   ........           LDR      R0,??DataTable14  ;; `?<Constant "Sanity check failed a...">`
   \   00000038   ........           BL       printf
   \                     ??SDSPI_SendCommand_1:
   \   0000003C   FEFFFFEA           B        ??SDSPI_SendCommand_1
    390              SANITY_CHECK(pSpiHw);
   \                     ??SDSPI_SendCommand_0:
   \   00000040   000094E5           LDR      R0,[R4, #+0]
   \   00000044   000050E3           CMP      R0,#+0
   \   00000048   0700001A           BNE      ??SDSPI_SendCommand_2
   \   0000004C   ........           LDR      R0,??DataTable12  ;; `?<Constant "-F- ASSERT: ">`
   \   00000050   ........           BL       printf
   \   00000054   8620A0E3           MOV      R2,#+134
   \   00000058   402F82E3           ORR      R2,R2,#0x100
   \   0000005C   ........           LDR      R1,??DataTable13  ;; `?<Constant "F:\\\\Diplomovka\\\\IARproj...">`
   \   00000060   ........           LDR      R0,??DataTable14  ;; `?<Constant "Sanity check failed a...">`
   \   00000064   ........           BL       printf
   \                     ??SDSPI_SendCommand_3:
   \   00000068   FEFFFFEA           B        ??SDSPI_SendCommand_3
    391              SANITY_CHECK(pCommand);
   \                     ??SDSPI_SendCommand_2:
   \   0000006C   000055E3           CMP      R5,#+0
   \   00000070   0700001A           BNE      ??SDSPI_SendCommand_4
   \   00000074   ........           LDR      R0,??DataTable12  ;; `?<Constant "-F- ASSERT: ">`
   \   00000078   ........           BL       printf
   \   0000007C   8720A0E3           MOV      R2,#+135
   \   00000080   402F82E3           ORR      R2,R2,#0x100
   \   00000084   ........           LDR      R1,??DataTable13  ;; `?<Constant "F:\\\\Diplomovka\\\\IARproj...">`
   \   00000088   ........           LDR      R0,??DataTable14  ;; `?<Constant "Sanity check failed a...">`
   \   0000008C   ........           BL       printf
   \                     ??SDSPI_SendCommand_5:
   \   00000090   FEFFFFEA           B        ??SDSPI_SendCommand_5
    392          
    393              CmdToken[0] = pCommand->cmd & 0x3F;
   \                     ??SDSPI_SendCommand_4:
   \   00000094   040095E5           LDR      R0,[R5, #+4]
   \   00000098   3F0000E2           AND      R0,R0,#0x3F
   \   0000009C   0400CDE5           STRB     R0,[SP, #+4]
    394              pData = pCommand->pData;
   \   000000A0   0C7095E5           LDR      R7,[R5, #+12]
    395              blockSize = pCommand->blockSize;
   \   000000A4   B081D5E1           LDRH     R8,[R5, #+16]
    396          
    397              SDSPI_MakeCmd((unsigned char *)&CmdToken, pCommand->arg);
   \   000000A8   081095E5           LDR      R1,[R5, #+8]
   \   000000AC   04008DE2           ADD      R0,SP,#+4
   \   000000B0   ........           BL       SDSPI_MakeCmd
    398          
    399              // Command is now being executed
    400              pSdSpi->pCommand = pCommand;
   \   000000B4   085084E5           STR      R5,[R4, #+8]
    401              pCommand->status = SDSPI_STATUS_PENDING;
   \   000000B8   0100A0E3           MOV      R0,#+1
   \   000000BC   0000C5E5           STRB     R0,[R5, #+0]
    402          
    403              // Send the command
    404              if((pCommand->conTrans == SPI_NEW_TRANSFER) || (blockSize == 0)) {
   \   000000C0   1400D5E5           LDRB     R0,[R5, #+20]
   \   000000C4   000050E3           CMP      R0,#+0
   \   000000C8   00005813           CMPNE    R8,#+0
   \   000000CC   1900001A           BNE      ??SDSPI_SendCommand_6
    405          
    406                  for(i = 0; i < 6; i++) {
   \   000000D0   00A0A0E3           MOV      R10,#+0
   \   000000D4   04908DE2           ADD      R9,SP,#+4
    407                      error = SDSPI_Write(pSdSpi, &CmdToken[i], 1);
   \                     ??SDSPI_SendCommand_7:
   \   000000D8   0120A0E3           MOV      R2,#+1
   \   000000DC   0910A0E1           MOV      R1,R9
   \   000000E0   0400A0E1           MOV      R0,R4
   \   000000E4   ........           BL       SDSPI_Write
    408                      if (error) {
   \   000000E8   0010B0E1           MOVS     R1,R0
   \   000000EC   7900001A           BNE      ??SDSPI_SendCommand_8
    409                          TRACE_DEBUG("Error: %d\n\r", error);
    410                          return error;
    411                      }
    412                  }
   \   000000F0   01A08AE2           ADD      R10,R10,#+1
   \   000000F4   019089E2           ADD      R9,R9,#+1
   \   000000F8   06005AE3           CMP      R10,#+6
   \   000000FC   F5FFFF3A           BCC      ??SDSPI_SendCommand_7
    413                  // Specific for Cmd12()
    414                  if ((pCommand->cmd & 0x3F) == 12) {
   \   00000100   040095E5           LDR      R0,[R5, #+4]
   \   00000104   3F0000E2           AND      R0,R0,#0x3F
   \   00000108   0C0050E3           CMP      R0,#+12
    415                      if( 1 == SDSPI_Wait(pSdSpi, 2) ) {
   \   0000010C   0210A003           MOVEQ    R1,#+2
   \   00000110   0400A001           MOVEQ    R0,R4
   \   00000114   ........           BLEQ     SDSPI_Wait
    416                          TRACE_DEBUG("Pb Send command 12\n\r");
    417                      }
    418                  }
    419                  if (pCommand->pResp) {
   \   00000118   180095E5           LDR      R0,[R5, #+24]
   \   0000011C   000050E3           CMP      R0,#+0
   \   00000120   0400000A           BEQ      ??SDSPI_SendCommand_6
    420                      error = SDSPI_GetCmdResp(pSdSpi, pCommand);
   \   00000124   0510A0E1           MOV      R1,R5
   \   00000128   0400A0E1           MOV      R0,R4
   \   0000012C   ........           BL       SDSPI_GetCmdResp
    421                      if (error) {
   \   00000130   0010B0E1           MOVS     R1,R0
   \   00000134   6700001A           BNE      ??SDSPI_SendCommand_8
    422                          TRACE_DEBUG("Error: %d\n\r", error);
    423                          return error;
    424                      }
    425                  }
    426              }
    427          
    428              if( (blockSize > 0) && (pCommand->nbBlock == 0) ) {
   \                     ??SDSPI_SendCommand_6:
   \   00000138   000058E3           CMP      R8,#+0
   \   0000013C   5D00000A           BEQ      ??SDSPI_SendCommand_9
   \   00000140   B201D5E1           LDRH     R0,[R5, #+18]
   \   00000144   000050E3           CMP      R0,#+0
   \   00000148   5A00001A           BNE      ??SDSPI_SendCommand_9
    429                  pCommand->nbBlock = 1;
   \   0000014C   0100A0E3           MOV      R0,#+1
   \   00000150   B201C5E1           STRH     R0,[R5, #+18]
    430              }
    431          
    432              // For data block operations
    433              while (pCommand->nbBlock > 0) {
    434          
    435                  // If data block size is invalid, return error
    436                  if (blockSize == 0) {
    437                      TRACE_DEBUG("Block Size = 0\n\r");
    438                      return 1;
    439                  }
    440          
    441                  // DATA transfer from card to host
    442                  if (pCommand->isRead) {
   \                     ??SDSPI_SendCommand_10:
   \   00000154   1500D5E5           LDRB     R0,[R5, #+21]
   \   00000158   000050E3           CMP      R0,#+0
   \   0000015C   0F00001A           BNE      ??SDSPI_SendCommand_11
    443                      do {
    444                          SDSPI_Read(pSdSpi, &dataHeader, 1);
    445                          dataRetry1 --;
    446                          if (dataHeader == SDSPI_START_BLOCK_1) {
    447                              break;
    448                          }
    449                          else if((dataHeader & 0xf0) == 0x00) {
    450                              pCommand->status = SDSPI_STATUS_ERROR;
    451                              TRACE_DEBUG("Data Error 0x%X!\n\r", dataHeader);
    452                              return 1;
    453                          }
    454                      } while(dataRetry1 > 0);
    455          
    456                      if (dataRetry1 == 0) {
    457                          TRACE_DEBUG("Timeout dataretry1\n\r");
    458                          return 1;
    459                      }
    460          
    461                      SDSPI_Read(pSdSpi, pData, blockSize);
    462          
    463                      // Specific for Cmd9()
    464                      if ((pCommand->cmd & 0x3f) != 0x9) {
    465          
    466                          SDSPI_Read(pSdSpi, crc, 2);
    467          #ifdef SDSPI_CRC_ON
    468                          // Check data CRC
    469                          TRACE_DEBUG("Check Data CRC\n\r");
    470                          crcPrev = 0;
    471                          crcPrev2 = 0;
    472                          if (crc[0] != ((crc_itu_t(crcPrev, pData, blockSize) & 0xff00) >> 8 )
    473                           || crc[1] !=  (crc_itu_t(crcPrev2, pData, blockSize) & 0xff)) {
    474                              TRACE_ERROR("CRC error 0x%X 0x%X 0x%X\n\r", \
    475                                  crc[0], crc[1], crc_itu_t(pData, blockSize));

⌨️ 快捷键说明

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