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 ?