<?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のトピックproblem at EDMA with 2 UART in Kinetis KV24F64</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/problem-at-EDMA-with-2-UART-in-Kinetis-KV24F64/m-p/1172678#M58597</link>
    <description>&lt;P&gt;Hello Dears.&lt;/P&gt;&lt;P&gt;when implementing two UART (UART0 , UART1) with RX EDMA on UART0 and TX EDMA on UART1 , I am losing Rx Packets on UART0 RX EDMA link when sending Data throught the EDMA link on UART1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;UART0 EDMA init code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-SPOILER&gt;&lt;P&gt;UART_GetDefaultConfig(&amp;amp;uartConfig);&lt;BR /&gt;uartConfig.baudRate_Bps = 1000000;&lt;BR /&gt;uartConfig.enableTx = false;&lt;BR /&gt;uartConfig.enableRx = true;&lt;BR /&gt;uartConfig.stopBitCount=kUART_OneStopBit;&lt;BR /&gt;&lt;BR /&gt;statusSt= UART_Init(UART1, &amp;amp;uartConfig, UART1_CLK_FREQ);&lt;BR /&gt;/* Init DMAMUX */&lt;BR /&gt;DMAMUX_Init(UART1_DMAMUX_BASEADDR);&lt;BR /&gt;/* Set channel for UART */&lt;/P&gt;&lt;P&gt;DMAMUX_SetSource(UART1_DMAMUX_BASEADDR, UART_RX_DMA_CHANNEL, UART_RX_DMA_REQUEST);&lt;/P&gt;&lt;P&gt;DMAMUX_EnableChannel(UART1_DMAMUX_BASEADDR, UART_RX_DMA_CHANNEL);&lt;/P&gt;&lt;P&gt;/* Init the EDMA module */&lt;BR /&gt;EDMA_GetDefaultConfig(&amp;amp;config);&lt;BR /&gt;config.enableRoundRobinArbitration=true;&lt;BR /&gt;EDMA_Init(UART1_DMA_BASEADDR, &amp;amp;config);&lt;/P&gt;&lt;P&gt;EDMA_CreateHandle(&amp;amp;g_uartRxEdmaHandle, UART1_DMA_BASEADDR, UART_RX_DMA_CHANNEL);&lt;BR /&gt;&lt;BR /&gt;edma_transfer_config_t xferConfig;&lt;/P&gt;&lt;P&gt;/* Install TCD memory. */&lt;BR /&gt;EDMA_InstallTCDMemory(&amp;amp;g_uartRxEdmaHandle, tcdMemoryPoolPtr, 1);&lt;/P&gt;&lt;P&gt;/* Prepare transfer to receive data to ring buffer. */&lt;BR /&gt;EDMA_PrepareTransfer(&amp;amp;xferConfig, (void *)UART_GetDataRegisterAddress(UART1), sizeof(uint8_t), g_ringBuffer,&lt;BR /&gt;sizeof(uint8_t), sizeof(uint8_t), UART1_BUFFER_LENGTH, kEDMA_PeripheralToMemory);&lt;/P&gt;&lt;P&gt;/* Submit transfer. */&lt;BR /&gt;g_uartRxEdmaHandle.tcdUsed = 1U;&lt;BR /&gt;g_uartRxEdmaHandle.tail = 0U;&lt;BR /&gt;EDMA_TcdReset(&amp;amp;g_uartRxEdmaHandle.tcdPool[0U]);&lt;BR /&gt;EDMA_TcdSetTransferConfig(&amp;amp;g_uartRxEdmaHandle.tcdPool[0U], &amp;amp;xferConfig, tcdMemoryPoolPtr);&lt;/P&gt;&lt;P&gt;/* Enable major interrupt for calculating the received bytes. */&lt;BR /&gt;// g_uartRxEdmaHandle.tcdPool[0U].CSR |= DMA_CSR_INTMAJOR_MASK;&lt;/P&gt;&lt;P&gt;/* There is no live chain, TCD block need to be installed in TCD registers. */&lt;BR /&gt;EDMA_InstallTCD(UART1_DMA_BASEADDR, UART_RX_DMA_CHANNEL, &amp;amp;g_uartRxEdmaHandle.tcdPool[0U]);&lt;/P&gt;&lt;P&gt;/* Start EDMA transfer. */&lt;BR /&gt;EDMA_StartTransfer(&amp;amp;g_uartRxEdmaHandle);&lt;/P&gt;&lt;P&gt;/* Enable UART RX EDMA. */&lt;BR /&gt;UART_EnableRxDMA(UART1, true);&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;UART_EnableInterrupts(UART1, kUART_NoiseErrorInterruptEnable |kUART_FramingErrorInterruptEnable&lt;BR /&gt;|kUART_RxOverrunInterruptEnable);&lt;BR /&gt;&lt;BR /&gt;EnableIRQ(UART1_ERR_IRQn);&lt;BR /&gt;&lt;BR /&gt;NVIC_SetPriority(UART1_ERR_IRQn, 0); /* 0 Set priority to interrupt */&lt;/P&gt;&lt;/LI-SPOILER&gt;&lt;P&gt;&amp;nbsp;UART1 (MOdBusUART)&amp;nbsp; EDMA init Fun:&lt;/P&gt;&lt;LI-SPOILER&gt;&lt;P&gt;UART_GetDefaultConfig(&amp;amp;MOdBusuartConfig);&lt;BR /&gt;MOdBusuartConfig.baudRate_Bps = MOdBusBR;&lt;BR /&gt;MOdBusuartConfig.enableTx = true;&lt;BR /&gt;MOdBusuartConfig.enableRx = true;&lt;BR /&gt;MOdBusuartConfig.idleType = kUART_IdleTypeStopBit;&lt;/P&gt;&lt;P&gt;int myInitResult= UART_Init(MOdBusUART, &amp;amp;MOdBusuartConfig, MOdBusUART_CLK_FREQ);&lt;BR /&gt;preem.channelPriority=4;&lt;BR /&gt;preem.enableChannelPreemption=1;&lt;BR /&gt;preem.enablePreemptAbility=0;&lt;BR /&gt;EDMA_SetChannelPreemptionConfig (UART1_DMA_BASEADDR,MOdBusUART_TX_DMA_CHANNEL, &amp;amp;preem);&lt;/P&gt;&lt;P&gt;DMAMUX_SetSource(UART1_DMAMUX_BASEADDR, MOdBusUART_TX_DMA_CHANNEL, MOdBusUART_TX_DMA_REQUEST);&lt;/P&gt;&lt;P&gt;DMAMUX_EnableChannel(UART1_DMAMUX_BASEADDR, MOdBusUART_TX_DMA_CHANNEL);&lt;/P&gt;&lt;P&gt;EDMA_CreateHandle(&amp;amp;g_MOdBusuartTxEdmaHandle,UART1_DMA_BASEADDR, MOdBusUART_TX_DMA_CHANNEL);&lt;/P&gt;&lt;P&gt;MOdBusUART-&amp;gt;MODEM=0x06;&lt;BR /&gt;UART_ClearStatusFlags(MOdBusUART,&lt;BR /&gt;(kUART_IdleLineFlag | kUART_NoiseErrorFlag | kUART_FramingErrorFlag | kUART_ParityErrorFlag| kUART_RxOverrunFlag));&lt;/P&gt;&lt;P&gt;UART_TransferCreateHandleEDMA(MOdBusUART, &amp;amp;g_MOdBusuartEdmaHandle, NULL, NULL, &amp;amp;g_MOdBusuartTxEdmaHandle,&lt;BR /&gt;NULL);&lt;/P&gt;&lt;P&gt;UART_EnableInterrupts(MOdBusUART, kUART_NoiseErrorInterruptEnable |kUART_FramingErrorInterruptEnable&lt;BR /&gt;|kUART_RxOverrunInterruptEnable |kUART_RxDataRegFullInterruptEnable);&lt;BR /&gt;EnableIRQ(UART0_RX_TX_IRQn);&lt;BR /&gt;EnableIRQ(UART0_ERR_IRQn);&lt;BR /&gt;NVIC_SetPriority(UART0_RX_TX_IRQn, 4); /* 0 Set priority to interrupt */&lt;BR /&gt;NVIC_SetPriority(UART0_ERR_IRQn, 4); /* 0 Set priority to interrupt */&lt;/P&gt;&lt;/LI-SPOILER&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;I am sure that right at starting UART0 (MOdBusUART) sending sending function&lt;/P&gt;&lt;P&gt;UART_SendEDMA(MOdBusUART, &amp;amp;g_MOdBusuartEdmaHandle , &amp;amp;MOdBusSendXfer);&lt;/P&gt;&lt;P&gt;UART1&amp;nbsp; Rx EDMA is losing some Rx bytes !!&lt;/P&gt;</description>
    <pubDate>Sat, 24 Oct 2020 14:07:13 GMT</pubDate>
    <dc:creator>amerzater</dc:creator>
    <dc:date>2020-10-24T14:07:13Z</dc:date>
    <item>
      <title>problem at EDMA with 2 UART in Kinetis KV24F64</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/problem-at-EDMA-with-2-UART-in-Kinetis-KV24F64/m-p/1172678#M58597</link>
      <description>&lt;P&gt;Hello Dears.&lt;/P&gt;&lt;P&gt;when implementing two UART (UART0 , UART1) with RX EDMA on UART0 and TX EDMA on UART1 , I am losing Rx Packets on UART0 RX EDMA link when sending Data throught the EDMA link on UART1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;UART0 EDMA init code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-SPOILER&gt;&lt;P&gt;UART_GetDefaultConfig(&amp;amp;uartConfig);&lt;BR /&gt;uartConfig.baudRate_Bps = 1000000;&lt;BR /&gt;uartConfig.enableTx = false;&lt;BR /&gt;uartConfig.enableRx = true;&lt;BR /&gt;uartConfig.stopBitCount=kUART_OneStopBit;&lt;BR /&gt;&lt;BR /&gt;statusSt= UART_Init(UART1, &amp;amp;uartConfig, UART1_CLK_FREQ);&lt;BR /&gt;/* Init DMAMUX */&lt;BR /&gt;DMAMUX_Init(UART1_DMAMUX_BASEADDR);&lt;BR /&gt;/* Set channel for UART */&lt;/P&gt;&lt;P&gt;DMAMUX_SetSource(UART1_DMAMUX_BASEADDR, UART_RX_DMA_CHANNEL, UART_RX_DMA_REQUEST);&lt;/P&gt;&lt;P&gt;DMAMUX_EnableChannel(UART1_DMAMUX_BASEADDR, UART_RX_DMA_CHANNEL);&lt;/P&gt;&lt;P&gt;/* Init the EDMA module */&lt;BR /&gt;EDMA_GetDefaultConfig(&amp;amp;config);&lt;BR /&gt;config.enableRoundRobinArbitration=true;&lt;BR /&gt;EDMA_Init(UART1_DMA_BASEADDR, &amp;amp;config);&lt;/P&gt;&lt;P&gt;EDMA_CreateHandle(&amp;amp;g_uartRxEdmaHandle, UART1_DMA_BASEADDR, UART_RX_DMA_CHANNEL);&lt;BR /&gt;&lt;BR /&gt;edma_transfer_config_t xferConfig;&lt;/P&gt;&lt;P&gt;/* Install TCD memory. */&lt;BR /&gt;EDMA_InstallTCDMemory(&amp;amp;g_uartRxEdmaHandle, tcdMemoryPoolPtr, 1);&lt;/P&gt;&lt;P&gt;/* Prepare transfer to receive data to ring buffer. */&lt;BR /&gt;EDMA_PrepareTransfer(&amp;amp;xferConfig, (void *)UART_GetDataRegisterAddress(UART1), sizeof(uint8_t), g_ringBuffer,&lt;BR /&gt;sizeof(uint8_t), sizeof(uint8_t), UART1_BUFFER_LENGTH, kEDMA_PeripheralToMemory);&lt;/P&gt;&lt;P&gt;/* Submit transfer. */&lt;BR /&gt;g_uartRxEdmaHandle.tcdUsed = 1U;&lt;BR /&gt;g_uartRxEdmaHandle.tail = 0U;&lt;BR /&gt;EDMA_TcdReset(&amp;amp;g_uartRxEdmaHandle.tcdPool[0U]);&lt;BR /&gt;EDMA_TcdSetTransferConfig(&amp;amp;g_uartRxEdmaHandle.tcdPool[0U], &amp;amp;xferConfig, tcdMemoryPoolPtr);&lt;/P&gt;&lt;P&gt;/* Enable major interrupt for calculating the received bytes. */&lt;BR /&gt;// g_uartRxEdmaHandle.tcdPool[0U].CSR |= DMA_CSR_INTMAJOR_MASK;&lt;/P&gt;&lt;P&gt;/* There is no live chain, TCD block need to be installed in TCD registers. */&lt;BR /&gt;EDMA_InstallTCD(UART1_DMA_BASEADDR, UART_RX_DMA_CHANNEL, &amp;amp;g_uartRxEdmaHandle.tcdPool[0U]);&lt;/P&gt;&lt;P&gt;/* Start EDMA transfer. */&lt;BR /&gt;EDMA_StartTransfer(&amp;amp;g_uartRxEdmaHandle);&lt;/P&gt;&lt;P&gt;/* Enable UART RX EDMA. */&lt;BR /&gt;UART_EnableRxDMA(UART1, true);&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;UART_EnableInterrupts(UART1, kUART_NoiseErrorInterruptEnable |kUART_FramingErrorInterruptEnable&lt;BR /&gt;|kUART_RxOverrunInterruptEnable);&lt;BR /&gt;&lt;BR /&gt;EnableIRQ(UART1_ERR_IRQn);&lt;BR /&gt;&lt;BR /&gt;NVIC_SetPriority(UART1_ERR_IRQn, 0); /* 0 Set priority to interrupt */&lt;/P&gt;&lt;/LI-SPOILER&gt;&lt;P&gt;&amp;nbsp;UART1 (MOdBusUART)&amp;nbsp; EDMA init Fun:&lt;/P&gt;&lt;LI-SPOILER&gt;&lt;P&gt;UART_GetDefaultConfig(&amp;amp;MOdBusuartConfig);&lt;BR /&gt;MOdBusuartConfig.baudRate_Bps = MOdBusBR;&lt;BR /&gt;MOdBusuartConfig.enableTx = true;&lt;BR /&gt;MOdBusuartConfig.enableRx = true;&lt;BR /&gt;MOdBusuartConfig.idleType = kUART_IdleTypeStopBit;&lt;/P&gt;&lt;P&gt;int myInitResult= UART_Init(MOdBusUART, &amp;amp;MOdBusuartConfig, MOdBusUART_CLK_FREQ);&lt;BR /&gt;preem.channelPriority=4;&lt;BR /&gt;preem.enableChannelPreemption=1;&lt;BR /&gt;preem.enablePreemptAbility=0;&lt;BR /&gt;EDMA_SetChannelPreemptionConfig (UART1_DMA_BASEADDR,MOdBusUART_TX_DMA_CHANNEL, &amp;amp;preem);&lt;/P&gt;&lt;P&gt;DMAMUX_SetSource(UART1_DMAMUX_BASEADDR, MOdBusUART_TX_DMA_CHANNEL, MOdBusUART_TX_DMA_REQUEST);&lt;/P&gt;&lt;P&gt;DMAMUX_EnableChannel(UART1_DMAMUX_BASEADDR, MOdBusUART_TX_DMA_CHANNEL);&lt;/P&gt;&lt;P&gt;EDMA_CreateHandle(&amp;amp;g_MOdBusuartTxEdmaHandle,UART1_DMA_BASEADDR, MOdBusUART_TX_DMA_CHANNEL);&lt;/P&gt;&lt;P&gt;MOdBusUART-&amp;gt;MODEM=0x06;&lt;BR /&gt;UART_ClearStatusFlags(MOdBusUART,&lt;BR /&gt;(kUART_IdleLineFlag | kUART_NoiseErrorFlag | kUART_FramingErrorFlag | kUART_ParityErrorFlag| kUART_RxOverrunFlag));&lt;/P&gt;&lt;P&gt;UART_TransferCreateHandleEDMA(MOdBusUART, &amp;amp;g_MOdBusuartEdmaHandle, NULL, NULL, &amp;amp;g_MOdBusuartTxEdmaHandle,&lt;BR /&gt;NULL);&lt;/P&gt;&lt;P&gt;UART_EnableInterrupts(MOdBusUART, kUART_NoiseErrorInterruptEnable |kUART_FramingErrorInterruptEnable&lt;BR /&gt;|kUART_RxOverrunInterruptEnable |kUART_RxDataRegFullInterruptEnable);&lt;BR /&gt;EnableIRQ(UART0_RX_TX_IRQn);&lt;BR /&gt;EnableIRQ(UART0_ERR_IRQn);&lt;BR /&gt;NVIC_SetPriority(UART0_RX_TX_IRQn, 4); /* 0 Set priority to interrupt */&lt;BR /&gt;NVIC_SetPriority(UART0_ERR_IRQn, 4); /* 0 Set priority to interrupt */&lt;/P&gt;&lt;/LI-SPOILER&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;I am sure that right at starting UART0 (MOdBusUART) sending sending function&lt;/P&gt;&lt;P&gt;UART_SendEDMA(MOdBusUART, &amp;amp;g_MOdBusuartEdmaHandle , &amp;amp;MOdBusSendXfer);&lt;/P&gt;&lt;P&gt;UART1&amp;nbsp; Rx EDMA is losing some Rx bytes !!&lt;/P&gt;</description>
      <pubDate>Sat, 24 Oct 2020 14:07:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/problem-at-EDMA-with-2-UART-in-Kinetis-KV24F64/m-p/1172678#M58597</guid>
      <dc:creator>amerzater</dc:creator>
      <dc:date>2020-10-24T14:07:13Z</dc:date>
    </item>
  </channel>
</rss>

