工具/软件:Code Composer Studio
尊敬的论坛。 我在 MSP432P401R 中的散聚 DMA 模式出现问题。
我必须在散聚模式下通过 UART0发送四个缓冲器。 在某些步骤中、我测试了 UART: 可以肯定的是、通过 UART 进行的简单字符串传输是 UART
配置正常。 在我的 PC 上看到字符串输出后、我开始了散聚传输。 代码的一些相关部分是 hier。
/* DMA 控制表*/
#if defined (__TI_Compiler_version__)
#pragma DATA_ALIGN (MSP_EXP432P401RLP_DMAControlTable、1024)
#Elif defined (_IAR_systems_icc_)
#pragma DATA_alignment=1024
#Elif defined (_GNU_)
__attribute__((对齐(1024)))
#Elif defined (_CC_ARM)
_align (1024)
#endif
静态 DMA_ControlTable MSP_EXP432P401RLP_DMAControlTable[1024];
DMA_ControlTable g_TaskTableSrc[4]=
{
//
//任务:将片段缓冲区1复制到 UART
// ARB 尺寸为8
//
DMA_TaskStructEntry (256、UDMA_SIZE_8、
UDMA_SRC_INC_8、FirstBufferTx、
UDMA_DST_INC_NONE、
&EUSCI_A0->TXBUF、
UDMA_ARB_8、UDMA_MODE_PER_散 射_收集)、
//
//任务:将片段缓冲区2复制到 UART
// ARB 尺寸为8
//
DMA_TaskStructEntry (256、UDMA_SIZE_8、
UDMA_SRC_INC_8、二级缓冲器 Tx、
UDMA_DST_INC_NONE、
&EUSCI_A0->TXBUF、
UDMA_ARB_8、UDMA_MODE_PER_散 射_收集)、
//任务 :将片段缓冲区3复制到 UART
DMA_TaskStructEntry (256、UDMA_SIZE_8、
UDMA_SRC_INC_8、ThirdBufferTx、
UDMA_DST_INC_NONE、
&EUSCI_A0->TXBUF、
UDMA_ARB_8、UDMA_MODE_PER_散 射_收集)、
//
//任务:将片段缓冲区4复制到 UART
// ARB 尺寸为8
//模式是基本的,因为这是最后一个任务
//
DMA_TaskStructEntry (256、UDMA_SIZE_8、
UDMA_SRC_INC_8、FourtBufferTx、
UDMA_DST_INC_NONE、
&EUSCI_A0->TXBUF、
UDMA_ARB_8、UDMA_MODE_BASIC)
};
/*配置 DMA 模块*/
map_dma_enableModule();
MAP_DMA_setControlBase (MSP_EXP432P401RLP_DMAControlTable);
//为散聚配置 UART TX DMA 通道
MAP_DMA_setChannelScatterGather (DMA_CH0_EUSCIA0TX、4、(void*) g_TaskTableSrc、1);
/*分配中断*/
MAP_DMA_赋 值中断(DMA_INT1、DMA_CHANNEL 0);
MAP_DMA_clearInterruptFlag (DMA_CHANNEL 0);
MAP_DMA_enableInterrupt (DMA_INT0);
MAP_DMA_enableInterrupt (DMA_INT1);
/*启用 DMA Tx 通道*/
map_dma_enableChannel (dma_channel_0);
/*强制在 DMA 通道0上进行软件传输*/
MAP_DMA_requestSoftwareTransfer (0);
在最后一个命令之后、我可以在终端上看到只有两个字符。 但我的 FirstBufferTx 和其他缓冲区的长度为256字节、且数据已满。
有人知道解决方案吗?