在实际应用中,循环缓冲区的使用十分广泛,如果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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)