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.

CCS/TMS320F28379D: TMS320F28379D

Part Number: TMS320F28379D
Other Parts Discussed in Thread: C2000WARE

Tool/software: Code Composer Studio

I'm workin on c200 ware lib code composer,  the specific project is cla_adc_fir32_cpu01.c,  i'm trying to increment the order of the filter from 5 to 100 but i have some problems  with the block memory i guess, the project only works if i incrment the order up to 15. "Cla1ToCpuMsgRAM" and "CpuToCla1MsgRAM"  i dont know if the problem is in the memory of the cla or something. 

  • Edgar,

    Please provide more information on what is not working?  The compiler generates an error?  Or the result is incorrect or?

    Regards

    Lori

  • OK 

    Well, let's see I am trying to filter a signal using the CLA module, using the exercise mentioned above. Within the exercise a fifth order FIR filter is designed, but I seek to make a FIR filter of at least order 100.
    Right now I try to make a filter of order 30, before compiling I make the respective changes in the files for example in "fir32.asm" is where the task of the filter of order 32 is executed.
    In the file cla_adc_fir32_shared.h the variables that will be used are declared and here I change my buffer width from 5 to 30
    and finally I compile, in this part the code composer gives me this error: "C: /ti/c2000/C2000Ware_3_01_00_00/device_support/f2837xd/common/cmd/2837xD_RAM_CLA_lnk_cpu1.cmd", line 73: error # 10099-D: program will not fit into available memory. run placement with alignment / blocking fails for section ".ebss" size 0x7f9 page 1. Available memory ranges:
    RAMLS2 size: 0x800 unused: 0x800 max hole: 0x800
    error # 10010: errors encountered during linking; "cla_adc_fir32_cpu01.out" not built

    I understand that I must increase the memory block of RAMLS2 and later I do it taking a little space from RAMLS3
    This is how it looked before:
    RAMLS0: origin = 0x008000, length = 0x000800
    RAMLS1: origin = 0x008800, length = 0x000800
    RAMLS2: origin = 0x009000, length = 0x000800
    RAMLS3: origin = 0x009800, length = 0x000800
    Now it looks like this:
    RAMLS0: origin = 0x008000, length = 0x000800
    RAMLS1: origin = 0x008800, length = 0x000800
    RAMLS2: origin = 0x009000, length = 0x000900
    RAMLS3: origin = 0x009900, length = 0x000700

    after this I managed to compile without any error.
    Now I try to make my FIR filter of order 50th, and I make the pertinent changes in the files "fir32.asm" and "file cla_adc_fir32_shared.h", then I compile the program and I get the following error:
    "C: /ti/c2000/C2000Ware_3_01_00_00/device_support/f2837xd/common/cmd/2837xD_RAM_CLA_lnk_cpu1.cmd", line 84: error # 10099-D: program will not fit into available memory. run placement with alignment / blocking fails for section "Cla1ToCpuMsgRAM" size 0xa4 page 1. Available memory ranges:
    CLA1_MSGRAMLOW size: 0x80 unused: 0x80 max hole: 0x80
    "C: /ti/c2000/C2000Ware_3_01_00_00/device_support/f2837xd/common/cmd/2837xD_RAM_CLA_lnk_cpu1.cmd", line 85: error # 10099-D: program will not fit into available memory. run placement with alignment / blocking fails for section "CpuToCla1MsgRAM" size 0xa4 page 1. Available memory ranges:
    CLA1_MSGRAMHIGH size: 0x80 unused: 0x80 max hole: 0x80

    This is how my cmd is found by default

    CLA1_MSGRAMLOW: origin = 0x001480, length = 0x000080
    CLA1_MSGRAMHIGH: origin = 0x001500, length = 0x000080

    Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW, PAGE = 1
    CpuToCla1MsgRAM:> CLA1_MSGRAMHIGH, PAGE = 1

    I try to modify it by adding more space to the blocks and it is as follows:

    CLA1_MSGRAMLOW: origin = 0x001480, length = 0x0000B0
    CLA1_MSGRAMHIGH: origin = 0x001530, length = 0x0000D0

    Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW, PAGE = 1
    CpuToCla1MsgRAM:> CLA1_MSGRAMHIGH, PAGE = 1

    With this modification the program does not give me any error, but I realize that when looking at my data in memory browser I see that from address 0x1580 to address 0x15FC it is not possible for me to use that memory since it appears like this "----- - "

    and if for example I change the memory block that would collide with the "special" memory space that goes from 0x1580 to the address 0x15FC
    CLA1_MSGRAMHIGH: origin = 0x001530, length = 0x0000D0
    to for example
    CLA1_MSGRAMHIGH: origin = 0x001630, length = 0x0000D0
    If I change the address of the block so that they do not crash and I compile and run the program, my filter does not respond or deliver anything to the output more than 0
    I don't know what else to do to make it work, any ideas?

  • Edgar, 

    Take a look at some of the getting started resources in the CLA Software Development Guide.  I think they will help you get started with the CLA. 

    (https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/getting_started.html)

    Edgar Omar said:
    I understand that I must increase the memory block of RAMLS2 and later I do it taking a little space from RAMLS3

    Each of these blocks is an actual physical memory on the device.  Blocks either belong to the C28x or to the CLA.  It isn't possible to only assign a portion to each.  The linker .cmd file only knows what you tell it, so it lets you do this even though it is not doable on the actual silicon.

    In the linker, if you allocate a block to the CLA then you will also need to assign ownership to the CLA in the code.  There will be an example in main() where this was done for RAMLS2. 

    Edgar Omar said:

    CLA1_MSGRAMLOW: origin = 0x001480, length = 0x0000B0
    CLA1_MSGRAMHIGH: origin = 0x001530, length = 0x0000D0

    Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW, PAGE = 1
    CpuToCla1MsgRAM:> CLA1_MSGRAMHIGH, PAGE = 1

    With this modification the program does not give me any error, but I realize that when looking at my data in memory browser I see that from address 0x1580 to address 0x15FC it is not possible for me to use that memory since it appears like this "----- - "

    The CLA message RAM is a physical memory with a set start and size.  It cannot be changed.  If the CLA message RAM blocks are too small for what you need, then you can use one of the RAM blocks for sending data back and forth instead.

    To see which RAM blocks are accessible by the CLA, refer to the memory map in the datasheet for the device. 

    Refer to this FAQ: https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/faq.html#does-the-cla-have-access-to-all-memory-blocks

    Best Regards

    Lori

  • Gracias a sus respuestas y la información que me anexo logre completar el trabajo. gracias.