LPUART eDMA in Zephyr RTOS

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

LPUART eDMA in Zephyr RTOS

721 Views
NFRED
Contributor I

Hi all, I am currently working on a DMX driver, which runs using the LPUART driver. At the moment I am running in an issue with using the eDMA in Zephyr, where the interrupt never fires correctly and thus never sets the tx line back to idle state. 

I am mostly using the eDMA config from the lpuart_edma example. I am using Zephyr OS for scheduling but do to needing as little cpu cycles i want to use the nxp drivers directly.

Can anyone help? see software and screenshots below.

 

#include <zephyr/kernel.h>
#include <zephyr/irq.h>
#include <zephyr/device.h>
#include "../lpuart/fsl_lpuart_edma.h"
#include "../dmamux/fsl_dmamux.h"
#include "fsl_iomuxc.h"
#include "dmx.h"

#define LPDMX3LPUART3
#define LPUART_DMA_BASEADDR DMA0
#define LPUART_DMAMUX_BASEADDR DMAMUX
#define LPUART_TX_DMA_CHANNEL 0U
#define DMX_FRAME_SIZE512

static uint8_t dmx_tx_buffer[DMX_FRAME_SIZE] __attribute__((section(".nocache")));

lpuart_edma_handle_t g_lpuartEdmaHandle;
edma_handle_t g_lpuartTxEdmaHandle;
volatile bool txOnGoing = false;

void LPUART_UserCallback(LPUART_Type *base, lpuart_edma_handle_t *handle, status_t status, void *userData) {
if (status == kStatus_LPUART_TxIdle) {
txOnGoing = false;
    }
}

void lpuart3_tx_dma_irq_handler(const void *arg) {
EDMA_HandleIRQ((edma_handle_t *)arg);
}

void send_break(void){
LPDMX3->CTRL = 1<<13;
LPDMX3->CTRL = 1<<13;
LPDMX3->CTRL = 1<<13;
LPDMX3->CTRL = 1<<13;
}

void dmx_hal_init(void) {
lpuart_config_t config;
edma_config_t edmaConfig;

CLOCK_EnableClock(kCLOCK_Lpuart3);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_06_LPUART3_TX, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_07_LPUART3_RX, 0U);

LPUART_GetDefaultConfig(&config);
config.baudRate_Bps = 250000; // Standard DMX
config.stopBitCount = kLPUART_TwoStopBit;
LPUART_Init(LPDMX3, &config, CLOCK_GetFreq(kCLOCK_Lpuart3));

DMAMUX_Init(LPUART_DMAMUX_BASEADDR);
DMAMUX_SetSource(LPUART_DMAMUX_BASEADDR, LPUART_TX_DMA_CHANNEL, kDmaRequestMuxLPUART3Tx);
DMAMUX_EnableChannel(LPUART_DMAMUX_BASEADDR, LPUART_TX_DMA_CHANNEL);

EDMA_GetDefaultConfig(&edmaConfig);
EDMA_Init(LPUART_DMA_BASEADDR, &edmaConfig);
EDMA_CreateHandle(&g_lpuartTxEdmaHandle, LPUART_DMA_BASEADDR, LPUART_TX_DMA_CHANNEL);

LPUART_TransferCreateHandleEDMA(LPDMX3, &g_lpuartEdmaHandle, LPUART_UserCallback, NULL, &g_lpuartTxEdmaHandle, NULL);

IRQ_CONNECT(DMA0_DMA16_IRQn, 5, lpuart3_tx_dma_irq_handler, &g_lpuartTxEdmaHandle, 0);
irq_enable(DMA0_DMA16_IRQn);
}

