在本来的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;
Denny%20Yang99373:
可以先屏蔽掉一些代码调试一下
有可能配置出错,或者复用冲突
user4433409:
回复 Denny%20Yang99373:
可以了,设置不没错,我把7通道改为6通道就可以了,好尴尬,还有现在的程序搬运的数据比较少时,可以搬运成功,搬运数据较大时,我试到最多250个int可以成功,260个int就不可以了,但是可以进入中断,可以说说可能有哪里出了问题么?谢谢了
user4433409:
回复 Denny%20Yang99373:
可以了,设置不没错,我把7通道改为6通道就可以了,好尴尬,还有现在的程序搬运的数据比较少时,可以搬运成功,搬运数据较大时,我试到最多250个int可以成功,260个int就不可以了,但是可以进入中断,进入中断的次数跟触发的次数是一样。可以说说可能有哪里出了问题么?谢谢了