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

📄 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 页
字号:
    476                              return 1;
    477                          }
    478          #endif
    479                      }
    480                  }
    481          
    482                  // DATA transfer from host to card
    483                  else {
    484                      SDSPI_NCS(pSdSpi);
   \   00000160   0400A0E1           MOV      R0,R4
   \   00000164   ........           BL       SDSPI_NCS
    485                      if ((pCommand->conTrans == SPI_CONTINUE_TRANSFER) || ((pCommand->cmd & 0x3f) == 25)) {
   \   00000168   1400D5E5           LDRB     R0,[R5, #+20]
   \   0000016C   010050E3           CMP      R0,#+1
   \   00000170   04009515           LDRNE    R0,[R5, #+4]
   \   00000174   3F000012           ANDNE    R0,R0,#0x3F
   \   00000178   19005013           CMPNE    R0,#+25
    486                          dataHeader = SDSPI_START_BLOCK_2;
   \   0000017C   FC10A003           MOVEQ    R1,#+252
   \   00000180   FE10A013           MOVNE    R1,#+254
   \   00000184   210000EA           B        ??SDSPI_SendCommand_12
   \                     ??SDSPI_SendCommand_13:
   \   00000188   000058E3           CMP      R8,#+0
   \   0000018C   F0FFFF1A           BNE      ??SDSPI_SendCommand_10
   \                     ??SDSPI_SendCommand_14:
   \   00000190   0100A0E3           MOV      R0,#+1
   \   00000194   4F0000EA           B        ??SDSPI_SendCommand_8
   \                     ??SDSPI_SendCommand_15:
   \   00000198   000056E3           CMP      R6,#+0
   \   0000019C   FBFFFF0A           BEQ      ??SDSPI_SendCommand_14
   \                     ??SDSPI_SendCommand_11:
   \   000001A0   0120A0E3           MOV      R2,#+1
   \   000001A4   0D10A0E1           MOV      R1,SP
   \   000001A8   0400A0E1           MOV      R0,R4
   \   000001AC   ........           BL       SDSPI_Read
   \   000001B0   016046E2           SUB      R6,R6,#+1
   \   000001B4   0000DDE5           LDRB     R0,[SP, #+0]
   \   000001B8   FE0050E3           CMP      R0,#+254
   \   000001BC   0400000A           BEQ      ??SDSPI_SendCommand_16
   \   000001C0   F00010E3           TST      R0,#0xF0
   \   000001C4   F3FFFF1A           BNE      ??SDSPI_SendCommand_15
   \   000001C8   0200A0E3           MOV      R0,#+2
   \   000001CC   0000C5E5           STRB     R0,[R5, #+0]
   \   000001D0   EEFFFFEA           B        ??SDSPI_SendCommand_14
   \                     ??SDSPI_SendCommand_16:
   \   000001D4   000056E3           CMP      R6,#+0
   \   000001D8   ECFFFF0A           BEQ      ??SDSPI_SendCommand_14
   \   000001DC   0820A0E1           MOV      R2,R8
   \   000001E0   0710A0E1           MOV      R1,R7
   \   000001E4   0400A0E1           MOV      R0,R4
   \   000001E8   ........           BL       SDSPI_Read
   \   000001EC   040095E5           LDR      R0,[R5, #+4]
   \   000001F0   3F0000E2           AND      R0,R0,#0x3F
   \   000001F4   090050E3           CMP      R0,#+9
   \   000001F8   2A00000A           BEQ      ??SDSPI_SendCommand_17
   \   000001FC   0220A0E3           MOV      R2,#+2
   \   00000200   02108DE2           ADD      R1,SP,#+2
   \   00000204   0400A0E1           MOV      R0,R4
   \   00000208   ........           BL       SDSPI_Read
   \   0000020C   250000EA           B        ??SDSPI_SendCommand_17
   \                     ??SDSPI_SendCommand_12:
   \   00000210   0010CDE5           STRB     R1,[SP, #+0]
    487                      }
    488                      else {
    489                          dataHeader = SDSPI_START_BLOCK_1;
    490                      }
    491          
    492                      crcPrev = 0;
    493                      crc[0] = (crc_itu_t(crcPrev, pData, blockSize) & 0xff00) >> 8;
   \   00000214   0820A0E1           MOV      R2,R8
   \   00000218   0710A0E1           MOV      R1,R7
   \   0000021C   0000A0E3           MOV      R0,#+0
   \   00000220   ........           BL       crc_itu_t
   \   00000224   2004A0E1           LSR      R0,R0,#+8
   \   00000228   0200CDE5           STRB     R0,[SP, #+2]
    494                      crcPrev2 = 0;
    495                      crc[1] = (crc_itu_t(crcPrev2, pData, blockSize) & 0xff);
   \   0000022C   0820A0E1           MOV      R2,R8
   \   00000230   0710A0E1           MOV      R1,R7
   \   00000234   0000A0E3           MOV      R0,#+0
   \   00000238   ........           BL       crc_itu_t
   \   0000023C   0300CDE5           STRB     R0,[SP, #+3]
    496                      SDSPI_Write(pSdSpi, &dataHeader, 1);
   \   00000240   0120A0E3           MOV      R2,#+1
   \   00000244   0D10A0E1           MOV      R1,SP
   \   00000248   0400A0E1           MOV      R0,R4
   \   0000024C   ........           BL       SDSPI_Write
    497                      SDSPI_Write(pSdSpi, pData, blockSize);
   \   00000250   0820A0E1           MOV      R2,R8
   \   00000254   0710A0E1           MOV      R1,R7
   \   00000258   0400A0E1           MOV      R0,R4
   \   0000025C   ........           BL       SDSPI_Write
    498                      SDSPI_Write(pSdSpi, crc, 2);
   \   00000260   0220A0E3           MOV      R2,#+2
   \   00000264   02108DE2           ADD      R1,SP,#+2
   \   00000268   0400A0E1           MOV      R0,R4
   \   0000026C   ........           BL       SDSPI_Write
    499          
    500                      // If status bits in data response is not "data accepted", return error
    501                      if ((SDSPI_GetDataResp(pSdSpi, pCommand) & 0xe) != 0x4) {
   \   00000270   0510A0E1           MOV      R1,R5
   \   00000274   0400A0E1           MOV      R0,R4
   \   00000278   ........           BL       SDSPI_GetDataResp
   \   0000027C   0E0000E2           AND      R0,R0,#0xE
   \   00000280   040050E3           CMP      R0,#+4
   \   00000284   0200000A           BEQ      ??SDSPI_SendCommand_18
    502                          TRACE_ERROR("Write resp error!\n\r");
   \   00000288   54009FE5           LDR      R0,??SDSPI_SendCommand_19  ;; `?<Constant "-E- Write resp error!\\n\\r">`
   \   0000028C   ........           BL       printf
    503                          return 1;
   \   00000290   BEFFFFEA           B        ??SDSPI_SendCommand_14
    504                      }
    505          
    506                      do {
    507                          if (SDSPI_WaitDataBusy(pSdSpi) == 0) {
   \                     ??SDSPI_SendCommand_18:
   \   00000294   0400A0E1           MOV      R0,R4
   \   00000298   ........           BL       SDSPI_WaitDataBusy
   \   0000029C   000050E3           CMP      R0,#+0
    508                              break;
    509                          }
    510                          dataRetry2--;
   \   000002A0   01B05B12           SUBSNE   R11,R11,#+1
    511                      } while(dataRetry2 > 0);
   \   000002A4   FAFFFF1A           BNE      ??SDSPI_SendCommand_18
    512                  }
    513                  pData += blockSize;
   \                     ??SDSPI_SendCommand_17:
   \   000002A8   077088E0           ADD      R7,R8,R7
    514                  pCommand->nbBlock--;
   \   000002AC   B201D5E1           LDRH     R0,[R5, #+18]
   \   000002B0   010040E2           SUB      R0,R0,#+1
   \   000002B4   B201C5E1           STRH     R0,[R5, #+18]
    515              }
   \                     ??SDSPI_SendCommand_9:
   \   000002B8   B201D5E1           LDRH     R0,[R5, #+18]
   \   000002BC   000050E3           CMP      R0,#+0
   \   000002C0   B0FFFF1A           BNE      ??SDSPI_SendCommand_13
    516          
    517              if (pCommand->status == SDSPI_STATUS_PENDING) {
   \   000002C4   0000D5E5           LDRB     R0,[R5, #+0]
   \   000002C8   010050E3           CMP      R0,#+1
    518                  pCommand->status = 0;
   \   000002CC   0000A003           MOVEQ    R0,#+0
   \   000002D0   0000C505           STRBEQ   R0,[R5, #+0]
    519              }
    520          
    521              //TRACE_DEBUG("end SDSPI_SendCommand\n\r");
    522              return 0;
   \   000002D4   0000A0E3           MOV      R0,#+0
   \                     ??SDSPI_SendCommand_8:
   \   000002D8   0CD08DE2           ADD      SP,SP,#+12       ;; stack cleaning
   \   000002DC   F04FBDE8           POP      {R4-R11,LR}
   \   000002E0   1EFF2FE1           BX       LR               ;; return
   \                     ??SDSPI_SendCommand_19:
   \   000002E4   ........           DC32     `?<Constant "-E- Write resp error!\\n\\r">`
    523          }
    524          //!
    525          
    526          //------------------------------------------------------------------------------
    527          /// The SPI_Handler must be called by the SPI Interrupt Service Routine with the
    528          /// corresponding Spi instance.
    529          /// The SPI_Handler will unlock the Spi semaphore and invoke the upper application 
    530          /// callback.
    531          /// \param pSdSpi  Pointer to a SdSpi instance.
    532          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    533          void SDSPI_Handler(SdSpi *pSdSpi)
    534          {
   \                     SDSPI_Handler:
   \   00000000   00502DE9           PUSH     {R12,LR}
    535              SdSpiCmd *pCommand = pSdSpi->pCommand;
   \   00000004   081090E5           LDR      R1,[R0, #+8]
    536              AT91S_SPI *pSpiHw = pSdSpi->pSpiHw;
   \   00000008   002090E5           LDR      R2,[R0, #+0]
    537              volatile unsigned int spiSr;
    538          
    539              // Read the status register
    540              spiSr = pSpiHw->SPI_SR;
   \   0000000C   103092E5           LDR      R3,[R2, #+16]
   \   00000010   00308DE5           STR      R3,[SP, #+0]
    541              if(spiSr & AT91C_SPI_RXBUFF) {
   \   00000014   00309DE5           LDR      R3,[SP, #+0]
   \   00000018   400013E3           TST      R3,#0x40
   \   0000001C   1100000A           BEQ      ??SDSPI_Handler_0
    542          
    543                  if (pCommand->status == SDSPI_STATUS_PENDING) {
   \   00000020   0030D1E5           LDRB     R3,[R1, #+0]
   \   00000024   010053E3           CMP      R3,#+1
    544                      pCommand->status = 0;
   \   00000028   0030A003           MOVEQ    R3,#+0
   \   0000002C   0030C105           STRBEQ   R3,[R1, #+0]
    545                  }
    546                  // Disable transmitter and receiver
    547                  pSpiHw->SPI_PTCR = AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS;
   \   00000030   0230A0E3           MOV      R3,#+2
   \   00000034   803F83E3           ORR      R3,R3,#0x200
   \   00000038   203182E5           STR      R3,[R2, #+288]
    548          
    549                  // Disable the SPI clock
    550                  AT91C_BASE_PMC->PMC_PCDR = (1 << pSdSpi->spiId);
   \   0000003C   0130A0E3           MOV      R3,#+1
   \   00000040   D4C0D0E1           LDRSB    R12,[R0, #+4]
   \   00000044   133CA0E1           LSL      R3,R3,R12
   \   00000048   EBC0E0E3           MVN      R12,#+235
   \   0000004C   C0CFCCE3           BIC      R12,R12,#0x300
   \   00000050   00308CE5           STR      R3,[R12, #+0]
    551          
    552                  // Disable buffer complete interrupt
    553                  pSpiHw->SPI_IDR = AT91C_SPI_RXBUFF | AT91C_SPI_ENDTX;
   \   00000054   6030A0E3           MOV      R3,#+96
   \   00000058   183082E5           STR      R3,[R2, #+24]
    554          
    555                  // Release the SPI semaphore
    556                  pSdSpi->semaphore++;
   \   0000005C   0C20D0E5           LDRB     R2,[R0, #+12]
   \   00000060   012082E2           ADD      R2,R2,#+1
   \   00000064   0C20C0E5           STRB     R2,[R0, #+12]
    557              }
    558          
    559              // Invoke the callback associated with the current command
    560              if (pCommand && pCommand->callback) {
   \                     ??SDSPI_Handler_0:
   \   00000068   000051E3           CMP      R1,#+0
   \   0000006C   20009115           LDRNE    R0,[R1, #+32]
   \   00000070   00005013           CMPNE    R0,#+0
    561                  pCommand->callback(0, pCommand);
   \   00000074   0000A013           MOVNE    R0,#+0
   \   00000078   20209115           LDRNE    R2,[R1, #+32]
   \   0000007C   0FE0A011           MOVNE    LR,PC
   \  

⌨️ 快捷键说明

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