Quantcast
Channel: 数字信号处理器 (DSP) & ARM® 微处理器
Viewing all articles
Browse latest Browse all 21822

帖子: C6678多核DMA数据搬移问题

$
0
0

八个核在进行DMA搬移时,核0不能完成数据搬移,其他的核都能完成,核0会死在一个函数里,

这个函数是:

do
{
     CSL_edma3GetHwStatus(hModule,CSL_EDMA3_QUERY_INTRPEND,&regionIntr);
} while (!(regionIntr.intr & query));

程序会陷入死循环,但是不知道为什么?求解答!

DMA程序如下所示:

1.

void DMA_transportAB(int ChannelNum,float *srcBuff,int srcIncrement , int Acnt , float * dstBuff,int dstIncrement , int Bcnt)
{ //( 核号, 源地址, 传输间隔(增量), 发送数据包大小, 目的地址, 接收间隔, 接收数据包大小,)


myParamSetup.option = CSL_EDMA3_OPT_MAKE(CSL_EDMA3_ITCCH_DIS, \
CSL_EDMA3_TCCH_DIS, \
CSL_EDMA3_ITCINT_DIS, \
CSL_EDMA3_TCINT_EN, \
ChannelNum, CSL_EDMA3_TCC_NORMAL,\
CSL_EDMA3_FIFOWIDTH_NONE, \
CSL_EDMA3_STATIC_DIS, \
CSL_EDMA3_SYNC_AB, \
CSL_EDMA3_ADDRMODE_INCR, \
CSL_EDMA3_ADDRMODE_INCR );


myParamSetup.srcAddr = (Uint32)srcBuff;
myParamSetup.aCntbCnt = CSL_EDMA3_CNT_MAKE(Acnt,Bcnt);
myParamSetup.dstAddr = (Uint32)dstBuff;
myParamSetup.srcDstBidx = CSL_EDMA3_BIDX_MAKE(srcIncrement,dstIncrement);
myParamSetup.srcDstCidx = CSL_EDMA3_CIDX_MAKE(0,0);
myParamSetup.cCnt = 1;
myParamSetup.linkBcntrld= CSL_EDMA3_LINKBCNTRLD_MAKE(CSL_EDMA3_LINK_NULL,0);
CSL_edma3ParamSetup(hParamPing,&myParamSetup);

regionIntr.region = CSL_EDMA3_REGION_GLOBAL;
regionIntr.intr = 0x1<<ChannelNum;
regionIntr.intrh = 0x0000;

CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL);
}

2.

void waitDMAover(int ChannelNum)
{

int query;
query = 0x01<<ChannelNum;
regionIntr.region = CSL_EDMA3_REGION_GLOBAL;
regionIntr.intr = 0;
regionIntr.intrh = 0;

do
{
CSL_edma3GetHwStatus(hModule,CSL_EDMA3_QUERY_INTRPEND,&regionIntr);
} while (!(regionIntr.intr & query));

regionIntr.region = CSL_EDMA3_REGION_GLOBAL;
regionIntr.intr = 0x01<<ChannelNum;
regionIntr.intrh = 0;

CSL_edma3HwControl(hModule,CSL_EDMA3_CMD_INTRPEND_CLEAR, &regionIntr);

}


Viewing all articles
Browse latest Browse all 21822

Trending Articles