Hi ,
Can anyone help me with this simple example...
I want use EDMA to transfer data with QDMA channel. I referred CSL but I don't know how to complete necessary part. You can see the code below,,
Thanks very much.
Regards.
Alex
int memoryTrans_QDMA(uint32_t *dstAddr)
{
CSL_Edma3Handle hModule;
CSL_Edma3Obj edmaObj;
CSL_Status status;
CSL_Edma3ChannelHandle hChannel;
CSL_Edma3ChannelObj chObj;
CSL_Edma3ChannelAttr chAttr;
CSL_Edma3ParamHandle hParamBasic;
CSL_Edma3ParamSetup myParamSetup;
// Module Initialization
CSL_edma3Init(NULL);
// Module Level Open
hModule = CSL_edma3Open(&edmaObj,0,NULL,&status);
// Enables QDMA Channel 1 for Global Region.
CSL_edma3QDMAChannelEnable(hModule, CSL_EDMA3_REGION_GLOBAL, 1);
//channel configuration!!!
// Maps QDMA Channel 1 to Param ID Block 5.
CSL_edma3MapQDMAChannelToParamBlock(hModule, 1, 5);
// Configure QDMA Channel 1 Trigger Word as 7
CSL_edma3SetQDMATriggerWord(hModule, 1, 7);
//Is this right to open QDMA?
// Open QDMA Channel 1.
chAttr.regionNum = CSL_EDMA3_REGION_GLOBAL;
chAttr.chaNum = 1;
hChannel = CSL_edma3ChannelOpen(&chObj, 0, &chAttr, &status);
if ((hChannel == NULL) || (status != CSL_SOK))
{
printf ("Error: Unable to open EDMA Channel:%d\n");
return -1;
}
// Map the channel to PARAM Entry 5
CSL_edma3HwChannelSetupParam(hChannel, 5);
//....
//PaRAM Configuration!!!
// Obtain a handle to PARAM Entry 5
hParamBasic = CSL_edma3GetParamHandle(hChannel,5,&status);
//...
// Setup the first param Entry (Ping buffer)
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_AB, \
CSL_EDMA3_ADDRMODE_INCR, \
CSL_EDMA3_ADDRMODE_INCR);
myParamSetup.srcAddr = (uint32_t)(buffer) | 10000000;
myParamSetup.aCntbCnt = CSL_EDMA3_CNT_MAKE(256,4);
myParamSetup.dstAddr = (uint32_t)dstAddr;
myParamSetup.srcDstBidx = CSL_EDMA3_BIDX_MAKE(256,256);
myParamSetup.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_MAKE(CSL_EDMA3_LINK_NULL,0);
myParamSetup.srcDstCidx = CSL_EDMA3_CIDX_MAKE(0,0);
// myParamSetup.cCnt = 1;
// Configure the PARAM Entry with the setup information.
CSL_edma3ParamSetup(hParamBasic,&myParamSetup);
// Write trigger word
CSL_edma3ParamWriteWord(hParamBasic, 7, myParamSetup.cCnt);
//How to wait until data transfer finish?
// wait until transfer complete, clear interrupt
while(!(hModule->regs->TPCC_IPR & CSL_TPCC_TPCC_IPR_IPR0_MASK));
hModule->regs->TPCC_ICR= (1 << CSL_TPCC_TPCC_ICR_ICR0_SHIFT);
}