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.

Initializing EDMA3 for TCP3D

Hello,

I’m using TCP3d over C6670 and having problem in initializing EDMA3 to transfer data (Config Regs) into TCP3 register.
The code is given as below.

Could someone help figuring out why EMDA3 does not work?

Best Regards,

Bob

==================================
CSL_Edma3Context _edma3Context;
CSL_Edma3Obj _edmaObj;
CSL_Edma3Handle _hEdma3Inst;
CSL_Edma3ChannelObj _chObjTcp3P0In;
CSL_Edma3ParamHandle _hParamTcp3Ic;
CSL_Edma3ParamHandle _hParamTcp3InData;
uint32 _inDataLinkOffset;
CSL_Status status;
CSL_Edma3ChannelAttr chnlParam;
CSL_edma3Init(&_edma3Context);
_hEdma3Inst = CSL_edma3Open(&_edmaObj, 2, NULL, &status);
chnlParam.regionNum = CSL_EDMA3_REGION_GLOBAL;
chnlParam.chaNum = 64;
_hEdma3Tcp3P0In = CSL_edma3ChannelOpen(&_chObjTcp3P0In, 2, &chnlParam, &status);
CSL_edma3HwChannelSetupQue(_hEdma3Tcp3P0Out, CSL_EDMA3_QUE_0);
CSL_edma3HwChannelSetupParam (_hEdma3Tcp3P0In, 0);
_hParamTcp3Ic = CSL_edma3GetParamHandle(_hEdma3Tcp3P0In, 0, &status);
_hParamTcp3InData = CSL_edma3GetParamHandle(_hEdma3Tcp3P0In, 1, &status);
_inDataLinkOffset = (uint32)_hParamTcp3InData & 0x0000FFFF;
edma3Config.option = CSL_EDMA3_OPT_MAKE(
CSL_EDMA3_ITCCH_DIS, // itcchEn
CSL_EDMA3_TCCH_EN, // tcchEn
CSL_EDMA3_ITCINT_DIS, // itcintEn
CSL_EDMA3_TCINT_DIS, // tcintEn
0, // tcc
CSL_EDMA3_TCC_NORMAL, // tccMode
CSL_EDMA3_FIFOWIDTH_NONE, // fwid
CSL_EDMA3_STATIC_DIS, // stat
CSL_EDMA3_SYNC_A, // syncDim
CSL_EDMA3_ADDRMODE_INCR, // dam
CSL_EDMA3_ADDRMODE_INCR); // sam
edma3Config.srcAddr = (uint32)pTcp3IC;
edma3Config.aCntbCnt = CSL_EDMA3_CNT_MAKE(60, 1);
edma3Config.dstAddr = (uint32)&(pTcp3DmaReg->TCP3D_IC_CFG0_P0);
edma3Config.srcDstBidx = CSL_EDMA3_BIDX_MAKE(0, 0);
edma3Config.srcDstCidx = CSL_EDMA3_CIDX_MAKE(0, 0);
edma3Config.cCnt = 1;
edma3Config.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_MAKE(_inDataLinkOffset, 0); /
status = CSL_edma3ParamSetup(_hParamTcp3Ic, &edma3Config);
edma3Config.option = CSL_EDMA3_OPT_MAKE(
CSL_EDMA3_ITCCH_DIS, // itcchEn
CSL_EDMA3_TCCH_DIS, // tcchEn
CSL_EDMA3_ITCINT_DIS, // itcintEn
CSL_EDMA3_TCINT_DIS, // tcintEn
0, // tcc
CSL_EDMA3_TCC_NORMAL, // tccMode
CSL_EDMA3_FIFOWIDTH_NONE, // fwid
CSL_EDMA3_STATIC_DIS, // stat
CSL_EDMA3_SYNC_AB, // syncDim
CSL_EDMA3_ADDRMODE_INCR, // dam
CSL_EDMA3_ADDRMODE_INCR); // sam
edma3Config.srcAddr = (uint32)pInData;
edma3Config.aCntbCnt = CSL_EDMA3_CNT_MAKE(infoBitsK>>1, 2);
edma3Config.dstAddr = (uint32)&(pTcp3DmaReg->TCP3D_IC_CFG0_P0) + CSL_TCP3D_DMA_TCP3D_SYS_P0_OFFSET;
edma3Config.srcDstBidx = CSL_EDMA3_BIDX_MAKE(infoBitsK>>1, 0x1000);
edma3Config.srcDstCidx = CSL_EDMA3_CIDX_MAKE(infoBitsK+4, 0x2000);
edma3Config.cCnt = 3;
edma3Config.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_MAKE(_dummyLinkOffset, 2);
status = CSL_edma3ParamSetup(_hParamTcp3InData, &edma3Config);
=================================
  • Hi Bob,

    I have noticed that your configuration uses EDMA3's TPCC2 and Channel #64, that means it's a QDMA channel. So if it's your intention, you should setup the trigger word for the channel using CSL_edma3HwChannelSetupTriggerWord(_hEdma3Tcp3P0In,7); where '7'  means a write operation to CCNT field will introduce a QDMA event.

    And if you actually want to use other EDMA channel, just setup the Channel Number to 0~63.

    Allen