Tool/software: Code Composer Studio
Dear Forum. I have Problem with Scatter-Gather DMA Mode from MSP432P401R.
I have to sent four Buffers over UART0 in scatter-gather mode. In some Steps i tested UART: simple string transfer over UART to be sure, that UART
configured OK. After seeing String output on my PC, I started with scatter gather transfer. Some relevant parts of code is hier.
/* DMA Control Table */
#if defined(__TI_COMPILER_VERSION__)
#pragma DATA_ALIGN(MSP_EXP432P401RLP_DMAControlTable, 1024)
#elif defined(__IAR_SYSTEMS_ICC__)
#pragma data_alignment=1024
#elif defined(__GNUC__)
__attribute__ ((aligned (1024)))
#elif defined(__CC_ARM)
__align(1024)
#endif
static DMA_ControlTable MSP_EXP432P401RLP_DMAControlTable[1024];
DMA_ControlTable g_TaskTableSrc[4] =
{
//
// Task: copy fragment buffer 1 to UART
// arb size is 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_SCATTER_GATHER),
//
// Task : copy fragment buffer 2 to UART
// arb size is 8
//
DMA_TaskStructEntry(256, UDMA_SIZE_8,
UDMA_SRC_INC_8, SecondBufferTx,
UDMA_DST_INC_NONE,
&EUSCI_A0->TXBUF,
UDMA_ARB_8, UDMA_MODE_PER_SCATTER_GATHER),
//Task : copy fragment buffer 3 to 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_SCATTER_GATHER),
//
// Task : copy fragment buffer 4 to UART
// arb size is 8
// mode is basic since this is last task
//
DMA_TaskStructEntry(256, UDMA_SIZE_8,
UDMA_SRC_INC_8, FourtBufferTx,
UDMA_DST_INC_NONE,
&EUSCI_A0->TXBUF,
UDMA_ARB_8, UDMA_MODE_BASIC)
};
/* Configuring DMA module */
MAP_DMA_enableModule();
MAP_DMA_setControlBase(MSP_EXP432P401RLP_DMAControlTable);
//Configuring UART TX DMA channel for scatter-gather
MAP_DMA_setChannelScatterGather(DMA_CH0_EUSCIA0TX,4,(void*)g_TaskTableSrc,1);
/* Assigning interrupts */
MAP_DMA_assignInterrupt(DMA_INT1, DMA_CHANNEL_0);
MAP_DMA_clearInterruptFlag(DMA_CHANNEL_0);
MAP_DMA_enableInterrupt(DMA_INT0);
MAP_DMA_enableInterrupt(DMA_INT1);
/* Enable DMA Tx channel */
MAP_DMA_enableChannel(DMA_CHANNEL_0);
/* Forcing a software transfer on DMA Channel 0 */
MAP_DMA_requestSoftwareTransfer(0);
After last command I can see on my Terminal only two Charakters. But my FirstBufferTx and also another Buffers are 256 Byte long and full of Data.
Is somebody know Solution?