TI中文支持网
TI专业的中文技术问题搜集分享网站

EDMA Data Sorting

各位专家好:

         我在使用EDMA3进行数据转置搬移(DDR3 -> DDR3)时,采用AB型同步,根据资料需要传输CCNT 次才能传输完成;

        但现在调试发现只需要一次传输就可以转置完成,这是为什么?  (66AK2L06);

         如果传输CCNT次,第二次传输就会报错“edma3_test: Event Miss Occured!!!”,这是为什么?

另外,这还有个QMSS与EDMA3的问题: 请您指导一下。

         与EDMA3相关的程序如下所示:

hEdma = edma3init(edmaInstance, &edmaResult);if (hEdma){printf("edma3init() Passed\n");}else{printf("edma3init() Failed, error code: %d\n", (int)edmaResult);}

//tcc = EDMA3_DRV_TCC_ANY;
//chId= EDMA3_DRV_DMA_CHANNEL_ANY;result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc, (EDMA3_RM_EventQueue)0, &callback1, NULL);//&callback1if (result == EDMA3_DRV_SOK){printf("DMA channel 0: %d\n", chId);}else{printf("DMA channel 0 request failed!\n");}/* Fill the PaRAM Set with transfer specific information */paramSet.srcAddr= (uint32_t)(Data);paramSet.destAddr= (uint32_t)(Data_Twi);/*** Be Careful !!!* Valid values for SRCBIDX/DSTBIDX are between -32768 and 32767* Valid values for SRCCIDX/DSTCIDX are between -32768 and 32767*/paramSet.srcBIdx= acnt;paramSet.destBIdx= acnt*ccnt;paramSet.srcCIdx= acnt*bcnt;paramSet.destCIdx= acnt;/*** Be Careful !!!* Valid values for ACNT/BCNT/CCNT are between 0 and 65535.* ACNT/BCNT/CCNT must be greater than or equal to 1.* Maximum number of bytes in an array (ACNT) is 65535 bytes* Maximum number of arrays in a frame (BCNT) is 65535* Maximum number of frames in a block (CCNT) is 65535*/paramSet.aCnt= acnt;  //4paramSet.bCnt= bcnt;  //128paramSet.cCnt= ccnt;  //2048paramSet.linkAddr= 0xFFFFU;paramSet.opt= 0x00900004u;result = EDMA3_DRV_setPaRAM(hEdma, chId, &paramSet);if (result == EDMA3_DRV_SOK){printf("EDMA3_DRV_setPaRAM() Passed\n");}else{printf("EDMA3_DRV_setPaRAM() Failed, error code: %d\n", (int)edmaResult);}for (i = 0; i < ccnt; i++){irqRaised1 = 0;result = EDMA3_DRV_enableTransfer (hEdma, chId,  EDMA3_DRV_TRIG_MODE_MANUAL);if (result != EDMA3_DRV_SOK){printf ("edma3_test: EDMA3_DRV_enableTransfer " \"Failed, error code: %d\r\n", (int)result);}

//printf ("%d \n", i);while (irqRaised1 == 0u){/* Wait for the Completion ISR. */printf ("waiting for interrupt...\n");}/* Check the status of the completed transfer */if (irqRaised1 < 0){/* Some error occured, break from the FOR loop. */printf ("\r\nedma3_test: Event Miss Occured!!!\r\n");/* Clear the error bits first */result = EDMA3_DRV_clearErrorBits (hEdma, chId);}}for(k=0; k<128; k++){for(jj=0; jj<2048; jj++){if((Data[jj*128+k].real == Data_Twi[k*2048+jj].real) || (Data[jj*128+k].imag == Data_Twi[k*2048+jj].imag)){;}else{printf("(%d , %d)", k,jj);}}}k = 0;

Shine:

您是说执行一次EDMA3_DRV_enableTransfer后就完成转置了? for (i = 0; i < ccnt; i++)只进了一次?

kang xiao:

回复 Shine:

是的,for (i = 0; i < ccnt; i++)只进行一次就转置完成了, 第二次的时候报错"edma3_test: Event Miss Occured!!!"。

赞(0)
未经允许不得转载:TI中文支持网 » EDMA Data Sorting
分享到: 更多 (0)