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.

TDA4VH-Q1: UDMA linking

Part Number: TDA4VH-Q1
Other Parts Discussed in Thread: TDA4VH

Tool/software:

Hi,

I’m using UDMA on the TDA4VH platform (C7x_1 core) with DRU channels for data transfers. I initially tried UDMA chaining for optimization, but it's not supported with DRU. Now I want to achieve a similar effect using UDMA linking — triggering one channel that internally handles multiple transfers via PaRAM sets or TR descriptors, requiring only a single wait() call. I couldn’t find examples for this under the PDK path (SDK_RTOS/ti-processor-sdk-rtos-j784s4-evm-09_02_00_05/pdk_j784s4_09_02_00_30/packages/ti/drv/).

I want to know whether,

1. Is UDMA linking possible with DRU channels?
2. Are there any example codes showing this?


If there are any example codes, please provide me with that, which will be very helpful.



  • Hi Gautham,

    Do you mean submitting multiple requests and waiting for all of them to finish? Is this you mean DMA linking? Then the only difference here is to generate one interrupt for the 'n' transfers, isn't it? 

    Regards,

    Brijesh

  • Hi Brijesh,

    What I am expecting is like submitting one request and by setting the parameters need to finish all the data transfers in multiple dma channels and after completing all the data transfers one wait() function is called. Already dma channels are available, but the transfers are happening individually like one dma channel transfer happens first after that next dma channel transfer happens and wait() functions are also called multiple times. What I need is to avoid this and by submitting one request all the dma channel data's need to be transffered and after finishing one wait() function will be called. For this if any example codes are present, please provide that.

    Note: I am using DRU channels. This kind of UDMA linking is supported right?

  • Hi,

    But why do you want to wait for multiple DMA channels to finish? I really doubt this is possible.

    What is possible, you could submit multiple requests to the same DMA channel and wait for the last one to finish. This requires some changes in the event registration and TR preparation.

    But my question is, even if you process completion for all requests for this channel, there isn't much overhead.. So could you help me understand why you want just one completion?

    Regards,

    Brijesh

  • Hi Brijesh,

    My expectation is ,  submitting one request (with some parameters setting ) should complete all the data transfers (say 5 transfers ) using single dma channel. So thereby need to wait after each transfer  will be avoided and thus the overhead reduced. So goal is to trigger the transfer through single udma channel for multiple data transfer.  I don't find any example code for the above in SDK. Please let me know if it s already available or any reference for this in the documentation.

    Note: I am using DRU channels. 

  • Hi Gautham,

    No, there is no example available in the SDK for such a usecase. But again overhead is just 5 ISRs, which just posts the semaphore. This should not take much CPU time. 

    Regards,

    Brijesh

  • Hi Brijesh,

    I am not using event registration directly; instead, I rely on a wait() function that retrieves the dequeued raw TR by accessing the ring handle. Given this approach, I would like to understand whether it is still possible to implement UDMA channel linking effectively.

  • Hi Gautham,

    But that's like busy waiting, will spend more CPU time in wait, in that case, i would recommend using event registration. 

    Regards,

    Brijesh