SPI RX DMA Empty Bytes between MPC5674F and MCP2518FD SPI Communication

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

SPI RX DMA Empty Bytes between MPC5674F and MCP2518FD SPI Communication

ソリューションへジャンプ
1,481件の閲覧回数
CNarendra
Contributor III

Hi ,

We are using the MPC5674F with RX DMA for an SPI-based external CAN controller (MCP2518FD).We are able to transmit successfully using eDMA channel 12 for DSPI_B without issues.

For reception via DMA, we configured two channels:

  • Channel 12 (TX): Transmits dummy messages

  • Channel 13 (RX): Receives data from the SPI slave

The configuration is:

  • Channel 12 transmits a dummy message and then links to channel 13 for receiving.

  • Once reception is complete, channel 13 links back to channel 12, continuing the loop until 16 bytes are received.

  • The RX channel generates an interrupt at the end of reception of all 16 bytes.


    We successfully receive messages from the slave, but some bytes in the RX DMA buffer are empty.

    Example (Expected continuous data):
    FF FF FF 1F 18 00 00 00 01 02 03 04 05 06 07 08

    Observed (Bytes are empty in RX DMA buffer):
    FF FF FF 1F 18 00 00 00 01 02 00 03 04 05 06 07 00Debug window of CAN_RX_dataDebug window of CAN_RX_data

    Observations:

    • A middle byte in rx buffer is consistently zero

    • The last byte also appear as zero

    • This issue does not occur in polling mode

    • FIFO is flushed before reception

    Questions:

    1. Is there a recommended DMA configuration or workaround to prevent RX DMA from skipping bytes when using MPC5674F with SPI and the MCP2518FD?

    2. What is the best approach to reliably receive data via DMA without losing any bytes?

#define FRAME_SIZE_BYTES   4
#define NUM_ITERATIONS     16  // total number of 4-byte transfers

// Dummy data to send
uint32_t dummy_data = 0xFF;
vuint16_t can_rx_data[NUM_ITERATIONS + 1];

// ---------------- TX Channel 12 ----------------
void eDMA_TCD_tx4BYTE_init()
{
    EDMA_A.TCD[12].SADDR      = (vuint32_t)&dummy_data;
    EDMA_A.TCD[12].SSIZE      = 2;           // 32-bit source
    EDMA_A.TCD[12].SOFF       = 0;
    EDMA_A.TCD[12].SLAST      = 0;
    EDMA_A.TCD[12].SMOD       = 0;

    EDMA_A.TCD[12].DADDR      = (vuint32_t)&DSPI_B.PUSHR.R;
    EDMA_A.TCD[12].DSIZE      = 2;           // 32-bit dest
    EDMA_A.TCD[12].DOFF       = 0;
    EDMA_A.TCD[12].DLAST_SGA  = 0;
    EDMA_A.TCD[12].DMOD       = 0;

    EDMA_A.TCD[12].NBYTES     = FRAME_SIZE_BYTES; 
    EDMA_A.TCD[12].BITER      = NUM_ITERATIONS ; 
    EDMA_A.TCD[12].CITER      = NUM_ITERATIONS ; 

    EDMA_A.TCD[12].CITERE_LINK = 0;
    EDMA_A.TCD[12].BITERE_LINK = 0;

    // Minor-loop linking to RX channel
    EDMA_A.TCD[12].MAJORE_LINK    = 1;
    EDMA_A.TCD[12].MAJORLINKCH    = 13;

    EDMA_A.TCD[12].D_REQ      = 1;
    EDMA_A.TCD[12].INT_HALF   = 0;
    EDMA_A.TCD[12].INT_MAJ    = 0; // only RX channel triggers ISR
    EDMA_A.TCD[12].E_SG       = 0;
    EDMA_A.TCD[12].BWC        = 0;

    EDMA_A.TCD[12].DONE       = 0;
    EDMA_A.TCD[12].ACTIVE     = 0;

    EDMA_A.CR.B.CLM = 1;

}

