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.

EDMA3 can't be triggered

A part of my program: #include #include #include #include #include #include #include #include #include #include #include "3rnds.c" #define BUF_SIZE_W 6 #define NUM_CORES 2 #pragma DATA_SECTION(breceive,".breceive_section"); #pragma DATA_SECTION(InterCoreComm,".far:ICCRam"); int tccCh; static float breceive[BUF_SIZE_W*BUF_SIZE_W]; volatile Uint32 InterCoreComm[NUM_CORES]; float r=2.0; static float p[BUF_SIZE_W*BUF_SIZE_W]={0.0}; static float pm[BUF_SIZE_W*3]={0.0}; static float f[BUF_SIZE_W]; static float a[BUF_SIZE_W*3]; Uint32 offset1; Uint32 offset2; Uint32 offset3; void main() { /** Edma handle **/ CSL_Edma3Handle hModule; CSL_Edma3HwSetup hwSetup; CSL_Edma3Obj edmaObj; CSL_Edma3ParamHandle hParamBasic0; CSL_Edma3ChannelObj chObj; CSL_Edma3CmdDrae regionAccess; CSL_Edma3ChannelHandle hChannel; CSL_Edma3ParamSetup myParamSetup; CSL_Edma3Context context; CSL_Edma3ChannelAttr chAttr; CSL_Status status; CSL_Edma3HwDmaChannelSetup dmahwSetup[CSL_EDMA3_NUM_DMACH] = CSL_EDMA3_DMACHANNELSETUP_DEFAULT; CSL_Edma3HwQdmaChannelSetup qdmahwSetup[CSL_EDMA3_NUM_QDMACH] = CSL_EDMA3_QDMACHANNELSETUP_DEFAULT; Uint32 uSum; Uint32 uMarSave; Uint32 uMarBlock; int i,j,k,ii,w; int g,m,M,v; M=6;// g=2;// m=M/g; if (M%g!=0) m++; offset1=0x11000000; offset2=0x10000000; offset3=0x01000000; for(i=0;i> 24; // determine MAR block for the sync memory location uMarSave = ((CSL_CacheRegsOvly)CSL_CACHE_0_REGS)->MAR[uMarBlock]; // save the current value of this MAR ((CSL_CacheRegsOvly)CSL_CACHE_0_REGS)->MAR[uMarBlock] = 0; // clear this MAR to make sure caching is off while (((CSL_CacheRegsOvly)CSL_CACHE_0_REGS)->MAR[uMarBlock] == 1); // wait for the bit to be cleared, copied from other code for ( i = 0; i MAR[uMarBlock] = uMarSave; // restore this MAR to its original setting // at this point all cores are running at this same location #endif /** Setup the DRAE masks DRAE enable(Bits 0-15) for the shadow region 1. **/ regionAccess.region = CSL_EDMA3_REGION_0 ; regionAccess.drae = 0xFFFF ; regionAccess.draeh = 0x0000 ; status = CSL_edma3HwControl(hModule,CSL_EDMA3_CMD_DMAREGION_ENABLE,\ &regionAccess); if (status != CSL_SOK) { printf("Edma region enable command failed\n"); return; } /** Channel 1 open **/ chAttr.regionNum = CSL_EDMA3_REGION_0; chAttr.chaNum = CSL_EDMA3_CHA_TEVTLO0; hChannel = CSL_edma3ChannelOpen(&chObj, CSL_EDMA3, &chAttr, &status); if ( (hChannel == NULL) || (status != CSL_SOK)) { printf ("Edma channel open failed\n"); return; } /** associate channel to parameter set **/ CSL_edma3HwChannelSetupParam(hChannel, CSL_EDMA3_CHA_TEVTLO0); if (status != CSL_SOK) { printf ("Edma channel setup param failed\n"); return; } /** Change Channel Default queue setup to 0 **/ status = CSL_edma3HwChannelSetupQue(hChannel,CSL_EDMA3_QUE_0); if (status != CSL_SOK) { printf ("Edma channel setup que failed\n"); return; } /** Get the parameter handle for patrameter set 0 **/ hParamBasic0 = CSL_edma3GetParamHandle(hChannel,0,NULL); if (hParamBasic0 == NULL) { printf("Edma get param handle 0 failed\n"); return; } //matrix_partition() for(i=0; i
  • Kaiqi Yang,

    Your post is very hard to read without the normal formatting. But I recognize some of my handwriting in your post.

    What is your question?

    Have you started with the original example code to confirm that it will work? That is the best way to get your code working: start from the working example and make changes slowly to reach your final goal. That way you can know which change introduces a problem. When you change everything at once, it is more difficult to debug.

    Regards,
    RandyP