主题中讨论的其他器件:TM4C129ENCPDT
工具/软件:Code Composer Studio
您好社区。
我在 UDMA_MODE_PER_SP散 射收集模式下通过 UART 接收数据时遇到问题。 我有四个 Rx Biffer:
unsigned char FirstBufferRx[RX_buffer_length]={0};
unsigned char SecondBufferRx[RX_buffer_length]={0};
unsigned char thirdBufferRx[RX_buffer_length]={0};
unsigned char FourtBufferRx[RX_buffer_length]={0};
然后我有 DMA_ControlTable
DMA_ControlTable g_TaskTableDst[4]=
{
//任务1:将 UART 数据复制到片段缓冲区1.
DMA_TaskStructEntry (RX_buffer_length、UDMA_SIZE_8、
UDMA_SRC_INC_NONE、
&EUSCI_A0->RXBUF、
UDMA_DST_INC_8、FirstBufferRx、
UDMA_ARB_1、UDMA_MODE_PER_散 射_收集)、
//
//任务2:将 UART 数据复制到片段缓冲区2.
//
DMA_TaskStructEntry (RX_buffer_length、UDMA_SIZE_8、
UDMA_SRC_INC_NONE、&EUSCI_A0->RXBUF、
UDMA_DST_INC_8、二级缓冲器接收、
UDMA_ARB_1、UDMA_MODE_PER_散 射_收集)、
//
//任务3:将 UART 数据复制到片段缓冲区3中,
DMA_TaskStructEntry (RX_buffer_length、UDMA_SIZE_8、
UDMA_SRC_INC_NONE、&EUSCI_A0->RXBUF、
UDMA_DST_INC_8、ThirdBufferRx、
UDMA_ARB_1、UDMA_MODE_PER_散 射_收集)、
//任务4:将最后1个字节从 UART 复制到最后一个片段缓冲区的末尾
DMA_TaskStructEntry (RX_buffer_length、UDMA_SIZE_8、
UDMA_SRC_INC_NONE、 &EUSCI_A0->RXBUF、
UDMA_DST_INC_8、FourtBufferRx、
UDMA_ARB_1、UDMA_MODE_BASIC)
};
然后我准备 DMA:
/*配置 DMA 模块*/
map_dma_enableModule();
MAP_DMA_setControlBase (MSP_EXP432P401RLP_DMAControlTable);
/*将通道0分配给 EUSCIA0TX*/
MAP_DMA_赋 值通道(DMA_CH0_EUSCIA0TX);
/*将通道1分配给 EUSCIA0RX*/
MAP_DMA_赋 值通道(DMA_CH1_EUSCIA0RX);
//为散聚配置 UART RX DMA 通道
MAP_DMA_setChannelScatterGather (DMA_CH1_EUSCIA0RX、4、(void*) g_TaskTableDst、1);
map_dma_enableChannel (dma_channel_1);
开始后、我从 PC 终端发送一些字符。 并获取中断空 EUSCIA0_IRQHandler。
我可以在 EUSCI_A=->UCARXBUF_SPI 寄存器中看到来自 sendet 序列的最后一个字符、但我的四个缓冲区仍然存在
空。 看起来 UART0和缓冲器之间没有连接。
要获得明智的建议:非常感谢 adwance