NXP EDMA学习(3):Scatter/Gather模式之串口循环缓冲区的实现

在实际应用中,循环缓冲区的使用十分广泛,如果DMA每次接收一定字节然后再在中断中写入自己定义的循环缓冲区,这样又失去了使用DMA的意义。所以硬件上的循环缓冲区的实现非常重要。大部分芯片支持DMA循环模式,而NXP的eDMA则可以通过Scatter/Gather模式来实现硬件循环缓冲区。

文章目录

  • 1 TCD Pool初始化
  • 2 eDMA回调函数
  • 3 获取缓冲区接收长度

1 TCD Pool初始化

硬件循环缓冲区的代码与上一节大体相同,只不过增加了一个tcdPool,在前面的初始化完成后,无需调用UART_ReceiveEDMA,而是执行下面的函数来启动硬件循环缓冲区:

__attribute__((aligned(ALIGN))) uint8_t g_ringBuffer[256];
__attribute__((section("DataQuickAccess"))) __attribute__((aligned(sizeof(edma_tcd_t)))) edma_tcd_t tcdMemoryPoolPtr[1];
/* Start ring buffer configuration. */
static void EXAMPLE_StartRingBufferEDMA(void)
{
    edma_transfer_config_t xferConfig;

    /* 添加tcdPool到edma结构体中 */
    EDMA_InstallTCDMemory(&g_uartR

你可能感兴趣的:(NXP,嵌入式,嵌入式硬件,arm)