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.

C6678 EDMA separate initialization

Hi,

I have an application that would benefit from the speed of DMA transfers. Ideally, I would like have a functions that initialize, send, and de-initialize.

I have attempted to separate the working example in the MCSDK into such functions. Unfortunately when the program exits the initialize function, the data the handlers point to become lost / out of scope.

I continued to try copying the information the handles point to into global memory, to guarantee preservation between function levels. Using this technique the transfer seems to occur, but I am no longer being notified of the transfer completing. 

The code has not changed from the working example other than the division into functions and the handles copied into global memory.

Any ideas on what would cause the interrupt to not occur?

  • Hi,

    Thanks for your post.

    I presume that, you are using CSL initialization procedure for EDMA in your example.

    I would suggest first you to check the PaRAM settings before and after you start off the transfer and also check whether the data is wrritten to the corresponding memory location.

    Have you checked the status of interrupt pending register and see whether the corresponding interrupt is pending or not?

    Likewise, there are lot many status registers available to you to evaluate the status of interrupts, data transfer completion notification etc. I think, if you could refer the EDMA user guide on the C6678 product folder as below, you could explore more on EDMA interrupt status registers, transfer completion interrupts etc:

    http://www.ti.com/lit/ug/sprugs5a/sprugs5a.pdf

    Usually, EDMA CC would detect a interrupt transfer completion code which is equal to the TCC bit in OPT for the PaRAM entry associated with the DMA channels then the corresponding bit would be set in the interrupt pending register (IPR, IPRH) associated with the channel. For more info. please refer section 4.2.7.4 from the EDMA user guide above.

    Kindly check Appendix A.1 & A.2 for the debug programming tips & check list and check Appendix B.1 for the typical steps & procedure involved in setting up a transfer.

    Thanks & regards,

    Sivaraj K

    -------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question

    -------------------------------------------------------------------------------------------------------

  • Dan,

    Please give us a few details, and we should be able to help you work through this. Which version of MCSDK are you using, EDMA LLD, and which working example have you started from?

    What types of DMA transfers are you wanting to do in your application? Commonly, peripheral data movement will not be de-initialized. QDMA for "simple" memory-to-memory transfers can be left "initialized", which can save some cycles before and after each transfer.

    All of the objects that are used during the initialization and operation should be global.

    Regards,
    RandyP