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.

EDMA transfer using CSL under VisionSDK 2.10 on TDA2xx

I'm using Windows 7 x64, VisionSDK 2.10 and a TDA2xx board.

So far, I have successfully tested EDMA transfers using EDMA Low Level Driver which is dependent of SYS/BIOS (it uses a semaphore instance to be exact). I was using CCS and connected to the board via XDS debug probe.

However, I need to test the transfers in an existing VisionSDK usecase without SYS/BIOS dependence. I have found that there is a way using Chip Support Library. I refer to this document: http://www.ti.com/lit/ug/spru401j/spru401j.pdf . However I could not find "csl.h" and "csl_edma.h" anywhere that contain the functional API described in the above document (chapter 7-4). This wiki says where I can download the CSL for C6000: http://processors.wiki.ti.com/index.php/Chip_support_library. After downloading the package I still cannot find the API anywhere. I am overally confused about the CSL setup process. My code runs on the DSP C66x core.

I just need a guiding hand to help me setup a simple EDMA transfer correctly using the CSL for a usecase in VisionSDK.

I will appreciate any help.

Thank you.

  • Hi Nik,

    I have forwarded your question to a VisionSDK expert.

    Regards,
    Yordan
  • Hi Nik,

    Chip Support Library provides a no-OS driver abstraction layer. Similar to CSL, Vision SDK 2.10 has starterware EDMA DAL which is independent of SYS/BIOS.

    You can set up a simple EDMA transfer using starterware EDMA DAL for Vision SDK use case.

    You should refer to ti_components\drivers\starterware_01_06_00_16\include\edma.h.

    For example you can refer to edma_test_app present in ti_components\drivers\starterware_01_06_00_16\examples\edma_test.

    Hope this helps.

    Regards,

    Rishabh

  • Hi Rishabh,

    I tried your suggestion and let me explain what I did. So, I have an existing alg_plugin and have been trying to test the EDMA usage by injecting EDMA test code into the creation function of that alg_plugin. In order to do that I modified the main() function in "ti_components\drivers\starterware_01_06_00_16\examples\edma_test\main.c" to have some other name, EDMA_Test() for example, so I could call it in the alg_plugin creation function.

    I added the relevant edma source files to SRC_FILES.MK of the alg_plugin as well as include directories that contain the header files that the EDMA test depends on. The application was built successfully. However, upon loading the usecase on the board, I have a line printing a message before the EDMA_Test() call and then the application stalls giving the message from host that it is waiting for data on port 5500. It did not print any of the messages that I put into the EDMA_Test().

    I would be very grateful for the help as I have been struggling with this for some time.

    Is there some less dependent test, like this one: http://processors.wiki.ti.com/index.php/Programming_EDMA_without_EDMA3LLD_package ?

    I also tried that one but without success, maybe I did not set the edma and paramset base addresses correctly. I have tried the 3 addresses I could find defined throughout VSDK and none of them worked. I did not find any addresses in any official C66x datasheet. Could you tell me the relevant addresses or let me know where to find them.

    Eventually, of course, I would like to utilize the edma_test since it is easier to incorporate into applications.

  • Hi Nik,

    Multiple issues are possible here.

    Vision SDK uses EDMA LLD and hence there might be some conflicts with starterware EDMA driver which are causing the crash. It is considerable amount of work in case you want starterware EDMA to coexist with EDMA LLD. You need to check what all resources (channels, param sets, etc.) are being used by LLD and find unused ones to be used by EDMA test. You should also remove EDMA initialization from EDMA test as IPU1_0 would have already initialized EDMA using LLD.

    "message from host that it is waiting for data on port 5500" could be the last message printed before the hang as EDMA test app initializes UART using different settings as compared to SDK so it is also possible that you are not any messages later on from the test API.

    Regrading C66x address you need to use L3 address for EDMA. These addresses will be given in the TRM. What addresses are you not able to find?

    Regards,

    Rishabh

  • Hi Rishabh,

    In that case I could try using the EDMA LLD API for my DMA transfers, I am just worried about the performance of LLD compared to the starterware. I would appreciate your comment on this issue.

    As for the C66x EDMA registers addresses, I found the correct ones and was able to test the DMA without any API. However that was out of pure curiosity as I do not intend to program the transfers that way.

    Thank you for your help and suggestions.
  • Hi Nik,
    There might be some SW overhead in case of EDMA LLD. Performance of transfers will remain the same as that is HW performance.

    Regards,
    Rishabh