// ---------------- RX Channel 13 ----------------
void eDMA_TCD_rx4BYTE_init()
{
    EDMA_A.TCD[13].SADDR      = (vuint32_t)&DSPI_B.POPR.R + 2;
    EDMA_A.TCD[13].SSIZE      = 1;   // 2 bytes
    EDMA_A.TCD[13].SOFF       = 0;
    EDMA_A.TCD[13].SLAST      = 0;
    EDMA_A.TCD[13].SMOD       = 0;

    EDMA_A.TCD[13].DADDR      = (vuint32_t)&can_rx_data[0];
    EDMA_A.TCD[13].DSIZE      = 1;   // 2 bytes
    EDMA_A.TCD[13].DOFF       = 2;    // 2 bytes
    EDMA_A.TCD[13].DLAST_SGA  = -(2 * NUM_ITERATIONS); 
    EDMA_A.TCD[13].DMOD       = 0;

    EDMA_A.TCD[13].NBYTES     = 2;    // 2 bytes
    EDMA_A.TCD[13].BITER      = NUM_ITERATIONS;
    EDMA_A.TCD[13].CITER      = NUM_ITERATIONS;

    EDMA_A.TCD[13].CITERE_LINK = 0;
    EDMA_A.TCD[13].BITERE_LINK = 0;

    // Minor-loop linking back to TX channel
    EDMA_A.TCD[13].MAJORE_LINK    = 1;
    EDMA_A.TCD[13].MAJORLINKCH    = 12;

    EDMA_A.TCD[13].D_REQ      = 1;
    EDMA_A.TCD[13].INT_HALF   = 0;
    EDMA_A.TCD[13].INT_MAJ    = 1; // ISR triggers at end of full frame
    EDMA_A.TCD[13].E_SG       = 0;
    EDMA_A.TCD[13].BWC        = 0;

    EDMA_A.TCD[13].DONE       = 0;
    EDMA_A.TCD[13].ACTIVE     = 0;

}


// this will be called at event of RX gpio interrupt from slave
void bsp_ext_can_initiate_rx_dma()
{
     // command + FIFO Address
     uint16_t cmd_pckt = 0x3468; 
     uint8_t  dummy = 0;

    DSPI_B.RSER.B.RFDFDIRS = 1;
    DSPI_B.RSER.B.TFFFDIRS = 1;
      
    //enable chipselect
    SIU.GPDO[105].B.PDO = 0;

    //send command Rd command.
    bsp_dspi_write_via_polling(&DSPI_B, (uint8_t *)&cmd_pckt, 2);


    // Flush RX FIFO if there's any leftover data
    while ((DSPI_B.SR.R & 0x00020000U) == 0x00020000U)
    {
        // Clear any residual data in the rx fifo
        dummy =DSPI_B.POPR.R;

        // Clear RFDF Receive FIFO Drain Flag
        DSPI_B.SR.R |= 0x00020000U;
    }

    DSPI_B.RSER.R |= 1u << (31u - 6u);    //TFFFRE
    DSPI_B.RSER.R |= (1u << (31u - 14u)); //RFDFRE

    
	//invoke CH12,13 for DMA
    EDMA_A.SERQR.R = 13;   // RX first (safe)
    EDMA_A.SERQR.R = 12;   // TX starts clock

}

void DMA_RX_end_ISR(void)
{

	EDMA_A.CDSBR.R = 13;                    // Clear DONE status register
	EDMA_A.CIRQR.B.CINT = 13;               // Clear interrupt    
	
    DSPI_B.RSER.R &= ~(1u << (31u - 6u));   // Disable TFFRE
    DSPI_B.RSER.R &= ~(1u << (31u - 14u));   // Disable RFDFRE
	DSPI_B.SR.B.RFDF = 1;   // Clear RX FIFO drain flag
	
    /* Clear flags */
    DSPI_B.SR.B.TCF  = 1;
    DSPI_B.SR.B.EOQF = 1;

    /* Flush TX FIFO */
    DSPI_B.MCR.B.CLR_TXF = 1;
    DSPI_B.MCR.B.CLR_RXF = 1;


    // disable cs 
    SIU.GPDO[105].B.PDO = 1;
}


