<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Kinetis MicrocontrollersのトピックRe: MK21 DMA SPI2 problems</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1510258#M63871</link>
    <description>&lt;P&gt;thanks!! It works in MK21 for both SPI1 and SP2.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 23 Aug 2022 14:36:40 GMT</pubDate>
    <dc:creator>DaniMartin</dc:creator>
    <dc:date>2022-08-23T14:36:40Z</dc:date>
    <item>
      <title>MK21 DMA SPI2 problems</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1505004#M63800</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I'm trying to transmit data via SPI2 peripheral, using DMA in my MK21FX512AVMD12. I'm looking at the drivers examples (twrk21f120m_dspi_edma_b2b_transfer_master, twrk21f120m_dspi_half_duplex_edma_master)....and I see diferences when I use SPI2 instead SPI0. In those examples for the SPI0 peripheral the callback is called adequately, but when I change to SPI2, it is not called. These are the changes that I apply:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DaniMartin_0-1660221226656.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/189953iC0701721115223F6/image-size/medium?v=v2&amp;amp;px=400" role="button" title="DaniMartin_0-1660221226656.png" alt="DaniMartin_0-1660221226656.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In the edma_spi driver it is clear that both peripherals are different, because SPI0 has separate DMA request and SPI2 don't.&lt;/P&gt;&lt;P&gt;Do I have to change anything else in order to use SPI2?&lt;/P&gt;</description>
      <pubDate>Thu, 11 Aug 2022 12:37:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1505004#M63800</guid>
      <dc:creator>DaniMartin</dc:creator>
      <dc:date>2022-08-11T12:37:46Z</dc:date>
    </item>
    <item>
      <title>Re: MK21 DMA SPI2 problems</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1505788#M63817</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;I review the example and I confirm something in the Reference Manual in the section [Table 3-25. DMA request sources - MUX 0] you can see the sources of the example in yellow.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Pavel_Hernandez_0-1660341883877.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/190124i2F7EE2B0E1780217/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Pavel_Hernandez_0-1660341883877.png" alt="Pavel_Hernandez_0-1660341883877.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Pavel_Hernandez_1-1660342001458.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/190125i472ECAFEC7A349DC/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Pavel_Hernandez_1-1660342001458.png" alt="Pavel_Hernandez_1-1660342001458.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;But the SPI2 only have 1 source for transmit or Receive, and you define tow macros but only need one.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="c"&gt;#define EXAMPLE_DSPI_MASTER_DMA_RX_TX_REQUEST_SOURCE kDmaRequestMux0SPI2
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Try it and if you have more questions please let me know.&lt;/P&gt;
&lt;P&gt;Best regards,&lt;BR /&gt;Pavel&lt;/P&gt;</description>
      <pubDate>Fri, 12 Aug 2022 22:11:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1505788#M63817</guid>
      <dc:creator>Pavel_Hernandez</dc:creator>
      <dc:date>2022-08-12T22:11:21Z</dc:date>
    </item>
    <item>
      <title>Re: MK21 DMA SPI2 problems</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1506563#M63829</link>
      <description>&lt;P&gt;Hi &lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/196430"&gt;@Pavel_Hernandez&lt;/a&gt; , thanks for the answer. I already try to use only one macro (disabling the RX part), but it is not working. The callback is not being called:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DaniMartin_0-1660630152943.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/190296iF0E50283EA46372A/image-size/medium?v=v2&amp;amp;px=400" role="button" title="DaniMartin_0-1660630152943.png" alt="DaniMartin_0-1660630152943.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;(...)&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DaniMartin_1-1660630174575.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/190297iC55E0A86DACF82F7/image-size/medium?v=v2&amp;amp;px=400" role="button" title="DaniMartin_1-1660630174575.png" alt="DaniMartin_1-1660630174575.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 16 Aug 2022 06:09:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1506563#M63829</guid>
      <dc:creator>DaniMartin</dc:creator>
      <dc:date>2022-08-16T06:09:49Z</dc:date>
    </item>
    <item>
      <title>Re: MK21 DMA SPI2 problems</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1507785#M63842</link>
      <description>&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I suggest reviewing the code because in the original code there are using 2 sources of the DMAMUX but with the SPI2 you need to modify your code to use only one source.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Pavel_Hernandez_0-1660772664245.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/190527iC5B93C44C368C64B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Pavel_Hernandez_0-1660772664245.png" alt="Pavel_Hernandez_0-1660772664245.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;This configuration handler is for an inexistent source.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Pavel_Hernandez_1-1660772829288.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/190528i6F40B52E25EAF3A2/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Pavel_Hernandez_1-1660772829288.png" alt="Pavel_Hernandez_1-1660772829288.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;Best regards,&lt;BR /&gt;Pavel&lt;/P&gt;</description>
      <pubDate>Wed, 17 Aug 2022 21:47:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1507785#M63842</guid>
      <dc:creator>Pavel_Hernandez</dc:creator>
      <dc:date>2022-08-17T21:47:49Z</dc:date>
    </item>
    <item>
      <title>Re: MK21 DMA SPI2 problems</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1507983#M63843</link>
      <description>&lt;P&gt;What do you mean to reviewing the code? Please, could you send the&amp;nbsp; &lt;STRONG&gt;twrk21f120m_dspi_edma_b2b_transfer_master&lt;/STRONG&gt; example working for SPI2?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;thanks&lt;/P&gt;</description>
      <pubDate>Thu, 18 Aug 2022 05:56:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1507983#M63843</guid>
      <dc:creator>DaniMartin</dc:creator>
      <dc:date>2022-08-18T05:56:58Z</dc:date>
    </item>
    <item>
      <title>Re: MK21 DMA SPI2 problems</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1508459#M63846</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;Let me get 2 twr-k21 for making a test.&lt;/P&gt;&lt;P&gt;Best regards,&lt;BR /&gt;Pavel&lt;/P&gt;</description>
      <pubDate>Fri, 19 Aug 2022 00:05:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1508459#M63846</guid>
      <dc:creator>Pavel_Hernandez</dc:creator>
      <dc:date>2022-08-19T00:05:03Z</dc:date>
    </item>
    <item>
      <title>Re: MK21 DMA SPI2 problems</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1509696#M63867</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;I could not get the twr-k21 but I make some tests with the frdm-k22 this is the code I modified and tested.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-SPOILER&gt;&lt;LI-CODE lang="c"&gt;/*
 * Copyright (c) 2015, Freescale Semiconductor, Inc.
 * Copyright 2016-2017 NXP
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include "fsl_device_registers.h"
#include "fsl_debug_console.h"
#include "fsl_dspi.h"
#include "pin_mux.h"
#include "clock_config.h"
#include "board.h"
#include "fsl_dspi_edma.h"
#include "fsl_edma.h"
#include "fsl_dmamux.h"

