MCXA153: LPSPI data burst transfer.

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

MCXA153: LPSPI data burst transfer.

383件の閲覧回数
bogdan_u
Contributor I

Hello,

The Reference Manual MCXA153 contains a description of the TDBRn and RDBRn LPSPI registers:
"TDBRn and RDBRn registers supports burst transfers of data to the transmit FIFO for use with the DMA controller".
Can anyone share sample code for a burst transfer using these registers?

best regards
Bogdan

0 件の賞賛
返信
1 返信

240件の閲覧回数
Harry_Zhang
NXP Employee
NXP Employee

Hi @bogdan_u 

Sorry, there are currently no relevant examples available.

The closest MCXA153 example I found uses LPSPI_MasterTransferEDMALite() with eDMA, but the driver targets TDR/RDR via LPSPI_GetTxRegisterAddress() / LPSPI_GetRxRegisterAddress() , not the burst alias window.

But i think you can try to use.

typedef struct
{
    uint32_t cmd;          
    uint32_t data[128];    
} lpspi_burst_tx_t;
static inline uint32_t LPSPI_TCBR_Address(LPSPI_Type *base)
{
    return ((uint32_t)base + LPSPI_TCBR_OFFSET);
}

static inline uint32_t LPSPI_TDBR0_Address(LPSPI_Type *base)
{
    return ((uint32_t)base + LPSPI_TDBR0_OFFSET);
}

static inline uint32_t LPSPI_RDBR0_Address(LPSPI_Type *base)
{
    return ((uint32_t)base + LPSPI_RDBR0_OFFSET);
}

void LPSPI_StartTxBurstDMA(LPSPI_Type *base,
                           edma_handle_t *txDmaHandle,
                           uint32_t *cmd_plus_data,
                           uint32_t nwords)
{
    edma_transfer_config_t cfg = {0};

    cfg.srcAddr           = (uint32_t)&cmd_plus_data[0];
    cfg.destAddr          = LPSPI_TCBR_Address(base);
    cfg.srcOffset         = 4;
    cfg.destOffset        = 4;
    cfg.srcTransferSize   = kEDMA_TransferSize4Bytes;
    cfg.destTransferSize  = kEDMA_TransferSize4Bytes;
    cfg.minorLoopBytes    = 4;
    cfg.majorLoopCounts   = nwords + 1u;

    EDMA_ResetChannel(txDmaHandle->base, txDmaHandle->channel);
    EDMA_SetTransferConfig(txDmaHandle->base, txDmaHandle->channel, &cfg, NULL);

    EDMA_StartTransfer(txDmaHandle);
    LPSPI_EnableDMA(base, kLPSPI_TxDmaEnable);
}


void LPSPI_StartRxBurstDMA(LPSPI_Type *base,
                           edma_handle_t *rxDmaHandle,
                           uint32_t *rx_words,
                           uint32_t nwords)
{
    edma_transfer_config_t cfg = {0};

    cfg.srcAddr           = LPSPI_RDBR0_Address(base);
    cfg.destAddr          = (uint32_t)&rx_words[0];
    cfg.srcOffset         = 4;
    cfg.destOffset        = 4;
    cfg.srcTransferSize   = kEDMA_TransferSize4Bytes;
    cfg.destTransferSize  = kEDMA_TransferSize4Bytes;
    cfg.minorLoopBytes    = 4;
    cfg.majorLoopCounts   = nwords;

    EDMA_ResetChannel(rxDmaHandle->base, rxDmaHandle->channel);
    EDMA_SetTransferConfig(rxDmaHandle->base, rxDmaHandle->channel, &cfg, NULL);

    EDMA_StartTransfer(rxDmaHandle);
    LPSPI_EnableDMA(base, kLPSPI_RxDmaEnable);
}

 

BR

Harry

 

