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 LLD question

Other Parts Discussed in Thread: OMAPL138

I'm trying to use QDMA transfers using the EDMA3 LLD library.  I my code currently works fine for the first transfer, but subsequent transfers don't work.  Here's what I'm doing:

Setup:

EDMA3_DRV_create

EDMA3_DRV_open

EDMA3_DRV_requestChannel  (QDMA channel 0 is specified, along with a callback for the interrupt)

 

First transfer:

EDMA3_DRV_setSrcParams

EDMA3_DRV_setDestParams

EDMA3_DRV_setOptField (mhEdma, ch, EDMA3_DRV_OPT_FIELD_TCINTEN, EDMA3_DRV_TCINTEN_EN);

EDMA3_DRV_setTransferParams (mhEdma, ch, acnt, bcnt, ccnt, 0, EDMA3_DRV_SYNC_AB);

 

Once the set TransferParams call is made, the transfer actually happens and an interrupt is generated.  My int handler posts a semaphore and my task continues.

I then make the exact same sequence of calls for a second transfer.  This time, when the TransferParams call is made, the first word (acnt) is transferred, but the transfer stops.  The interrupt handler is never called and the rest of the transfer doesn't occur.

Any idea what I'm missing?


Dave

 

  • I'm getting the feeling that no one reads these posts... It's been three weeks since I posted this and there's been no response... My deadline is looming and I'm getting nowhere...

     

  • Normal 0 false false false MicrosoftInternetExplorer4

    David,

     

    There should be no problem in the subsequent transfers, if the first transfer is going through properly and you are programming the second transfer the same way you do the first one.

     

    As a test you can run the EDMA sample application for OMAPl138 on your board and see. There are examples for all types of transfers including the one with a QDMA channel. You have to choose the trigger word and make sure you write the Trigger word in the PaRAM set at last after writing all the other parts of the PaRAM.

     

    Please try the sample application and tell me if you see any issues even in that. The results of this test will provide us more inputs to debug this issue further.

     

    Regards,

    Sundaram

     

  • I started from the sample application.  However, the sample application only does a single transfer and I will need to do multiple. I am using the exact calls shown above, so I'm not explicitly writing to any of the registers.  I presume that the LLD is doing as you suggest, but I didn't walk through to verify it.

    Dave

  • Normal 0 false false false MicrosoftInternetExplorer4

    David,

     

    Good that you started with the sample application. You could have modified it to do multiple transfers and seen how it works. As you say you should use only the EDMA3LLD API calls and not write to any registers directly.

     

    Please do not presume the LLD is doing the required things. The LLD provides you the required API calls and it is up to the application to call them in proper order with proper inputs.

     

    Please go through the EDMA3LLD user’s guide to understand the way LLD works, and a simple walk through of the example applications’ source code with the help of the comments is enough to know what all steps need to be followed for a transfer to be successfully done.

     

    All help is provided to you in the user’s guide and the help files provided.

    I have modified the sample application to do multiple transfers. I have attached the code here. Please replace this file in the appropriate location where the LLD is installed and you will be able to see multiple transfers.

     

    If you face any issues with this, please feel free to ask for more help.

     

    Regards,

    Sundaram

    2742.qdma_test.pdf

  • Thank you for your help.  Since I wasn't getting any response on this forum, I continued to search and found an example in the LLD which looks very similar to the code you just sent.  My original code was based on a powerpoint presentation from a TI training workshop, provided by a TI person in answer to a previous post on this forum.  That code did not set the QDMA trigger word and I think that ended up being the heart of my problem.  Knowing what I know now, I can see that the code I presented didn't include that.

    Thanks for your help.