/*******************************************************************************
 * Definitions
 ******************************************************************************/
#define EXAMPLE_DSPI_MASTER_BASEADDR              SPI1
#define EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR      DMAMUX
#define EXAMPLE_DSPI_MASTER_DMA_BASEADDR          DMA0
#define EXAMPLE_DSPI_MASTER_DMA_TX_RX_REQUEST_SOURCE kDmaRequestMux0SPI1
//#define EXAMPLE_DSPI_MASTER_DMA_TX_REQUEST_SOURCE kDmaRequestMux0SPI0Tx
#define DSPI_MASTER_CLK_SRC                       DSPI1_CLK_SRC
#define DSPI_MASTER_CLK_FREQ                      CLOCK_GetFreq(DSPI1_CLK_SRC)
#define EXAMPLE_DSPI_MASTER_PCS_FOR_INIT          kDSPI_Pcs0
#define EXAMPLE_DSPI_MASTER_PCS_FOR_TRANSFER      kDSPI_MasterPcs0
#define EXAMPLE_DSPI_DEALY_COUNT                  0xfffffU
#define TRANSFER_SIZE     64U     /* Transfer dataSize */
#define TRANSFER_BAUDRATE 500000U /* Transfer baudrate - 500k */

/*******************************************************************************
 * Prototypes
 ******************************************************************************/
/* DSPI user callback */
void DSPI_MasterUserCallback(SPI_Type *base, dspi_master_edma_handle_t *handle, status_t status, void *userData);

/*******************************************************************************
 * Variables
 ******************************************************************************/
uint8_t masterRxData[TRANSFER_SIZE] = {0};
uint8_t masterTxData[TRANSFER_SIZE] = {0};

