我现在想用EDMA3 A模式下传输一个二维数据,acnt为640, bcnt为120,ccnt为1,执行时会入死循环,手册说需要bcnt X ccnt个事件,我应该怎么做呢?谢谢!
CSL_Edma3ParamHandle hParamPing; //并不是Ping-Pong,只是定义了这样一个变量
CSL_Edma3ParamSetup myParamSetup;
CSL_Edma3ChannelHandle hChannel;
CSL_Edma3Handle hMoudle;
CSL_Edma3Obj edmaObj;
CSL_Edma3ChannelObj chObj;
CSL_Edma3CmdIntr regionIntr;
CSL_Edma3Context context;
CSL_Edma3ChannelAttr chAttr;
CSL_Status status;
unsigned char instNum = 2; //1
CSL_edma3Init(&context);
hMoudle = CSL_edma3Open(&edmaObj,instNum,NULL,&status);
chAttr.regionNum = CSL_EDMA3_REGION_GLOBAL;
chAttr.chaNum = channelNum;
hChannel = CSL_edma3ChannelOpen(&chObj,instNum,&chAttr,&status);
///////////////////////////////////////////////////////////////////////
CSL_edma3HwChannelSetupParam(hChannel, channelNum);
if (status != CSL_SOK) {
printf ("Edma channel setup param failed\n");
}
CSL_edma3HwChannelSetupQue(hChannel,CSL_EDMA3_QUE_0);
CSL_edma3MapDMAChannelToParamBlock(hMoudle,channelNum,0);
hParamPing = CSL_edma3GetParamHandle(hChannel,0,&status);
regionIntr.region = CSL_EDMA3_REGION_GLOBAL;
regionIntr.intr = 0x4;
// regionIntr.intr = 0x0;
//regionIntr.intrh = 0x0;
CSL_edma3HwControl(hMoudle,CSL_EDMA3_CMD_INTR_ENABLE,®ionIntr); //设置中断使能
//CSL_edma3HwControl(hMoudle,CSL_EDMA3_CMD_INTR_DISABLE,®ionIntr);
//******************************//
myParamSetup.option = CSL_EDMA3_OPT_MAKE( CSL_EDMA3_ITCCH_DIS, \
CSL_EDMA3_TCCH_DIS, \
CSL_EDMA3_ITCINT_DIS, \
CSL_EDMA3_TCINT_EN,\
0,
CSL_EDMA3_TCC_NORMAL,\
CSL_EDMA3_FIFOWIDTH_NONE, \
CSL_EDMA3_STATIC_EN, \
CSL_EDMA3_SYNC_A, \
CSL_EDMA3_ADDRMODE_INCR, \
CSL_EDMA3_ADDRMODE_INCR
);
myParamSetup.srcAddr = (Uint32)srcbuff1;
myParamSetup.aCntbCnt = CSL_EDMA3_CNT_MAKE(640,120);
myParamSetup.dstAddr = (Uint32)dstbuff1;
myParamSetup.srcDstBidx = CSL_EDMA3_BIDX_MAKE(640,640);
myParamSetup.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_MAKE(CSL_EDMA3_LINK_NULL,120);
myParamSetup.srcDstCidx = CSL_EDMA3_CIDX_MAKE(0,0);
myParamSetup.cCnt = 1;
//*****************************//
CSL_edma3ParamSetup(hParamPing,&myParamSetup);
CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL); //手动设置开始
regionIntr.region = CSL_EDMA3_REGION_GLOBAL;
regionIntr.intr = 0x0;
regionIntr.intrh = 0x0;
do
{
CSL_edma3GetHwStatus(hMoudle,CSL_EDMA3_QUERY_INTRPEND,®ionIntr);
}
while (!(regionIntr.intr & 0x1));
CSL_edma3HwControl(hMoudle,CSL_EDMA3_CMD_INTRPEND_CLEAR,®ionIntr);