Hello,
We have a problem about initializing edma for TCP and VCP at the same time.
When we initialize edma for vcp as seen below VCP decoder works well.
/* EDMA global declarations */
CSL_Edma3ChannelObj Edma3ChannelObj_0, Edma3ChannelObj_1;
CSL_Edma3ChannelHandle Edma3ChannelHandle_0, Edma3ChannelHandle_1;
CSL_Edma3ParamHandle Edma3ParamHandle[4];
CSL_Edma3ParamSetup Edma3ParamSetup[4];
CSL_Edma3ChannelAttr Edma3ChannelAttr_0, Edma3ChannelAttr_1;
CSL_Edma3ChannelAttr channelParam_0, channelParam_1;
CSL_Edma3ChannelErr Edma3ChannelErr;
/* Global variable declarations */
Int32 tcpTcc = CSL_EDMA3_CHA_TCP2REVT; /* Transfer completion code used by tcp */
Int32 vcpTcc = CSL_EDMA3_CHA_VCP2REVT; /* Transfer completion code used by vcp */
CSL_Edma3ChannelHandle
hEdmaTcpRecv , /* EDMA channel TCP2 Receive */
hEdmaTcpXmit ; /* EDMA channel TCP2 Transmit */
CSL_Edma3ParamHandle
hParamTcpIc, /* EDMA channel used for IC Values */
hParamTcpSysPar, /* EDMA channel used for Systematics and */
/* Parities data */
hParamTcpInter, /* EDMA channel used for Interleaver data */
hParamTcpApriori, /* EDMA channel used for Apriori data */
hParamTcpDec, /* EDMA channel used for Hard Decisions */
hParamTcpOutPar, /* EDMA channel used for Output Parameters */
hParamDummy; /* EDMA dummy set of parameters */
CSL_Edma3ChannelObj ChObjTcpXmit, ChObjTcpRecv;
extern CSL_Edma3Handle Edma3Handle;
init_edma_vcp2()
{
CSL_Status Status;
/* Channel Configuration for VCPXEVT event */
Edma3ChannelAttr_0.regionNum = CSL_EDMA3_REGION_GLOBAL;
Edma3ChannelAttr_0.chaNum = CSL_EDMA3_CHA_VCP2XEVT;
Edma3ChannelHandle_0 = CSL_edma3ChannelOpen (&Edma3ChannelObj_0, CSL_EDMA3, &Edma3ChannelAttr_0, &Status);
if( (Status != CSL_SOK) || (Edma3ChannelHandle_0 == NULL) ) printf( "SEVERE_ERROR\n" );
if( CSL_SOK != CSL_edma3HwChannelSetupParam( Edma3ChannelHandle_0, 0/* PaRAM entry */ ) ) printf( "SEVERE_ERROR\n" );
if( CSL_SOK != CSL_edma3HwChannelSetupQue( Edma3ChannelHandle_0, CSL_EDMA3_QUE_0 ) ) printf( "SEVERE_ERROR\n" );
/* Channel Configuration for VCPREVT event */
Edma3ChannelAttr_1.regionNum = CSL_EDMA3_REGION_GLOBAL;
Edma3ChannelAttr_1.chaNum = CSL_EDMA3_CHA_VCP2REVT;
Edma3ChannelHandle_1 = CSL_edma3ChannelOpen( &Edma3ChannelObj_1, CSL_EDMA3, &Edma3ChannelAttr_1, &Status );
if( (Status != CSL_SOK) | (Edma3ChannelHandle_1 == NULL) ) printf( "SEVERE_ERROR\n" );
if( CSL_SOK != CSL_edma3HwChannelSetupParam( Edma3ChannelHandle_1, 2 /* PaRAM entry */ ) ) printf( "SEVERE_ERROR\n" );
if( CSL_SOK != CSL_edma3HwChannelSetupQue( Edma3ChannelHandle_1, CSL_EDMA3_QUE_0 ) ) printf( "SEVERE_ERROR\n" );
}
TCP works when we initialized EDMA like this:
init_edma_tcp2()
{
CSL_Status Status;
CSL_Edma3HwSetup hwSetup;
CSL_Edma3HwDmaChannelSetup dmahwSetup[CSL_EDMA3_NUM_DMACH] = CSL_EDMA3_DMACHANNELSETUP_DEFAULT;
CSL_Edma3HwQdmaChannelSetup qdmahwSetup[CSL_EDMA3_NUM_QDMACH] = CSL_EDMA3_QDMACHANNELSETUP_DEFAULT;
hwSetup.dmaChaSetup = &dmahwSetup[0];
hwSetup.qdmaChaSetup = &qdmahwSetup[0];
CSL_edma3HwSetup(Edma3Handle,&hwSetup);
/* Channel Configuration for TCPXEVT event */
channelParam_0.regionNum = CSL_EDMA3_REGION_GLOBAL;
channelParam_0.chaNum = CSL_EDMA3_CHA_TCP2XEVT;
hEdmaTcpXmit = CSL_edma3ChannelOpen (&ChObjTcpXmit, CSL_EDMA3, &channelParam_0, &Status);
if( (Status != CSL_SOK) || (hEdmaTcpXmit == NULL) ) printf( "SEVERE_ERROR\n" );
//if( CSL_SOK != CSL_edma3HwChannelSetupParam( hEdmaTcpXmit, 4/* PaRAM entry */ ) ) printf( "SEVERE_ERROR\n" );
if( CSL_SOK != CSL_edma3HwChannelSetupQue( hEdmaTcpXmit, CSL_EDMA3_QUE_0 ) ) printf( "SEVERE_ERROR\n" );
/* Channel Configuration for TCPREVT event */
channelParam_1.regionNum = CSL_EDMA3_REGION_GLOBAL;
channelParam_1.chaNum = CSL_EDMA3_CHA_TCP2REVT;
hEdmaTcpRecv = CSL_edma3ChannelOpen( &ChObjTcpRecv, CSL_EDMA3, &channelParam_1, &Status );
if( (Status != CSL_SOK) | (hEdmaTcpRecv == NULL) ) printf( "SEVERE_ERROR\n" );
//if( CSL_SOK != CSL_edma3HwChannelSetupParam( hEdmaTcpRecv, 6 /* PaRAM entry */ ) ) printf( "SEVERE_ERROR\n" );
if( CSL_SOK != CSL_edma3HwChannelSetupQue( hEdmaTcpRecv, CSL_EDMA3_QUE_0 ) ) printf( "SEVERE_ERROR\n" );
}
When we add both initializings init_edma_tcp2() and init_edma_vcp2() to our project VCP DECODER EDMA CHANNEL does not work.
Can you suggest any idea ? Why init_edma_tcp2() distrupt VCP EDMA ?