dspi_master_edma_handle_t g_dspi_edma_m_handle;
edma_handle_t dspiEdmaMasterRxRegToRxDataHandle;
#if (!(defined(FSL_FEATURE_DSPI_HAS_GASKET) &amp;amp;&amp;amp; FSL_FEATURE_DSPI_HAS_GASKET))
edma_handle_t dspiEdmaMasterTxDataToIntermediaryHandle;
#endif
edma_handle_t dspiEdmaMasterIntermediaryToTxRegHandle;

volatile bool isTransferCompleted  = false;
volatile uint32_t g_systickCounter = 20U;
/*******************************************************************************
 * Code
 ******************************************************************************/
void SysTick_Handler(void)
{
    if (g_systickCounter != 0U)
    {
        g_systickCounter--;
    }
}

void DSPI_MasterUserCallback(SPI_Type *base, dspi_master_edma_handle_t *handle, status_t status, void *userData)
{
    if (status == kStatus_Success)
    {
        PRINTF("This is DSPI master edma transfer completed callback. \r\n\r\n");
    }

    isTransferCompleted = true;
}

/*!
 * @brief Main function
 */
int main(void)
{
    BOARD_InitBootPins();
    BOARD_InitBootClocks();
    BOARD_InitDebugConsole();

    PRINTF("DSPI board to board edma example.\r\n");
    PRINTF("This example use one board as master and another as slave.\r\n");
    PRINTF("Master and slave uses EDMA way. Slave should start first. \r\n");
    PRINTF("Please make sure you make the correct line connection. Basically, the connection is: \r\n");
    PRINTF("DSPI_master -- DSPI_slave   \r\n");
    PRINTF("   CLK      --    CLK  \r\n");
    PRINTF("   PCS      --    PCS \r\n");
    PRINTF("   SOUT     --    SIN  \r\n");
    PRINTF("   SIN      --    SOUT \r\n");
    PRINTF("   GND      --    GND \r\n");

    /* DMA Mux setting and EDMA init */
    uint32_t masterRxChannel, masterTxChannel;
    edma_config_t userConfig;

    masterRxChannel = 0U;
    masterTxChannel = 1U;
/* If DSPI instances support Gasket feature, only two channels are needed. */
#if (!(defined(FSL_FEATURE_DSPI_HAS_GASKET) &amp;amp;&amp;amp; FSL_FEATURE_DSPI_HAS_GASKET))
    uint32_t masterIntermediaryChannel;
    masterIntermediaryChannel = 2U;
#endif
    /* DMA MUX init */
    DMAMUX_Init(EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR);

    DMAMUX_SetSource(EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR, masterRxChannel, (uint8_t)EXAMPLE_DSPI_MASTER_DMA_TX_RX_REQUEST_SOURCE);
    DMAMUX_EnableChannel(EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR, masterRxChannel);

#if (defined EXAMPLE_DSPI_MASTER_DMA_TX_REQUEST_SOURCE)
    DMAMUX_SetSource(EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR, masterTxChannel, (uint8_t)EXAMPLE_DSPI_MASTER_DMA_TX_REQUEST_SOURCE);
    DMAMUX_EnableChannel(EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR, masterTxChannel);
#endif

    /* EDMA init */
    /*
     * userConfig.enableRoundRobinArbitration = false;
     * userConfig.enableHaltOnError = true;
     * userConfig.enableContinuousLinkMode = false;
     * userConfig.enableDebugMode = false;
     */
    EDMA_GetDefaultConfig(&amp;amp;userConfig);

    EDMA_Init(EXAMPLE_DSPI_MASTER_DMA_BASEADDR, &amp;amp;userConfig);

    uint32_t srcClock_Hz;
    uint32_t errorCount;
    uint32_t loopCount = 1U;
    uint32_t i;
    dspi_master_config_t masterConfig;
    dspi_transfer_t masterXfer;

    /* Master config */
    masterConfig.whichCtar                                = kDSPI_Ctar0;
    masterConfig.ctarConfig.baudRate                      = TRANSFER_BAUDRATE;
    masterConfig.ctarConfig.bitsPerFrame                  = 8;
    masterConfig.ctarConfig.cpol                          = kDSPI_ClockPolarityActiveHigh;
    masterConfig.ctarConfig.cpha                          = kDSPI_ClockPhaseFirstEdge;
    masterConfig.ctarConfig.direction                     = kDSPI_MsbFirst;
    masterConfig.ctarConfig.pcsToSckDelayInNanoSec        = 1000000000U / TRANSFER_BAUDRATE;
    masterConfig.ctarConfig.lastSckToPcsDelayInNanoSec    = 1000000000U / TRANSFER_BAUDRATE;
    masterConfig.ctarConfig.betweenTransferDelayInNanoSec = 1000000000U / TRANSFER_BAUDRATE;

    masterConfig.whichPcs           = EXAMPLE_DSPI_MASTER_PCS_FOR_INIT;
    masterConfig.pcsActiveHighOrLow = kDSPI_PcsActiveLow;

    masterConfig.enableContinuousSCK        = false;
    masterConfig.enableRxFifoOverWrite      = false;
    masterConfig.enableModifiedTimingFormat = false;
    masterConfig.samplePoint                = kDSPI_SckToSin0Clock;

    srcClock_Hz = DSPI_MASTER_CLK_FREQ;
    DSPI_MasterInit(EXAMPLE_DSPI_MASTER_BASEADDR, &amp;amp;masterConfig, srcClock_Hz);

    /* Set up dspi master */
    memset(&amp;amp;(dspiEdmaMasterRxRegToRxDataHandle), 0, sizeof(dspiEdmaMasterRxRegToRxDataHandle));
#if (!(defined(FSL_FEATURE_DSPI_HAS_GASKET) &amp;amp;&amp;amp; FSL_FEATURE_DSPI_HAS_GASKET))
    memset(&amp;amp;(dspiEdmaMasterTxDataToIntermediaryHandle), 0, sizeof(dspiEdmaMasterTxDataToIntermediaryHandle));
#endif
    memset(&amp;amp;(dspiEdmaMasterIntermediaryToTxRegHandle), 0, sizeof(dspiEdmaMasterIntermediaryToTxRegHandle));

    EDMA_CreateHandle(&amp;amp;(dspiEdmaMasterRxRegToRxDataHandle), EXAMPLE_DSPI_MASTER_DMA_BASEADDR, masterRxChannel);
#if (!(defined(FSL_FEATURE_DSPI_HAS_GASKET) &amp;amp;&amp;amp; FSL_FEATURE_DSPI_HAS_GASKET))
    EDMA_CreateHandle(&amp;amp;(dspiEdmaMasterTxDataToIntermediaryHandle), EXAMPLE_DSPI_MASTER_DMA_BASEADDR, masterIntermediaryChannel);
#endif
    EDMA_CreateHandle(&amp;amp;(dspiEdmaMasterIntermediaryToTxRegHandle), EXAMPLE_DSPI_MASTER_DMA_BASEADDR, masterTxChannel);
#if (defined(FSL_FEATURE_DSPI_HAS_GASKET) &amp;amp;&amp;amp; FSL_FEATURE_DSPI_HAS_GASKET)
    DSPI_MasterTransferCreateHandleEDMA(EXAMPLE_DSPI_MASTER_BASEADDR, &amp;amp;g_dspi_edma_m_handle, DSPI_MasterUserCallback,
                                        NULL, &amp;amp;dspiEdmaMasterRxRegToRxDataHandle, NULL,
                                        &amp;amp;dspiEdmaMasterIntermediaryToTxRegHandle);
#else
    DSPI_MasterTransferCreateHandleEDMA(EXAMPLE_DSPI_MASTER_BASEADDR, &amp;amp;g_dspi_edma_m_handle, DSPI_MasterUserCallback,
                                        NULL, &amp;amp;dspiEdmaMasterRxRegToRxDataHandle,
                                        &amp;amp;dspiEdmaMasterTxDataToIntermediaryHandle,
                                        &amp;amp;dspiEdmaMasterIntermediaryToTxRegHandle);
#endif

    while (1)
    {
        /* Set up the transfer data */
        for (i = 0U; i &amp;lt; TRANSFER_SIZE; i++)
        {
            masterTxData[i] = (i + loopCount) % 256U;
            masterRxData[i] = 0U;
        }

        /* Print out transmit buffer */
        PRINTF("\r\n Master transmit:\r\n");
        for (i = 0; i &amp;lt; TRANSFER_SIZE; i++)
        {
            /* Print 16 numbers in a line */
            if ((i &amp;amp; 0x0FU) == 0U)
            {
                PRINTF("\r\n");
            }
            PRINTF(" %02X", masterTxData[i]);
        }
        PRINTF("\r\n");

        /* Start master transfer, send data to slave */
        isTransferCompleted    = false;
        masterXfer.txData      = masterTxData;
        masterXfer.rxData      = NULL;
        masterXfer.dataSize    = TRANSFER_SIZE;
        masterXfer.configFlags = kDSPI_MasterCtar0 | EXAMPLE_DSPI_MASTER_PCS_FOR_TRANSFER | kDSPI_MasterPcsContinuous;
        if (kStatus_Success !=
            DSPI_MasterTransferEDMA(EXAMPLE_DSPI_MASTER_BASEADDR, &amp;amp;g_dspi_edma_m_handle, &amp;amp;masterXfer))
        {
            PRINTF("There is error when start DSPI_MasterTransferEDMA \r\n ");
        }

        /* Wait until transfer completed */
        while (!isTransferCompleted)
        {
        }

        /* Delay to wait slave is ready */
        if (SysTick_Config(SystemCoreClock / 1000U))
        {
            while (1)
            {
            }
        }
        /* Delay 20 ms */
        g_systickCounter = 20U;
        while (g_systickCounter != 0U)
        {
        }

        /* Start master transfer, receive data from slave */
        isTransferCompleted    = false;
        masterXfer.txData      = NULL;
        masterXfer.rxData      = masterRxData;
        masterXfer.dataSize    = TRANSFER_SIZE;
        masterXfer.configFlags = kDSPI_MasterCtar0 | EXAMPLE_DSPI_MASTER_PCS_FOR_TRANSFER | kDSPI_MasterPcsContinuous;
        if (kStatus_Success !=
            DSPI_MasterTransferEDMA(EXAMPLE_DSPI_MASTER_BASEADDR, &amp;amp;g_dspi_edma_m_handle, &amp;amp;masterXfer))
        {
            PRINTF("There is error when start DSPI_MasterTransferEDMA \r\n ");
        }

        /* Wait until transfer completed */
        while (!isTransferCompleted)
        {
        }

        errorCount = 0;
        for (i = 0; i &amp;lt; TRANSFER_SIZE; i++)
        {
            if (masterTxData[i] != masterRxData[i])
            {
                errorCount++;
            }
        }
        if (errorCount == 0)
        {
            PRINTF(" \r\nDSPI transfer all data matched! \r\n");
            /* Print out receive buffer */
            PRINTF("\r\n Master received:\r\n");
            for (i = 0; i &amp;lt; TRANSFER_SIZE; i++)
            {
                /* Print 16 numbers in a line */
                if ((i &amp;amp; 0x0FU) == 0U)
                {
                    PRINTF("\r\n");
                }
                PRINTF(" %02X", masterRxData[i]);
            }
            PRINTF("\r\n");
        }
        else
        {
            PRINTF(" \r\nError occurred in DSPI transfer ! \r\n");
        }

        /* Wait for press any key */
        PRINTF("\r\n Press any key to run again\r\n");
        GETCHAR();
        /* Increase loop count to change transmit buffer */
        loopCount++;
    }
}
&lt;/LI-CODE&gt;&lt;/LI-SPOILER&gt;
&lt;P&gt;I think this could help you to port in the k21.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best regards,&lt;BR /&gt;Pavel&lt;/P&gt;</description>
      <pubDate>Mon, 22 Aug 2022 20:03:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1509696#M63867</guid>
      <dc:creator>Pavel_Hernandez</dc:creator>
      <dc:date>2022-08-22T20:03:51Z</dc:date>
    </item>
    <item>
      <title>Re: MK21 DMA SPI2 problems</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1510258#M63871</link>
      <description>&lt;P&gt;thanks!! It works in MK21 for both SPI1 and SP2.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Aug 2022 14:36:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK21-DMA-SPI2-problems/m-p/1510258#M63871</guid>
      <dc:creator>DaniMartin</dc:creator>
      <dc:date>2022-08-23T14:36:40Z</dc:date>
    </item>
  </channel>
</rss>

