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 QDMA missed events

I have an application where I am tranferring blocks of data from internal to shared memory using QDMA with a callback to signal completion.

I have the strange situation where there is a QDMA missed event before the data successfully transfers. This happens every time I transfer a block of data.

I have looked at some of the threads posted on this subject but nothing seems to give me a clue on this issue.

I have even used "early completion" but I don't think this is a throughput problem.

Can someone point me in the right direction on this?

Thanks in advance

Iain

  • Iain

    Is this a standalone EDMA application with just this QDMA initiated block transfer?

    Is it possible for you to set up the EDMA error interrupt, to possibly catch when the QEMR bits are getting set?

    One common error I have seen some time, is when user enables QEER prior to trigger word, and possibly configure the param and then additionally write to the trigger word param again to start the transfer (which would imply 2 writes to trigger words), if you are using EDMA3 LLD then I don't think this should be the issue. 

    It would be good to get additional details on the BIOS PSP version, EDMA3LLD version etc that you are using, incase this needs to be routed to EDMA3LLD experts. 

    Regards

    Mukul 

  • Iain,

    Event miss occurs when two QDMA events are detected without the first event getting cleared/serviced or a NULL transfer was triggered.

    Make sure you are writing the trigger word at the end, in the sequence of writing the corresponding PaRAM values and make sure to write them wordwise.

    Regards,
    Prasad

  • Mukul,

    Mukul said:

    Is this a standalone EDMA application with just this QDMA initiated block transfer?

    This is an application with QDMA included, not just an EDMA example.

    Mukul said:

    Is it possible for you to set up the EDMA error interrupt, to possibly catch when the QEMR bits are getting set?

    I have set up a callback to catch global EDMA3 errors but I am not sure how to bind that to the application.

    I checked for double trigger writes but the only time I write the trigger word is in the EDMA3_DRV_setPaRAMEntry to trigger the transfer.

    Sorry I forgot to append the driver versions I am using.

    I am using PSP 1.30.00.05, EDMA3 LLD 1.10.00.01 and DSP BIOS 4.41.11.38.

    I have put a breakpoint at the EDMA3_RM_E_CC_QDMA_EVT_MISS status in the callback and QEMR is zero. I am initialising 2 QDMA channels so QEER is set to 3.

    Regards Iain

  • Prasad,

    I don't understand why a missed event is triggered straight away before any data is transferred correctly.

    I have checked for double trigger word writes and the only time I send it is in the EDMA3_DRV_setPaRAMEntry function.

    Regards Iain

  • Iain,

    Are you observing the same even with the EDMA example provided with the package(qdma_test.c)?
    Can you check what are the PaRAM value before writing the QDMA trigger word.

    Same callback function will be called (which is registered while requesting channel) for transfer completion or error interrupt with a different parameter for EDMA3_RM_TccStatus, but before calling the callback function the driver will clear the corresponding error bit.

    Regards,
    Prasad

  • Prasad,

    Prasad said:
    Are you observing the same even with the EDMA example provided with the package(qdma_test.c)?

    I don't have qdma_test.c.

    Prasad said:
    Can you check what are the PaRAM value before writing the QDMA trigger word.

    The data in QCHMAP0 is 0x41c before writing the trigger word and 0x40c after.

    Regards Iain

  • Iain,

    The qdma_test.c file should be present in the following location
    edma3_lld_01_10_00_01\examples\edma3_driver\src

    Please check with the example projects given at "edma3_lld_01_10_00_01\examples\edma3_driver" if you are seeing the same behaviour?

    Can you change the QDMA channels to DMA channels and check?

    Regards,
    Prasad

  • Prasad,

    I got the original information from the EDMA3_Driver document provided with the EDMA3_LLD download which provides a use case for QDMA memory to memory transfers.

    I downloaded a pdf document today which provides the source text for qdma_test.c. I went through it in detail and rearranged my code to follow it exactly. My QDMA transfer now works correctly.

    The difference between the first document and this is the line EDMA3_DRV_setOptField( hEdma, qCh1Id,EDMA3_DRV_OPT_FIELD_STATIC, 1u). Without this selection, missed events happen all the time.

    This seems to be a recurring theme with TI documentation, ie. there is always something important missing which takes a lot of effort to correct!

    Thanks for your time.

    Regards Iain