0 件の賞賛
返信
%3CLINGO-SUB%20id%3D%22lingo-sub-2387348%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EMCXA153%EF%BC%9ALPSPI%E3%83%87%E3%83%BC%E3%82%BF%E3%83%90%E3%83%BC%E3%82%B9%E3%83%88%E8%BB%A2%E9%80%81%E3%80%82%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2387348%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%3C%2FP%3E%3CP%3E%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%E3%83%BB%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%ABMCXA153%20TDBRn%E3%81%8A%E3%82%88%E3%81%B3RDBRn%20LPSPI%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%E3%81%AE%E8%AA%AC%E6%98%8E%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%E3%80%8CTDBRn%E3%81%8A%E3%82%88%E3%81%B3RDBRn%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%E3%81%AF%E3%80%81DMA%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E9%80%81%E4%BF%A1FIFO%E3%81%B8%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B9%E3%83%88%E8%BB%A2%E9%80%81%E3%82%92%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%8D%E3%80%82%3CBR%20%2F%3E%E3%81%93%E3%82%8C%E3%82%89%E3%81%AE%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%83%90%E3%83%BC%E3%82%B9%E3%83%88%E8%BB%A2%E9%80%81%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%AA%B0%E3%81%8B%E5%85%B1%E6%9C%89%E3%81%97%E3%81%A6%E3%82%82%E3%82%89%E3%81%88%E3%81%BE%E3%81%99%E3%81%8B%3F%3C%2FP%3E%3CP%3E%E3%82%88%E3%82%8D%E3%81%97%E3%81%8F%E3%81%8A%E9%A1%98%E3%81%84%E3%81%97%E3%81%BE%E3%81%99%3CBR%20%2F%3E%E3%83%9C%E3%82%B0%E3%83%80%E3%83%B3%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2387348%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3E%E9%80%9A%E4%BF%A1%E3%83%BB%E5%88%B6%E5%BE%A1(I3C%20%7CI2C%20%7CSPI%20%7CFlexCAN%20%7C%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%8D%E3%83%83%E3%83%88%20%7CFlexIO)%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3EMCXA%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2388714%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20MCXA153%3A%20LPSPI%20data%20burst%20transfer.%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2388714%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%20%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F20898%22%20target%3D%22_blank%22%3E%40bogdan_u%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%E7%94%B3%E3%81%97%E8%A8%B3%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8C%E3%80%81%E7%8F%BE%E5%9C%A8%E3%80%81%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%E4%BA%8B%E4%BE%8B%E3%81%AF%E3%81%94%E3%81%96%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3C%2FP%3E%0A%3CP%3E%E7%A7%81%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%91%E3%81%9F%E6%9C%80%E3%82%82%E8%BF%91%E3%81%84%E4%BE%8B%E3%81%AFMCXA153%20LPSPI_MasterTransferEDMALite()%E3%81%A8eDMA%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%81%AFTDR%2FRDR%E3%82%92LPSPI_GetTxRegisterAddress()%20%2F%20LPSPI_GetRxRegisterAddress()%E7%B5%8C%E7%94%B1%E3%81%A7%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88%E3%81%AB%E3%81%97%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%E3%83%90%E3%83%BC%E3%82%B9%E3%83%88%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3C%2FP%3E%0A%3CP%3E%E3%81%A7%E3%82%82%E3%80%81%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%A8%E6%80%9D%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3Etypedef%20struct%0A%7B%0A%20%20%20%20uint32_t%20cmd%3B%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20uint32_t%20data%5B128%5D%3B%20%20%20%20%0A%7D%20lpspi_burst_tx_t%3B%3C%2FCODE%3E%3C%2FPRE%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3Estatic%20inline%20uint32_t%20LPSPI_TCBR_Address(LPSPI_Type%20*base)%0A%7B%0A%20%20%20%20return%20((uint32_t)base%20%2B%20LPSPI_TCBR_OFFSET)%3B%0A%7D%0A%0Astatic%20inline%20uint32_t%20LPSPI_TDBR0_Address(LPSPI_Type%20*base)%0A%7B%0A%20%20%20%20return%20((uint32_t)base%20%2B%20LPSPI_TDBR0_OFFSET)%3B%0A%7D%0A%0Astatic%20inline%20uint32_t%20LPSPI_RDBR0_Address(LPSPI_Type%20*base)%0A%7B%0A%20%20%20%20return%20((uint32_t)base%20%2B%20LPSPI_RDBR0_OFFSET)%3B%0A%7D%0A%0Avoid%20LPSPI_StartTxBurstDMA(LPSPI_Type%20*base%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20edma_handle_t%20*txDmaHandle%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20uint32_t%20*cmd_plus_data%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20uint32_t%20nwords)%0A%7B%0A%20%20%20%20edma_transfer_config_t%20cfg%20%3D%20%7B0%7D%3B%0A%0A%20%20%20%20cfg.srcAddr%20%20%20%20%20%20%20%20%20%20%20%3D%20(uint32_t)%26amp%3Bcmd_plus_data%5B0%5D%3B%0A%20%20%20%20cfg.destAddr%20%20%20%20%20%20%20%20%20%20%3D%20LPSPI_TCBR_Address(base)%3B%0A%20%20%20%20cfg.srcOffset%20%20%20%20%20%20%20%20%20%3D%204%3B%0A%20%20%20%20cfg.destOffset%20%20%20%20%20%20%20%20%3D%204%3B%0A%20%20%20%20cfg.srcTransferSize%20%20%20%3D%20kEDMA_TransferSize4Bytes%3B%0A%20%20%20%20cfg.destTransferSize%20%20%3D%20kEDMA_TransferSize4Bytes%3B%0A%20%20%20%20cfg.minorLoopBytes%20%20%20%20%3D%204%3B%0A%20%20%20%20cfg.majorLoopCounts%20%20%20%3D%20nwords%20%2B%201u%3B%0A%0A%20%20%20%20EDMA_ResetChannel(txDmaHandle-%26gt%3Bbase%2C%20txDmaHandle-%26gt%3Bchannel)%3B%0A%20%20%20%20EDMA_SetTransferConfig(txDmaHandle-%26gt%3Bbase%2C%20txDmaHandle-%26gt%3Bchannel%2C%20%26amp%3Bcfg%2C%20NULL)%3B%0A%0A%20%20%20%20EDMA_StartTransfer(txDmaHandle)%3B%0A%20%20%20%20LPSPI_EnableDMA(base%2C%20kLPSPI_TxDmaEnable)%3B%0A%7D%0A%0A%0Avoid%20LPSPI_StartRxBurstDMA(LPSPI_Type%20*base%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20edma_handle_t%20*rxDmaHandle%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20uint32_t%20*rx_words%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20uint32_t%20nwords)%0A%7B%0A%20%20%20%20edma_transfer_config_t%20cfg%20%3D%20%7B0%7D%3B%0A%0A%20%20%20%20cfg.srcAddr%20%20%20%20%20%20%20%20%20%20%20%3D%20LPSPI_RDBR0_Address(base)%3B%0A%20%20%20%20cfg.destAddr%20%20%20%20%20%20%20%20%20%20%3D%20(uint32_t)%26amp%3Brx_words%5B0%5D%3B%0A%20%20%20%20cfg.srcOffset%20%20%20%20%20%20%20%20%20%3D%204%3B%0A%20%20%20%20cfg.destOffset%20%20%20%20%20%20%20%20%3D%204%3B%0A%20%20%20%20cfg.srcTransferSize%20%20%20%3D%20kEDMA_TransferSize4Bytes%3B%0A%20%20%20%20cfg.destTransferSize%20%20%3D%20kEDMA_TransferSize4Bytes%3B%0A%20%20%20%20cfg.minorLoopBytes%20%20%20%20%3D%204%3B%0A%20%20%20%20cfg.majorLoopCounts%20%20%20%3D%20nwords%3B%0A%0A%20%20%20%20EDMA_ResetChannel(rxDmaHandle-%26gt%3Bbase%2C%20rxDmaHandle-%26gt%3Bchannel)%3B%0A%20%20%20%20EDMA_SetTransferConfig(rxDmaHandle-%26gt%3Bbase%2C%20rxDmaHandle-%26gt%3Bchannel%2C%20%26amp%3Bcfg%2C%20NULL)%3B%0A%0A%20%20%20%20EDMA_StartTransfer(rxDmaHandle)%3B%0A%20%20%20%20LPSPI_EnableDMA(base%2C%20kLPSPI_RxDmaEnable)%3B%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3E%E3%83%8F%E3%83%AA%E3%83%BC%3C%2FP%3E%0A%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E