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 slow down the ethernet throughput on 6437 EVM board

Dear Sir,

I use the NDK "setupwin32_ndk-1_94_0_0_eval" to implement the ethernet function, to send data to PC via TCP/IP.

In order to improve system performance, I use EDMA3 to extract Y component from video data.

After using the EDMA3, the ethernet throughput becomes really slow.

I know NDK also use EDMA3 to send data to EMAC.

I think this bug (ethernet throughput stall) is caused by EDMA3 resources conflict.

Can you help me to fix the bug? Thank you!!

Best Regards,

 

Eric Fang

ericfang@altek.com.tw

 

 

  • The slowness is likely the result of saturating the DDR2 bandwidth to the point that the EMAC is being delayed some while the EDMA3 is working. The EMAC peripheral (Ethernet) on the DM6437 has its own DMA access to the device (i.e. it is a master peripheral and can initiate transfers on its own) so it would not be using EDMA3 channels anyway, my understanding is that the NDK does not utilize EDMA3 channels. Also, the EMAC priority on the switched central resource (SCR) bus is lower than the EDMA3 controller, so it makes sense that bulk EDMA3 transfers could slow down the EMAC significantly.

    To change this behavior you could modify the priorities such that the EDMA Transfer Controller you are using to do the Y sorting is lower priority than the EMAC, by default all three EDMA TCs are priority 0 and the EMAC is priority 4. This prioritization concept is discussed in section 3.6.1 of the datasheet.

  • Hi, Bernie,

    I add the following code in the end of edma3init() to fix the bug.

      int i;
      EDMA3_DRV_EvtQuePriority priorityMy;
      EDMA3_DRV_EvtQuePriority *evtQPriObj;


    for(i=0;i<8;i++) priorityMy.evtQPri[i]=7;
    evtQPriObj = &priorityMy;
    if( EDMA3_DRV_setEvtQPriority ( hEdma, evtQPriObj ) != EDMA3_DRV_SOK ) {
     for(;;)TSK_sleep(100);
    }

    Thanks a lot for your info!!

    Best Regards,

    Eric Fang