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.

Programming the C64x+ DSP in OMAP3530

As a newbie to make development using OMAP, I plan to assign the internal DSP with some work load. What is the procedure to make the development? Do I need special hardware to do that? Or the OMAP EVM I have will be sufficient to do that? How to handle the data communication between the ARM core and the DSP? Maybe I do not have sufficient understanding of the OMAP structure. Could anyone please show me a manual or any related document for OMAP (with the internal DSP) development?

Thank you very much,

Renaissance

  •   The communication between the ARM and DSP is handled by the components of the DVSDK.  You should start by first installing, building and running the DVSDK and it's demos.   This wiki is a good place to start:

    http://wiki.davincidsp.com/index.php/OMAP35x_DVEVM_Getting_Started_Guide

    Other than the EVM, you just need a Linux host PC or VMWare.

    Regards, Clay

     

  • Thank you very much, Clay.

     I have been very familiar with the C6455 devlopment using VSS. However, I am not so sure about the big picture of programming the DSP within OMAP.

    Before I start installing VMware and OMAP DVSDK, I am wondering if you can give me some more specific information about programming with the DSP. I think the demo you mentioned is that the video encode runs on the DSP and the encode demo application running on the ARM uses codec engine framework to communicate with DSP encoder algorithms. Is there source code with this demo? Or can you recommend any document on how to programming in such a frame work (some work load on DSP)

    Thank you,

    Renaissance

  • Here are a couple more links that should help:

     

    http://wiki.davincidsp.com/index.php/Quickly_Getting_Started_on_TI_Codec_Engine

    http://wiki.davincidsp.com/index.php/OMAP_and_DaVinci_Software_for_Dummies

     

    The source code to the DVSDK EVM demo is not included, but you could look at the source code to the TI Gstreamer plugin:

    http://wiki.davincidsp.com/index.php/GStreamer

    Regards, Clay

  • Recently, I just found that there is a C6Run Project .

    http://processors.wiki.ti.com/index.php/Introduction_to_C6Run#Supported_Devices.2FPlatforms

    C6Run is a DSP-Ease-Of-Use project to ease development of DSP code on two-core heterogeneous SoC processors from Texas Instruments, specifically targeting ARM+DSP devices. This project is intended to be used in a system running ARM Linux and containing a C6000 DSP core .

    Based on the description, I understand that this C6Run can be used as a converter to change a ARM code into a code with the help of DSP, but this converter does not provide the control about which part should be implemented by DSP and how the implementation should be made. Is this correct?

    Thanks,

    Renaissance

  • The C6run project currently includes two uses, one called c6runlib, and one called c6runapp. Documentation on these can be found here and here, respectively. The c6runlib tools allows the user to create an ARM-side static library from a collection of C source files.  Global functions in those C files are then analyzed to automatically generate remote procedure call interfaces and all of that is bundled together into the library.  When the library is linked to the main ARM application, any function calls into the library are then executed on the DSP.  So the selection of what code runs on the DSP and what code runs on the ARM is a build-time decision. 

    c6runapp is simpler.  It attempts to recompile the source of your entire app to run on the DSP.  If you have an simple ARM application that relies on only standard C library calls, this should be able to be recompiled to run on the DSP as-is.  Standard C I/O calls (like printf, scanf, fopen, fread, etc) will be executed on the ARM and the results will be fed back to the DSP.  This gives the app running on the DSP access to the ARM Linux console and file system.

    Regards, Daniel

  • Thank you Daniel.

    As you said, if I am only interesting in running one function in my project, such as IIR filter inside the DSP, I just need to pick up the code and put it into a separate c file and use C6run to create a static lib. Then after I compile this lib, I can rebuild my whole project by adding this lib into the project. Is this correct?

    What if my ARM project is in C++ code? Does C6run support this conversion? I used g++ to build the project right now.

    Best regards,

    Renaissance

  • Currently, only C files can be analyzed to generate the static library.  These C files can interact with any C++ code on the ARM-side as long as you handle name-mangling that the C++ compiler would perform.  This means using the #ifdef _CPLUSPLUS extern "C" { #endif construct around the declaration of the function. With that in place, the C++ code of your ARM app can link just fine against the static lib generated from the C file.

    Regards, Daniel

  • I've added a FAQ entry in the official C6Run documentation to address this question.

    http://processors.wiki.ti.com/index.php/C6Run_FAQ#Can_I_use_C.2B.2B_with_C6Run.3F

    Regards, Daniel