This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570LC4357: Chaining DMA Configuration Settings Doesnt Work

Part Number: TMS570LC4357

Hi,

I need a DMA with chaning. I setup two DMA channel like below.

void dma_setup(void);

uint32 dummy_1[2] = {0xDEADC0DE};
uint32 dummy_2[2] = {0xFAFAFAFA};

int main()
{
dma_setup();
dmaEnable();

while(1)
{
int timeOut = 0x0FFF;

dmaSetChEnable(DMA_CH0, DMA_SW);

while(timout--)
;

}
}


void dma_setup(void)
{
g_dmaCTRL g_dmaCTRLPKT = {0};
g_dmaCTRLPKT.SADD = (uint32)&dummy_1[0]; /* source address */
g_dmaCTRLPKT.DADD = (uint32)&dummy_1[1]; /* destination address */
g_dmaCTRLPKT.CHCTRL = 2; /* Chaining Channel 1 */
g_dmaCTRLPKT.FRCNT = 1; /* frame count */
g_dmaCTRLPKT.ELCNT = 1; /* element count */
g_dmaCTRLPKT.ELDOFFSET = 4; /* element destination offset */
g_dmaCTRLPKT.ELSOFFSET = 0; /* element destination offset */
g_dmaCTRLPKT.FRDOFFSET = 0; /* frame destination offset */
g_dmaCTRLPKT.FRSOFFSET = 0; /* frame destination offset */
g_dmaCTRLPKT.PORTASGN = PORTA_READ_PORTA_WRITE; /* mem-to-mem */
g_dmaCTRLPKT.RDSIZE = ACCESS_32_BIT; /* read size */
g_dmaCTRLPKT.WRSIZE = ACCESS_32_BIT; /* write size */
g_dmaCTRLPKT.TTYPE = FRAME_TRANSFER ; /* transfer type */
g_dmaCTRLPKT.ADDMODERD = ADDR_FIXED; /* address mode read */
g_dmaCTRLPKT.ADDMODEWR = ADDR_FIXED; /* address mode write */
g_dmaCTRLPKT.AUTOINIT = AUTOINIT_OFF; /* autoinit */

dmaSetCtrlPacket(DMA_CH0, g_dmaCTRLPKT);


g_dmaCTRL g_dmaCTRLPKT2 = {0};
g_dmaCTRLPKT2.SADD = (uint32)&dummy_2[0]; /* source address */
g_dmaCTRLPKT2.DADD = (uint32)&dummy_2[1]; /* destination address */
g_dmaCTRLPKT2.CHCTRL = 0; /* Chaining Channel 1 */
g_dmaCTRLPKT2.FRCNT = 1; /* frame count */
g_dmaCTRLPKT2.ELCNT = 1; /* element count */
g_dmaCTRLPKT2.ELDOFFSET = 4; /* element destination offset */
g_dmaCTRLPKT2.ELSOFFSET = 0; /* element destination offset */
g_dmaCTRLPKT2.FRDOFFSET = 0; /* frame destination offset */
g_dmaCTRLPKT2.FRSOFFSET = 0; /* frame destination offset */
g_dmaCTRLPKT2.PORTASGN = PORTA_READ_PORTA_WRITE; /* mem-to-mem */
g_dmaCTRLPKT2.RDSIZE = ACCESS_32_BIT; /* read size */
g_dmaCTRLPKT2.WRSIZE = ACCESS_32_BIT; /* write size */
g_dmaCTRLPKT2.TTYPE = FRAME_TRANSFER; /* transfer type */
g_dmaCTRLPKT2.ADDMODERD = ADDR_FIXED; /* address mode read */
g_dmaCTRLPKT2.ADDMODEWR = ADDR_FIXED; /* address mode write */
g_dmaCTRLPKT2.AUTOINIT = AUTOINIT_OFF; /* autoinit */

dmaSetCtrlPacket(DMA_CH1, g_dmaCTRLPKT2);
}

First DMA channel(DMA_CH0) is working but DMA_CH1 is not triggered by DMA_CH0.

Can you help me ?