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.

Squeezing EDMA3 Low Level Driver examples to fit into IRAM only

Hello,
I'm considering using the "EDMA3 Low Level Driver" for implementing a McASP (besides SPI) based application. However on an own hw-board based upon C6747 - without an external memory.

I have seen all those examples delivered with the EDMA3 Low Level Driver. Unfortunately,
these require using of external memory (DSP/BIOS .tcf uses it for almost everything).

Here my questions:

  1. For what reason does the EDMA3 LL Driver example project get so large fotprint?
  2. What steps do I need to perform on an EDMA3 LLD example project(s) to make it run on C6747 without SDRAM?
    I've tried to isolate (extract) only one, simple test-example (memory-to-memory transfer), and in .tcf replace SDRAM by IRAM, additionally reduce the heap size. Unfortunately, the .far section still remains huge (> 800k), and cannot fit into C6747 256kB of IRAM.

I use the actual 1.11.0 version of "EDMA3 Low Level Driver".
Many thanks,
Mladen

  • Hi,

    I don't think , EDMA3 LLD driver examples would fit into such small IRAM size, may be, i would recommend you to use shared RAM instead of IRAM.

    In my opinion, with IRAM, it would be very challenging to fit to run EDMA3 LLD driver example on it.

    But still, I will check more on this, and will let you know.

    Thanks & regards,

    Sivaraj K

  • Hello Sivaraj,

    thanks for responding. Meanwhile there're some news.

    I've prepared a "minimal" set of only following source file to use for my basic test:
    main.c  dma_test.c  common.c.

    1. The link attempt fails due to huge .far linker section sized 0xca030. The largest module in there is the
      common.obj taking 0xc0000! What's in there? Meanwhile I know/see what:
      It contains the memory allocations for six (char) buffers of size (3D transfer):
      #define MAX_ACOUNT                    (512u)
      /* MAX BCOUNT */
      #define MAX_BCOUNT                    (32u)
      /* MAX CCOUNT */
      #define MAX_CCOUNT                    (8u)
      MAX_ACOUNT is thus 0x20000, six such buffers make 0xc0000.
      To the purpose of my test, so large buffers are not needed.

      Still: are there some restrictions on the size of single DMA dimensions (A,B,C)? Do these have be a power of 2?

    2. What did you mean by using the shared memory instead of IRAM?
      I had some difficulties by trying to place parts used by operating system to shared memorya part.
      In own/application code I’d use far variables to acess it, but how to specify it to the DSP/BIOS?
      I tried to use shared memory for DSP/BIOS (to place there BIOS objects, use it as mallocseg bios.MEM) - but failed.
      For log-buffer (bios LOG_system and LOG  bufSeg ) it seems to be usable.

    Regards,
    Mladen

  • Hi,

    Thanks for your update.

    I think, it would be better to understand where to allocate sections in memory and a sample linker command file. Please see sections 5.3.5 & 5.3.6. Also, it would be better to understand the data memory model of both initialized and uninitialized sections and to know more on this, please check sections 7.1.1, 7.1.2, 7.1.3, 7.1.5 etc. Kindly check the below doc. link:

    http://www.ti.com/lit/ug/spru187v/spru187v.pdf

    Thanks & regards,

    Sivaraj K

    ------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question

    -------------------------------------------------------------------------------------------------------