let me know any additional details or  information required for this problem

Thanks 
Narendra.C

MPC5674F 

タグ(2)
0 件の賞賛
返信
1 解決策
1,255件の閲覧回数
PetrS
NXP TechSupport
NXP TechSupport

Hi,

do not use linking between TX/RX channels. Simply leave basic DMA configuration you have without linking enabled. You can also refer to below one
https://community.nxp.com/t5/MPC5xxx-Knowledge-Base/Example-MPC5676R-DSPI-MasterSlave-DMA-CW210/ta-p...
Also I can suggest to omit sending command in polling way. Simply prepare command into first 2 words of extended array and start DMAs to TX and RX 2+16 bytes. 
Finally when clearing flags do not use bit access, use rather full register access to clear desired flags.

BR, Petr

元の投稿で解決策を見る

0 件の賞賛
返信
2 返答(返信)
1,256件の閲覧回数
PetrS
NXP TechSupport
NXP TechSupport

Hi,

do not use linking between TX/RX channels. Simply leave basic DMA configuration you have without linking enabled. You can also refer to below one
https://community.nxp.com/t5/MPC5xxx-Knowledge-Base/Example-MPC5676R-DSPI-MasterSlave-DMA-CW210/ta-p...
Also I can suggest to omit sending command in polling way. Simply prepare command into first 2 words of extended array and start DMAs to TX and RX 2+16 bytes. 
Finally when clearing flags do not use bit access, use rather full register access to clear desired flags.

BR, Petr

0 件の賞賛
返信
1,251件の閲覧回数
CNarendra
Contributor III

Hi @PetrS ,

Thanks for the inputs,

Reception is working fine after removing linking between CH 12 Tx and CH 13 Rx .

since this is test code we are using .B instances for clearing registers. 

Thanks
Narendra . C