void dmx_send_frame(const uint8_t *src_data) {
// if (txOnGoing) return;

memcpy(dmx_tx_buffer, src_data, DMX_FRAME_SIZE);


lpuart_transfer_t xfer = {
        .data = dmx_tx_buffer,
        .dataSize = DMX_FRAME_SIZE
    };

txOnGoing = true;
if (kStatus_Success != LPUART_SendEDMA(LPDMX3, &g_lpuartEdmaHandle, &xfer)) {
txOnGoing = false;
printk("DMA Transfer Failed!\n");
    }
}
Code ends up in 
 
 
(void)arch_irq_lock();
for (;;) {
        /* Spin endlessly * }
 
Thanks in advance
0 Kudos
Reply
3 Replies

667 Views
danielmartynek
NXP TechSupport
NXP TechSupport

Hi @NFRED,

You did not specify the MCU part number.

In general, you should double‑check the LPUART eDMA interrupt configuration in both the modules and the NVIC.
It could be that instead of the ISR implemented in the project, an unimplemented ISR is firing, which would call the default ISR and result in a fatal error.

 

Regards,

Daniel

 

 

 

 

0 Kudos
Reply

665 Views
NFRED
Contributor I

Hi @danielmartynek 

 

Thanks for the reply! I am working on a MIMXRT1064.

I already thought something like a unimplemented ISR, since in the serial logger it says unhandles interrupt:0, but if I enabled that channel, it would just return a different channel.

0 Kudos
Reply

618 Views
Gavin_Jia
NXP TechSupport
NXP TechSupport

Hi @NFRED ,

Thanks for your interest in NXP MIMXRT series!

If you are using Zephyr, we recommend that your application also use the UART_Async_API. Mixing MCUXSDK and Zephyr implementations may cause issues; for example, certain DMA might be enabled by default in the Zephyr framework or reserved for other peripherals. Additionally, I’ve reviewed your code and noticed a few points that may require attention:

1. lpuartConfig.enableTx/Rx must be manually set to true;

2. For non-cached regions, it is best to use the Zephyr style:

CONFIG_NOCACHE_MEMORY=y
#define DMA_NOCACHE __nocache
static DMA_NOCACHE uint8_t rx_buf1[RX_BUF_SIZE];
 
3. Add handling for DMA_ERROR_IRQn to assist with troubleshooting.
 
 
Best regards,
Gavin
0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-2333414%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ELPUART%20eDMA%20in%20Zephyr%20RTOS%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2333414%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%20all%2C%20I%20am%20currently%20working%20on%20a%20DMX%20driver%2C%20which%20runs%20using%20the%20LPUART%20driver.%20At%20the%20moment%20I%20am%20running%20in%20an%20issue%20with%20using%20the%20eDMA%20in%20Zephyr%2C%20where%20the%20interrupt%20never%20fires%20correctly%20and%20thus%20never%20sets%20the%20tx%20line%20back%20to%20idle%20state.%26nbsp%3B%3C%2FP%3E%3CP%3EI%20am%20mostly%20using%20the%20eDMA%20config%20from%20the%20lpuart_edma%20example.%20I%20am%20using%20Zephyr%20OS%20for%20scheduling%20but%20do%20to%20needing%20as%20little%20cpu%20cycles%20i%20want%20to%20use%20the%20nxp%20drivers%20directly.%3CBR%20%2F%3E%3CBR%20%2F%3ECan%20anyone%20help%3F%20see%20software%20and%20screenshots%20below.%3C%2FP%3E%3CBR%20%2F%3E%3CBLOCKQUOTE%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3E%23include%3C%2FSPAN%3E%20%3CSPAN%3E%3CZEPHYR%3E%3C%2FZEPHYR%3E%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%3C%2FSPAN%3E%20%3CSPAN%3E%3CZEPHYR%3E%3C%2FZEPHYR%3E%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%3C%2FSPAN%3E%20%3CSPAN%3E%3CZEPHYR%3E%3C%2FZEPHYR%3E%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%3C%2FSPAN%3E%20%3CSPAN%3E%22..%2Flpuart%2Ffsl_lpuart_edma.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%3C%2FSPAN%3E%20%3CSPAN%3E%22..%2Fdmamux%2Ffsl_dmamux.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%3C%2FSPAN%3E%20%3CSPAN%3E%22fsl_iomuxc.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%3C%2FSPAN%3E%20%3CSPAN%3E%22dmx.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%23define%3C%2FSPAN%3E%20%3CSPAN%3ELPDMX3%3C%2FSPAN%3E%3CSPAN%3ELPUART3%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23define%3C%2FSPAN%3E%20%3CSPAN%3ELPUART_DMA_BASEADDR%3C%2FSPAN%3E%20%3CSPAN%3EDMA0%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23define%3C%2FSPAN%3E%20%3CSPAN%3ELPUART_DMAMUX_BASEADDR%3C%2FSPAN%3E%20%3CSPAN%3EDMAMUX%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23define%3C%2FSPAN%3E%20%3CSPAN%3ELPUART_TX_DMA_CHANNEL%3C%2FSPAN%3E%20%3CSPAN%3E0U%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23define%3C%2FSPAN%3E%20%3CSPAN%3EDMX_FRAME_SIZE%3C%2FSPAN%3E%3CSPAN%3E512%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Estatic%3C%2FSPAN%3E%20%3CSPAN%3Euint8_t%3C%2FSPAN%3E%20%3CSPAN%3Edmx_tx_buffer%3C%2FSPAN%3E%3CSPAN%3E%5B%3C%2FSPAN%3E%3CSPAN%3EDMX_FRAME_SIZE%3C%2FSPAN%3E%3CSPAN%3E%5D%20%3C%2FSPAN%3E%3CSPAN%3E__attribute__%3C%2FSPAN%3E%3CSPAN%3E((%3C%2FSPAN%3E%3CSPAN%3Esection%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22.nocache%22%3C%2FSPAN%3E%3CSPAN%3E)))%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Elpuart_edma_handle_t%3C%2FSPAN%3E%20%3CSPAN%3Eg_lpuartEdmaHandle%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eedma_handle_t%3C%2FSPAN%3E%20%3CSPAN%3Eg_lpuartTxEdmaHandle%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Evolatile%3C%2FSPAN%3E%20%3CSPAN%3Ebool%3C%2FSPAN%3E%20%3CSPAN%3EtxOnGoing%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3Efalse%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%20%3CSPAN%3ELPUART_UserCallback%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3ELPUART_Type%3C%2FSPAN%3E%20%3CSPAN%3E*%3C%2FSPAN%3E%3CSPAN%3Ebase%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Elpuart_edma_handle_t%3C%2FSPAN%3E%20%3CSPAN%3E*%3C%2FSPAN%3E%3CSPAN%3Ehandle%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Estatus_t%3C%2FSPAN%3E%20%3CSPAN%3Estatus%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%20%3CSPAN%3E*%3C%2FSPAN%3E%3CSPAN%3EuserData%3C%2FSPAN%3E%3CSPAN%3E)%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eif%3C%2FSPAN%3E%3CSPAN%3E%20(%3C%2FSPAN%3E%3CSPAN%3Estatus%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3D%3C%2FSPAN%3E%20%3CSPAN%3EkStatus_LPUART_TxIdle%3C%2FSPAN%3E%3CSPAN%3E)%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EtxOnGoing%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3Efalse%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%20%3CSPAN%3Elpuart3_tx_dma_irq_handler%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Econst%3C%2FSPAN%3E%20%3CSPAN%3Evoid%3C%2FSPAN%3E%20%3CSPAN%3E*%3C%2FSPAN%3E%3CSPAN%3Earg%3C%2FSPAN%3E%3CSPAN%3E)%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EEDMA_HandleIRQ%3C%2FSPAN%3E%3CSPAN%3E((%3C%2FSPAN%3E%3CSPAN%3Eedma_handle_t%3C%2FSPAN%3E%20%3CSPAN%3E*%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3CSPAN%3Earg%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%20%3CSPAN%3Esend_break%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3ELPDMX3%3C%2FSPAN%3E%3CSPAN%3E-%26gt%3B%3C%2FSPAN%3E%3CSPAN%3ECTRL%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E%26lt%3B%26lt%3B%3C%2FSPAN%3E%3CSPAN%3E13%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3ELPDMX3%3C%2FSPAN%3E%3CSPAN%3E-%26gt%3B%3C%2FSPAN%3E%3CSPAN%3ECTRL%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E%26lt%3B%26lt%3B%3C%2FSPAN%3E%3CSPAN%3E13%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3ELPDMX3%3C%2FSPAN%3E%3CSPAN%3E-%26gt%3B%3C%2FSPAN%3E%3CSPAN%3ECTRL%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E%26lt%3B%26lt%3B%3C%2FSPAN%3E%3CSPAN%3E13%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3ELPDMX3%3C%2FSPAN%3E%3CSPAN%3E-%26gt%3B%3C%2FSPAN%3E%3CSPAN%3ECTRL%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E%26lt%3B%26lt%3B%3C%2FSPAN%3E%3CSPAN%3E13%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%20%3CSPAN%3Edmx_hal_init%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Elpuart_config_t%3C%2FSPAN%3E%20%3CSPAN%3Econfig%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eedma_config_t%3C%2FSPAN%3E%20%3CSPAN%3EedmaConfig%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3ECLOCK_EnableClock%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EkCLOCK_Lpuart3%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EIOMUXC_SetPinMux%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EIOMUXC_GPIO_AD_B1_06_LPUART3_TX%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E0U%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EIOMUXC_SetPinMux%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EIOMUXC_GPIO_AD_B1_07_LPUART3_RX%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E0U%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3ELPUART_GetDefaultConfig%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3Econfig%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Econfig%3C%2FSPAN%3E%3CSPAN%3E.%3C%2FSPAN%3E%3CSPAN%3EbaudRate_Bps%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3E250000%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3CSPAN%3E%20%2F%2F%20Standard%20DMX%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Econfig%3C%2FSPAN%3E%3CSPAN%3E.%3C%2FSPAN%3E%3CSPAN%3EstopBitCount%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3EkLPUART_TwoStopBit%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3ELPUART_Init%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3ELPDMX3%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3Econfig%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ECLOCK_GetFreq%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EkCLOCK_Lpuart3%3C%2FSPAN%3E%3CSPAN%3E))%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3EDMAMUX_Init%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3ELPUART_DMAMUX_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EDMAMUX_SetSource%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3ELPUART_DMAMUX_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ELPUART_TX_DMA_CHANNEL%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EkDmaRequestMuxLPUART3Tx%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EDMAMUX_EnableChannel%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3ELPUART_DMAMUX_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ELPUART_TX_DMA_CHANNEL%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3EEDMA_GetDefaultConfig%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3EedmaConfig%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EEDMA_Init%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3ELPUART_DMA_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3EedmaConfig%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EEDMA_CreateHandle%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3Eg_lpuartTxEdmaHandle%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ELPUART_DMA_BASEADDR%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ELPUART_TX_DMA_CHANNEL%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3ELPUART_TransferCreateHandleEDMA%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3ELPDMX3%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3Eg_lpuartEdmaHandle%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ELPUART_UserCallback%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ENULL%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3Eg_lpuartTxEdmaHandle%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ENULL%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3EIRQ_CONNECT%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EDMA0_DMA16_IRQn%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E5%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Elpuart3_tx_dma_irq_handler%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3Eg_lpuartTxEdmaHandle%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eirq_enable%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EDMA0_DMA16_IRQn%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%20%3CSPAN%3Edmx_send_frame%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Econst%3C%2FSPAN%3E%20%3CSPAN%3Euint8_t%3C%2FSPAN%3E%20%3CSPAN%3E*%3C%2FSPAN%3E%3CSPAN%3Esrc_data%3C%2FSPAN%3E%3CSPAN%3E)%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F%2F%20if%20(txOnGoing)%20return%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Ememcpy%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Edmx_tx_buffer%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Esrc_data%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EDMX_FRAME_SIZE%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Elpuart_transfer_t%3C%2FSPAN%3E%20%3CSPAN%3Exfer%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%3CSPAN%3E%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20.%3C%2FSPAN%3E%3CSPAN%3Edata%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3Edmx_tx_buffer%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20.%3C%2FSPAN%3E%3CSPAN%3EdataSize%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3EDMX_FRAME_SIZE%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7D%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3EtxOnGoing%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eif%3C%2FSPAN%3E%3CSPAN%3E%20(%3C%2FSPAN%3E%3CSPAN%3EkStatus_Success%3C%2FSPAN%3E%20%3CSPAN%3E!%3D%3C%2FSPAN%3E%20%3CSPAN%3ELPUART_SendEDMA%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3ELPDMX3%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3Eg_lpuartEdmaHandle%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3Exfer%3C%2FSPAN%3E%3CSPAN%3E))%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EtxOnGoing%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3Efalse%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eprintk%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22DMA%20Transfer%20Failed!%3C%2FSPAN%3E%3CSPAN%3E%5Cn%3C%2FSPAN%3E%3CSPAN%3E%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FBLOCKQUOTE%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3E%3CSPAN%3ECode%20ends%20up%20in%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3CDIV%20class%3D%22%22%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%20class%3D%22%22%3E%26nbsp%3B%3C%2FDIV%3E%3CBLOCKQUOTE%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3CSPAN%3Earch_irq_lock%3C%2FSPAN%3E%3CSPAN%3E()%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Efor%3C%2FSPAN%3E%3CSPAN%3E%20(%3B%3B)%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%2F*%20Spin%20endlessly%20*%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FBLOCKQUOTE%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3EThanks%20in%20advance%3C%2FSPAN%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2334560%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20LPUART%20eDMA%20in%20Zephyr%20RTOS%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2334560%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F160001%22%20target%3D%22_blank%22%3E%40danielmartynek%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EThanks%20for%20the%20reply!%20I%20am%20working%20on%20a%20MIMXRT1064.%3C%2FP%3E%3CP%3EI%20already%20thought%20something%20like%20a%20unimplemented%20ISR%2C%20since%20in%20the%20serial%20logger%20it%20says%20unhandles%20interrupt%3A0%2C%20but%20if%20I%20enabled%20that%20channel%2C%20it%20would%20just%20return%20a%20different%20channel.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2334551%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20LPUART%20eDMA%20in%20Zephyr%20RTOS%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2334551%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F260737%22%20target%3D%22_blank%22%3E%40NFRED%3C%2FA%3E%2C%3C%2FP%3E%0A%3CP%3EYou%20did%20not%20specify%20the%20MCU%20part%20number.%3C%2FP%3E%0A%3CP%3EIn%20general%2C%20you%20should%20double%E2%80%91check%20the%20LPUART%20eDMA%20interrupt%20configuration%20in%20both%20the%20modules%20and%20the%20NVIC.%3CBR%20%2F%3EIt%20could%20be%20that%20instead%20of%20the%20ISR%20implemented%20in%20the%20project%2C%20an%20unimplemented%20ISR%20is%20firing%2C%20which%20would%20call%20the%20default%20ISR%20and%20result%20in%20a%20fatal%20error.%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3ERegards%2C%3C%2FP%3E%0A%3CP%3EDaniel%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2336343%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20LPUART%20eDMA%20in%20Zephyr%20RTOS%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2336343%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F260737%22%20target%3D%22_blank%22%3E%40NFRED%3C%2FA%3E%26nbsp%3B%2C%3C%2FP%3E%0A%3CP%3EThanks%20for%20your%20interest%20in%20NXP%20MIMXRT%20series!%3C%2FP%3E%0A%3CP%3EIf%20you%20are%20using%20Zephyr%2C%20we%20recommend%20that%20your%20application%20also%20use%20the%20UART_Async_API.%20Mixing%20MCUXSDK%20and%20Zephyr%20implementations%20may%20cause%20issues%3B%20for%20example%2C%20certain%20DMA%20might%20be%20enabled%20by%20default%20in%20the%20Zephyr%20framework%20or%20reserved%20for%20other%20peripherals.%20Additionally%2C%20I%E2%80%99ve%20reviewed%20your%20code%20and%20noticed%20a%20few%20points%20that%20may%20require%20attention%3A%3C%2FP%3E%0A%3CP%3E1.%26nbsp%3BlpuartConfig.enableTx%2FRx%20must%20be%20manually%20set%20to%20true%3B%3C%2FP%3E%0A%3CP%3E2.%20For%20non-cached%20regions%2C%20it%20is%20best%20to%20use%20the%20Zephyr%20style%3A%3C%2FP%3E%0A%3CDIV%3E%0A%3CDIV%3E%3CSPAN%3ECONFIG_NOCACHE_MEMORY%3C%2FSPAN%3E%3CSPAN%3E%3Dy%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CDIV%3E%0A%3CDIV%3E%3CSPAN%3E%23define%3C%2FSPAN%3E%20%3CSPAN%3EDMA_NOCACHE%3C%2FSPAN%3E%20%3CSPAN%3E__nocache%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%3E%0A%3CDIV%3E%3CSPAN%3Estatic%3C%2FSPAN%3E%20%3CSPAN%3EDMA_NOCACHE%3C%2FSPAN%3E%20%3CSPAN%3Euint8_t%3C%2FSPAN%3E%20%3CSPAN%3Erx_buf1%3C%2FSPAN%3E%3CSPAN%3E%5B%3C%2FSPAN%3E%3CSPAN%3ERX_BUF_SIZE%3C%2FSPAN%3E%3CSPAN%3E%5D%3B%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E3.%20Add%20handling%20for%20DMA_ERROR_IRQn%20to%20assist%20with%20troubleshooting.%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3EAnd%20I%20found%20there%20is%20a%20post%20may%20help.%20%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fi-MX-RT-Crossover-MCUs%2FLPUART-eDMA-Efficient-asynch-reception-of-bursty-data-with-DMA%2Fm-p%2F1642814%22%20target%3D%22_blank%22%3Ehttps%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fi-MX-RT-Crossover-MCUs%2FLPUART-eDMA-Efficient-asynch-reception-of-bursty-data-with-DMA%2Fm-p%2F1642814%3C%2FA%3E%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3EBest%20regards%2C%3CBR%20%2F%3EGavin%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%3C%2FLINGO-BODY%3E