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.

Codec Server interface without DSPLINK

I am working on a system using the DM6446 and need to run a codec on the DSP but the ARM is not running Linux. Can a Codec Server packaging the Codec Engine, a standard codec (JPEG)  and some other proprietary algorithms be created and run on the DSP without DSPLINK running on the ARM? If so, how do I communicate with the Codec Server? Could another DSP/BIOS task be included that could pass data between the ARM and the Codec Engine?

  • Are you planning to port DSP Link to your ARM-side OS?  Or to have another Link-like implementation?  Are you doing data I/O on the ARM or DSP?

    It's definitely possible to use Codec Engine in a DSP-only environment (with what we call 'local' codecs).  And I'd probably recommend that approach if you're using an ARM-side OS that's not supported by Codec Engine's ARM-side (as opposed to trying to port Link, then Codec Engine to your OS... both of which are also possible, but not for the faint of heart).

    Many of the example apps provided with Codec Engine have a config script (local.cfg) that shows how to configure a single-processor executable with 'local' codecs.

    If you're doing I/O on the ARM, you'll need a mechanism to transfer that data from the ARM to the DSP (which can then use Codec Engine to communicate with your codecs) and back.  Porting Link is one option; another would be perhaps to use shared memory (perhaps via CMEM?) and GPP<->DSP mailboxes/interrupts as a synchronization between cores... just be careful about cache coherency:

    http://tiexpressdsp.com/index.php/Cache_Management

    Chris

  • I was not planning to port DSP Link to our ARM. And, yes I am doing I/O on the ARM but not from the DSP.

    My currently DSP-side application runs 2 tasks under DSP BIOS 5.33.03. I am communicating with the tasks using shared memory, mailboxes and interrupts. So, using this same mechanism to pass data to the DSP for processing by  the codec should be fairly simple. Now I need to add the Codec Engine and a JPEG codec.

    I have downloaded Codec Engine 2.21 and XDC Tools 3.10.03. Based on your reply, I configured the examples to build local apps for the DSP only and to simplify things I am only trying to build the image_copy example.   

    Initially I tried building for the evm6446 platform which is very similar to our custom board. The codec examples built successfully but the image_copy app did not. The build was unable to find ti/bios/bios.tci. I was able to get it to work by adding the environment variable REQUIRE_BIOS which includes the BIOS_INSTALL_DIR in the XDC_PATH.

    Next I think I need to change the platform to match my board. It runs the DSP at 594MHz whereas the evm6446 runs at 567MHz. Also I must reserve memory for the ARM-side OS & application. Is it best to do this using the generic platform or by creating a custom platform?

  • I tried making the platform modifications using the generic platform. I have added the following lines to config.bld to change the clock rate and limit the build to 128MB of memory starting at 0x88000000.

    Build.platformTable["ti.platforms.generic:BackendCP"] = {
      deviceName: "TMS320CDM6446",
      catalogName: "ti.catalog.c6000",
      clockRate: 594,
      externalMemoryMap: [
        ["EXTMEM", {
          name: "EXTMEM",
          base: 0x88000000,
          len: 0x00800000,
          space: "code/data"}
        ],
      ]
    };

    Then I added the line below to the list of platforms for the DSP in user.bld.

    { description: "BackendCP board, DSP only", platform: "generic:BackendCP", outDir: "bin/BackendCP" },

    But now the build fails with the error below.

    js: "C:/ti-tools/xdctools_3_10_03/include/utils.tci", line 543: Error: Can't find import file: 'ti/sdo/ce/examples/buildutils/app_generic:BackendCP.tci'

    Is the generic platform supposed to create the TCI file based on the information provided to it? Or, should it even be looking for the TCI file? The filename isn't even valid as it contains a colon!