0 件の賞賛
返信
%3CLINGO-SUB%20id%3D%22lingo-sub-2268336%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EMPC5674F%E3%81%A8MCP2518FD%E9%96%93%E3%81%AESPI%20RX%20DMA%E7%A9%BA%E3%83%90%E3%82%A4%E3%83%88SPI%E9%80%9A%E4%BF%A1%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2268336%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%20%E3%80%81%3CBR%20%2F%3E%3CBR%20%2F%3E%20SPI%20%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E5%A4%96%E9%83%A8%20CAN%20%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%20(%20%3CSTRONG%3EMCP2518FD%3C%2FSTRONG%3E%20)%20%E3%81%AB%20RX%20DMA%20%E3%82%92%E5%82%99%E3%81%88%E3%81%9F%3CSTRONG%3EMPC5674F%3C%2FSTRONG%3E%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82DSPI_B%3CSTRONG%3E%E3%81%AE%3C%2FSTRONG%3EeDMA%3CSTRONG%3E%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%2012%3C%2FSTRONG%3E%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E5%95%8F%E9%A1%8C%E3%81%AA%E3%81%8F%3CSTRONG%3E%E6%AD%A3%E5%B8%B8%E3%81%AB%E9%80%81%E4%BF%A1%3C%2FSTRONG%3E%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3EDMA%20%E7%B5%8C%E7%94%B1%E3%81%AE%E5%8F%97%E4%BF%A1%E7%94%A8%E3%81%AB%E3%80%81%20%3CSTRONG%3E2%20%E3%81%A4%E3%81%AE%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%3C%2FSTRONG%3E%E3%82%92%E6%A7%8B%E6%88%90%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%3CUL%3E%3CLI%3E%3CP%3E%3CSTRONG%3E%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB12%EF%BC%88TX%EF%BC%89%EF%BC%9A%3C%2FSTRONG%3E%E3%83%80%E3%83%9F%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%3CSTRONG%3E%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB13%EF%BC%88RX%EF%BC%89%EF%BC%9A%3C%2FSTRONG%3E%20SPI%E3%82%B9%E3%83%AC%E3%83%BC%E3%83%96%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%97%E4%BF%A1%3C%2FP%3E%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%E6%A7%8B%E6%88%90%E3%81%AF%E6%AC%A1%E3%81%AE%E3%81%A8%E3%81%8A%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3CUL%3E%3CLI%3E%3CP%3E%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%2012%20%E3%81%AF%E3%83%80%E3%83%9F%E3%83%BC%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E9%80%81%E4%BF%A1%E3%81%97%E3%80%81%E3%81%9D%E3%81%AE%E5%BE%8C%E3%80%81%E5%8F%97%E4%BF%A1%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB%3CSTRONG%3E%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%2013%20%E3%81%AB%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%3C%2FSTRONG%3E%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%E5%8F%97%E4%BF%A1%E3%81%8C%E5%AE%8C%E4%BA%86%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%2013%20%E3%81%AF%3CSTRONG%3E%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%2012%20%E3%81%AB%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%97%E7%9B%B4%E3%81%97%3C%2FSTRONG%3E%E3%80%8116%20%E3%83%90%E3%82%A4%E3%83%88%E3%81%8C%E5%8F%97%E4%BF%A1%E3%81%95%E3%82%8C%E3%82%8B%E3%81%BE%E3%81%A7%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E7%B6%99%E7%B6%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3ERX%20%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%E3%81%AF%E3%80%8116%20%E3%83%90%E3%82%A4%E3%83%88%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%3CSTRONG%3E%E5%8F%97%E4%BF%A1%E3%81%AE%E7%B5%82%E4%BA%86%E6%99%82%E3%81%AB%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%3C%2FSTRONG%3E%E3%82%92%E7%94%9F%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%3CBR%20%2F%3E%E3%82%B9%E3%83%AC%E3%83%BC%E3%83%96%E3%81%8B%E3%82%89%E3%81%AE%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AF%E6%AD%A3%E5%B8%B8%E3%81%AB%E5%8F%97%E4%BF%A1%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%81%8C%E3%80%81%20%3CSTRONG%3ERX%20DMA%20%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E5%86%85%E3%81%AE%E4%B8%80%E9%83%A8%E3%81%AE%E3%83%90%E3%82%A4%E3%83%88%E3%81%8C%E7%A9%BA%E3%81%A7%E3%81%99%3C%2FSTRONG%3E%E3%80%82%3C%2FP%3E%3CP%3E%3CSTRONG%3E%E4%BE%8B%EF%BC%88%E6%9C%9F%E5%BE%85%E3%81%95%E3%82%8C%E3%82%8B%E9%80%A3%E7%B6%9A%E3%83%87%E3%83%BC%E3%82%BF%EF%BC%89%EF%BC%9A%3C%2FSTRONG%3E%3CBR%20%2F%3E%20FF%20FF%20FF%201F%2018%2000%2000%2000%2001%2002%2003%2004%2005%2006%2007%2008%3C%2FP%3E%3CP%3E%3CSTRONG%3E%E8%A6%B3%E5%AF%9F%E7%B5%90%E6%9E%9C%EF%BC%88RX%20DMA%20%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E5%86%85%E3%81%AE%E3%83%90%E3%82%A4%E3%83%88%E3%81%8C%E7%A9%BA%E3%81%A7%E3%81%99%EF%BC%89%3A%3C%2FSTRONG%3E%3CBR%20%2F%3E%20FF%20FF%20FF%201F%2018%2000%2000%2000%2001%2002%20%3CFONT%20color%3D%22%23000000%22%3E%3CU%3E%3CEM%3E%3CSTRONG%3E00%3C%2FSTRONG%3E%3C%2FEM%3E%3C%2FU%3E%3C%2FFONT%3E%20%3CFONT%20color%3D%22%23993300%22%3E03%3C%2FFONT%3E%2004%2005%2006%2007%20%3CFONT%20color%3D%22%23000000%22%3E%3CU%3E%3CEM%3E%3CSTRONG%3E00%20%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Debug%20window%20of%20CAN_RX_data%22%20style%3D%22width%3A%20957px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Debug%20window%20of%20CAN_RX_data%22%20style%3D%22width%3A%20957px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F371083iF1D5BD6EAA7DD52A%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22image%20(1).png%22%20alt%3D%22Debug%20window%20of%20CAN_RX_data%22%20%2F%3E%3Cspan%20class%3D%22lia-inline-image-caption%22%20onclick%3D%22event.preventDefault()%3B%22%3EDebug%20window%20of%20CAN_RX_data%3C%2Fspan%3E%3C%2Fspan%3E%3CSPAN%20class%3D%22lia-inline-image-caption%22%20onclick%3D%22event.preventDefault()%3B%22%3ECAN_RX_data%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSTRONG%3E%3C%2FEM%3E%3C%2FU%3E%3CU%3E%3CEM%3E%3CSTRONG%3E%3CBR%20%2F%3E%3C%2FSTRONG%3E%3C%2FEM%3E%3C%2FU%3E%3C%2FFONT%3E%3C%2FP%3E%3CP%3E%3CSTRONG%3E%E8%A6%B3%E5%AF%9F%3A%3C%2FSTRONG%3E%3C%2FP%3E%3CUL%3E%3CLI%3E%3CP%3E%E5%8F%97%E4%BF%A1%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%81%AE%3CSTRONG%3E%E4%B8%AD%E9%96%93%E3%83%90%E3%82%A4%E3%83%88%3C%2FSTRONG%3E%E3%81%AF%E5%B8%B8%E3%81%AB%E3%82%BC%E3%83%AD%E3%81%A7%E3%81%99%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%3CSTRONG%3E%E6%9C%80%E5%BE%8C%E3%81%AE%E3%83%90%E3%82%A4%E3%83%88%3C%2FSTRONG%3E%E3%82%82%E3%82%BC%E3%83%AD%E3%81%A8%E3%81%97%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%E3%81%93%E3%81%AE%E5%95%8F%E9%A1%8C%E3%81%AF%3CSTRONG%3E%E3%83%9D%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E3%81%AF%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%3C%2FSTRONG%3E%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3EFIFO%E3%81%AF%E5%8F%97%E4%BF%A1%E5%89%8D%E3%81%AB%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%3C%2FP%3E%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%3CSTRONG%3E%E8%B3%AA%E5%95%8F%3A%3C%2FSTRONG%3E%3C%2FP%3E%3COL%3E%3CLI%3E%3CP%3ESPI%20%E3%81%A8%20MCP2518FD%20%E3%82%92%E5%82%99%E3%81%88%E3%81%9F%20MPC5674F%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AB%E3%80%81RX%20DMA%20%E3%81%8C%E3%83%90%E3%82%A4%E3%83%88%E3%82%92%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E3%81%99%E3%82%8B%E3%81%AE%E3%82%92%E9%98%B2%E3%81%90%E3%81%9F%E3%82%81%E3%81%AE%E6%8E%A8%E5%A5%A8%E3%81%95%E3%82%8C%E3%82%8B%3CSTRONG%3EDMA%20%E6%A7%8B%E6%88%90%3C%2FSTRONG%3E%E3%81%BE%E3%81%9F%E3%81%AF%3CSTRONG%3E%E5%9B%9E%E9%81%BF%E7%AD%96%E3%81%AF%3C%2FSTRONG%3E%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%E3%83%90%E3%82%A4%E3%83%88%E3%82%92%E5%A4%B1%E3%81%86%E3%81%93%E3%81%A8%E3%81%AA%E3%81%8F%20DMA%20%E7%B5%8C%E7%94%B1%E3%81%A7%E7%A2%BA%E5%AE%9F%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%97%E4%BF%A1%E3%81%99%E3%82%8B%E6%9C%80%E9%81%A9%E3%81%AA%E6%96%B9%E6%B3%95%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%3F%3C%2FP%3E%3C%2FLI%3E%3C%2FOL%3E%3C%2FLI%3E%3C%2FUL%3E%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%20translate%3D%22no%22%3E%23define%20FRAME_SIZE_BYTES%20%20%204%0A%23define%20NUM_ITERATIONS%20%20%20%20%2016%20%20%2F%2F%20total%20number%20of%204-byte%20transfers%0A%0A%2F%2F%20Dummy%20data%20to%20send%0Auint32_t%20dummy_data%20%3D%200xFF%3B%0Avuint16_t%20can_rx_data%5BNUM_ITERATIONS%20%2B%201%5D%3B%0A%0A%2F%2F%20----------------%20TX%20Channel%2012%20----------------%0Avoid%20eDMA_TCD_tx4BYTE_init()%0A%7B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.SADDR%20%20%20%20%20%20%3D%20(vuint32_t)%26amp%3Bdummy_data%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.SSIZE%20%20%20%20%20%20%3D%202%3B%20%20%20%20%20%20%20%20%20%20%20%2F%2F%2032-bit%20source%0A%20%20%20%20EDMA_A.TCD%5B12%5D.SOFF%20%20%20%20%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.SLAST%20%20%20%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.SMOD%20%20%20%20%20%20%20%3D%200%3B%0A%0A%20%20%20%20EDMA_A.TCD%5B12%5D.DADDR%20%20%20%20%20%20%3D%20(vuint32_t)%26amp%3BDSPI_B.PUSHR.R%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.DSIZE%20%20%20%20%20%20%3D%202%3B%20%20%20%20%20%20%20%20%20%20%20%2F%2F%2032-bit%20dest%0A%20%20%20%20EDMA_A.TCD%5B12%5D.DOFF%20%20%20%20%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.DLAST_SGA%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.DMOD%20%20%20%20%20%20%20%3D%200%3B%0A%0A%20%20%20%20EDMA_A.TCD%5B12%5D.NBYTES%20%20%20%20%20%3D%20FRAME_SIZE_BYTES%3B%20%0A%20%20%20%20EDMA_A.TCD%5B12%5D.BITER%20%20%20%20%20%20%3D%20NUM_ITERATIONS%20%3B%20%0A%20%20%20%20EDMA_A.TCD%5B12%5D.CITER%20%20%20%20%20%20%3D%20NUM_ITERATIONS%20%3B%20%0A%0A%20%20%20%20EDMA_A.TCD%5B12%5D.CITERE_LINK%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.BITERE_LINK%20%3D%200%3B%0A%0A%20%20%20%20%2F%2F%20Minor-loop%20linking%20to%20RX%20channel%0A%20%20%20%20EDMA_A.TCD%5B12%5D.MAJORE_LINK%20%20%20%20%3D%201%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.MAJORLINKCH%20%20%20%20%3D%2013%3B%0A%0A%20%20%20%20EDMA_A.TCD%5B12%5D.D_REQ%20%20%20%20%20%20%3D%201%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.INT_HALF%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.INT_MAJ%20%20%20%20%3D%200%3B%20%2F%2F%20only%20RX%20channel%20triggers%20ISR%0A%20%20%20%20EDMA_A.TCD%5B12%5D.E_SG%20%20%20%20%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.BWC%20%20%20%20%20%20%20%20%3D%200%3B%0A%0A%20%20%20%20EDMA_A.TCD%5B12%5D.DONE%20%20%20%20%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B12%5D.ACTIVE%20%20%20%20%20%3D%200%3B%0A%0A%20%20%20%20EDMA_A.CR.B.CLM%20%3D%201%3B%0A%0A%7D%0A%0A%2F%2F%20----------------%20RX%20Channel%2013%20----------------%0Avoid%20eDMA_TCD_rx4BYTE_init()%0A%7B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.SADDR%20%20%20%20%20%20%3D%20(vuint32_t)%26amp%3BDSPI_B.POPR.R%20%2B%202%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.SSIZE%20%20%20%20%20%20%3D%201%3B%20%20%20%2F%2F%202%20bytes%0A%20%20%20%20EDMA_A.TCD%5B13%5D.SOFF%20%20%20%20%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.SLAST%20%20%20%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.SMOD%20%20%20%20%20%20%20%3D%200%3B%0A%0A%20%20%20%20EDMA_A.TCD%5B13%5D.DADDR%20%20%20%20%20%20%3D%20(vuint32_t)%26amp%3Bcan_rx_data%5B0%5D%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.DSIZE%20%20%20%20%20%20%3D%201%3B%20%20%20%2F%2F%202%20bytes%0A%20%20%20%20EDMA_A.TCD%5B13%5D.DOFF%20%20%20%20%20%20%20%3D%202%3B%20%20%20%20%2F%2F%202%20bytes%0A%20%20%20%20EDMA_A.TCD%5B13%5D.DLAST_SGA%20%20%3D%20-(2%20*%20NUM_ITERATIONS)%3B%20%0A%20%20%20%20EDMA_A.TCD%5B13%5D.DMOD%20%20%20%20%20%20%20%3D%200%3B%0A%0A%20%20%20%20EDMA_A.TCD%5B13%5D.NBYTES%20%20%20%20%20%3D%202%3B%20%20%20%20%2F%2F%202%20bytes%0A%20%20%20%20EDMA_A.TCD%5B13%5D.BITER%20%20%20%20%20%20%3D%20NUM_ITERATIONS%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.CITER%20%20%20%20%20%20%3D%20NUM_ITERATIONS%3B%0A%0A%20%20%20%20EDMA_A.TCD%5B13%5D.CITERE_LINK%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.BITERE_LINK%20%3D%200%3B%0A%0A%20%20%20%20%2F%2F%20Minor-loop%20linking%20back%20to%20TX%20channel%0A%20%20%20%20EDMA_A.TCD%5B13%5D.MAJORE_LINK%20%20%20%20%3D%201%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.MAJORLINKCH%20%20%20%20%3D%2012%3B%0A%0A%20%20%20%20EDMA_A.TCD%5B13%5D.D_REQ%20%20%20%20%20%20%3D%201%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.INT_HALF%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.INT_MAJ%20%20%20%20%3D%201%3B%20%2F%2F%20ISR%20triggers%20at%20end%20of%20full%20frame%0A%20%20%20%20EDMA_A.TCD%5B13%5D.E_SG%20%20%20%20%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.BWC%20%20%20%20%20%20%20%20%3D%200%3B%0A%0A%20%20%20%20EDMA_A.TCD%5B13%5D.DONE%20%20%20%20%20%20%20%3D%200%3B%0A%20%20%20%20EDMA_A.TCD%5B13%5D.ACTIVE%20%20%20%20%20%3D%200%3B%0A%0A%7D%0A%0A%0A%2F%2F%20this%20will%20be%20called%20at%20event%20of%20RX%20gpio%20interrupt%20from%20slave%0Avoid%20bsp_ext_can_initiate_rx_dma()%0A%7B%0A%20%20%20%20%20%2F%2F%20command%20%2B%20FIFO%20Address%0A%20%20%20%20%20uint16_t%20cmd_pckt%20%3D%200x3468%3B%20%0A%20%20%20%20%20uint8_t%20%20dummy%20%3D%200%3B%0A%0A%20%20%20%20DSPI_B.RSER.B.RFDFDIRS%20%3D%201%3B%0A%20%20%20%20DSPI_B.RSER.B.TFFFDIRS%20%3D%201%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%2F%2Fenable%20chipselect%0A%20%20%20%20SIU.GPDO%5B105%5D.B.PDO%20%3D%200%3B%0A%0A%20%20%20%20%2F%2Fsend%20command%20Rd%20command.%0A%20%20%20%20bsp_dspi_write_via_polling(%26amp%3BDSPI_B%2C%20(uint8_t%20*)%26amp%3Bcmd_pckt%2C%202)%3B%0A%0A%0A%20%20%20%20%2F%2F%20Flush%20RX%20FIFO%20if%20there's%20any%20leftover%20data%0A%20%20%20%20while%20((DSPI_B.SR.R%20%26amp%3B%200x00020000U)%20%3D%3D%200x00020000U)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Clear%20any%20residual%20data%20in%20the%20rx%20fifo%0A%20%20%20%20%20%20%20%20dummy%20%3DDSPI_B.POPR.R%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20Clear%20RFDF%20Receive%20FIFO%20Drain%20Flag%0A%20%20%20%20%20%20%20%20DSPI_B.SR.R%20%7C%3D%200x00020000U%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20DSPI_B.RSER.R%20%7C%3D%201u%20%26lt%3B%26lt%3B%20(31u%20-%206u)%3B%20%20%20%20%2F%2FTFFFRE%0A%20%20%20%20DSPI_B.RSER.R%20%7C%3D%20(1u%20%26lt%3B%26lt%3B%20(31u%20-%2014u))%3B%20%2F%2FRFDFRE%0A%0A%20%20%20%20%0A%09%2F%2Finvoke%20CH12%2C13%20for%20DMA%0A%20%20%20%20EDMA_A.SERQR.R%20%3D%2013%3B%20%20%20%2F%2F%20RX%20first%20(safe)%0A%20%20%20%20EDMA_A.SERQR.R%20%3D%2012%3B%20%20%20%2F%2F%20TX%20starts%20clock%0A%0A%7D%0A%0Avoid%20DMA_RX_end_ISR(void)%0A%7B%0A%0A%09EDMA_A.CDSBR.R%20%3D%2013%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Clear%20DONE%20status%20register%0A%09EDMA_A.CIRQR.B.CINT%20%3D%2013%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Clear%20interrupt%20%20%20%20%0A%09%0A%20%20%20%20DSPI_B.RSER.R%20%26amp%3B%3D%20~(1u%20%26lt%3B%26lt%3B%20(31u%20-%206u))%3B%20%20%20%2F%2F%20Disable%20TFFRE%0A%20%20%20%20DSPI_B.RSER.R%20%26amp%3B%3D%20~(1u%20%26lt%3B%26lt%3B%20(31u%20-%2014u))%3B%20%20%20%2F%2F%20Disable%20RFDFRE%0A%09DSPI_B.SR.B.RFDF%20%3D%201%3B%20%20%20%2F%2F%20Clear%20RX%20FIFO%20drain%20flag%0A%09%0A%20%20%20%20%2F*%20Clear%20flags%20*%2F%0A%20%20%20%20DSPI_B.SR.B.TCF%20%20%3D%201%3B%0A%20%20%20%20DSPI_B.SR.B.EOQF%20%3D%201%3B%0A%0A%20%20%20%20%2F*%20Flush%20TX%20FIFO%20*%2F%0A%20%20%20%20DSPI_B.MCR.B.CLR_TXF%20%3D%201%3B%0A%20%20%20%20DSPI_B.MCR.B.CLR_RXF%20%3D%201%3B%0A%0A%0A%20%20%20%20%2F%2F%20disable%20cs%20%0A%20%20%20%20SIU.GPDO%5B105%5D.B.PDO%20%3D%201%3B%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%20class%3D%22lia-align-left%22%20style%3D%22text-align%20%3A%20left%3B%22%20style%3D%22text-align%20%3A%20left%3B%22%3E%3CBR%20%2F%3E%E3%81%93%E3%81%AE%E5%95%8F%E9%A1%8C%E3%81%AB%E9%96%A2%E3%81%97%E3%81%A6%E5%BF%85%E8%A6%81%E3%81%AA%E8%BF%BD%E5%8A%A0%E3%81%AE%E8%A9%B3%E7%B4%B0%E3%82%84%E6%83%85%E5%A0%B1%E3%82%92%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%3CBR%20%2F%3E%3CBR%20%2F%3E%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%3CBR%20%2F%3E%E3%83%8A%E3%83%AC%E3%83%B3%E3%83%89%E3%83%A9.C%3C%2FP%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fc-pwmxy87654%2FMPC5674F%2Fpd-p%2FMPC5674F%22%20class%3D%22lia-product-mention%22%20data-product%3D%221071-1%22%20target%3D%22_blank%22%3EMPC5674F%3C%2FA%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E