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.

OMAP-L138 DSP+ARM Processor EDMA 软件触发问题

在本来的EDMA搬运McASP接收,发送数据的程序基础上,进行修改,再增加一个通道,然后在EMA0中断中软件强制触发增加的通道ESRn=1,但是没有进行数据搬运,请问软件强制触发时,应该注意那些问题。

Uint16 linkAddr;
Uint16 linking=60+dmaCh*2+1;
Uint8 bAB = c>1;
memset((void*)srcAddr,6,a*b*c);
memset((void*)dstAddr,5,a*b*c);


//DMA Region Access Enable 使能通道
EDMA3ccRegs->DRA[1].DRAE |= 1<<dmaCh;

//DMA Channel Queue Number 通道映射到 TC 1
EDMA3ccRegs->DMAQNUM[dmaCh/8] |= 1<<(dmaCh*4);


EDMA3ccRegs->PARAMSET[dmaCh].OPT = 0x00100000 | (dmaCh<<12) | (bAB?1<<2:0) | (bAB?2<<8:0);
EDMA3ccRegs->PARAMSET[linking].OPT = 0x00100000 | (dmaCh<<12) | (bAB?1<<2:0) | (bAB?2<<8:0);

EDMA3ccRegs->PARAMSET[dmaCh].SRC_DST_BIDX = _pack2(a,a);
EDMA3ccRegs->PARAMSET[dmaCh].SRC_DST_CIDX = _pack2(a*b,a*b);
EDMA3ccRegs->PARAMSET[linking].SRC_DST_BIDX = _pack2(a,a);
EDMA3ccRegs->PARAMSET[linking].SRC_DST_CIDX = _pack2(a*b,a*b);

EDMA_Buf[5] = ( int *)dstAddr;

linkAddr = (Uint16)&(EDMA3ccRegs->PARAMSET[linking]);

EDMA3ccRegs->PARAMSET[dmaCh].SRC = srcAddr;//aore
EDMA3ccRegs->PARAMSET[dmaCh].A_B_CNT = _pack2(b, a);
EDMA3ccRegs->PARAMSET[dmaCh].DST = dstAddr;//aiwr
EDMA3ccRegs->PARAMSET[dmaCh].CCNT = c;
EDMA3ccRegs->PARAMSET[dmaCh].LINK_BCNTRLD = _pack2(b, linkAddr);

EDMA3ccRegs->PARAMSET[linking].SRC = srcAddr;//aore
EDMA3ccRegs->PARAMSET[linking].A_B_CNT = _pack2(b, a);
EDMA3ccRegs->PARAMSET[linking].DST = dstAddr;//aiwr
EDMA3ccRegs->PARAMSET[linking].CCNT = c;
EDMA3ccRegs->PARAMSET[linking].LINK_BCNTRLD = _pack2(b, linkAddr);

//清除事件
EDMA3ccRegs->EECR |= 1<<dmaCh;
EDMA3ccRegs->ECR |= 1<<dmaCh;
EDMA3ccRegs->EESR |= 1<<dmaCh;

//使能中断
EDMA3ccRegs->IESR |= 1<<dmaCh;