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.

TMS320F28P650DK: CLA CPU1 shared memory related

Part Number: TMS320F28P650DK
Other Parts Discussed in Thread: C2000WARE

Tool/software:

I have a question regarding shared memory areas with different logical addresses.

I'm working with the DSP TMS320F28P650 [DataSheet], focusing on CPU1 and its associated CLA. The CLA's program area is allocated to LS9RAM, but the start address of this memory differs depending on whether it's accessed by CPU1 or the CLA.  [See Page 266 of the datasheet]

To manage the copy address for CPU1 and the run address for the CLA, I created two separate sections in the linker command file:

  1. CLA Program Section (Cla1Prog): This section maps the CLA code with the correct addresses required by linker for the CLA's LS9RAM area.

  2. CPU1 Access Section: This section allows CPU1 to determine the start address, enabling it to write to the same LS9RAM area.

I'm wondering if there's a simplified way to do the same.

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
RAMLS9_CLA : origin = 0x006000, length = 0x002000 // Use only if configured as CLA program memory
RAMLS9_CPU : origin = 0x024000, length = 0x002000 // When configured as CLA program use the address 0x6000
#if defined(__TI_EABI__)
Cla1ProgCPU : {} LOAD = APPFLASH_CPU1,
RUN = RAMLS9_CPU,
RUN_START(Cla1ProgRunStart),
ALIGN(4)
#else
Cla1ProgCPU : {} LOAD = APPFLASH_CPU1,
RUN = RAMLS9_CPU,
RUN_START(_Cla1ProgRunStart),
ALIGN(4)
#endif
#if defined(__TI_EABI__)
Cla1Prog : {} LOAD = APPFLASH_CPU1,
RUN = RAMLS9_CLA,
LOAD_START(Cla1ProgLoadStart),
LOAD_SIZE(Cla1ProgLoadSize),
ALIGN(4)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • Hello,

    Please refer to the linker cmd file used in the cla_asin_ls8_9 example in C2000ware (path: [C2000ware install]/driverlib/f28p65x/examples/c28x/cla) for the recommended linker configurations using LSRAM8 & LSRAM9.

    Best Regards,

    Delaney

  • Hi Delaney,

    Thank you for your response.

    I discovered that the example is from the newer version of C2000Ware 5.02 (I was using 5.00). While I was able to locate the example project, I’m having trouble opening it with CCS Version 12.7.1.00001. [Posted a snapshot below]

    Could you please confirm if this example is compatible with my version of CCS?

    Thanks,

    Rahul 

  • Hi Rahul,

    I also see the same issue when trying to import the example from there, I will look into why this is happening. Do you have the standalone C2000ware package installed (not the version integrated into the digital power SDK)? I am able to import the example from there without error.

    Below are the linker cmd files used in the example for your reference.

    RAM build:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    MEMORY
    {
    /* BEGIN is used for the "boot to SARAM" bootloader mode */
    BEGIN : origin = 0x000000, length = 0x000002
    BOOT_RSVD : origin = 0x000002, length = 0x0001AF /* Part of M0, BOOT rom will use this for stack */
    RAMM0 : origin = 0x0001B1, length = 0x00024F
    RAMM1 : origin = 0x000400, length = 0x000400
    RAMD0 : origin = 0x00C000, length = 0x002000
    RAMD1 : origin = 0x00E000, length = 0x002000
    RAMD2 : origin = 0x01A000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0x8000. User should comment/uncomment based on core selection
    RAMD3 : origin = 0x01C000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0xA000. User should comment/uncomment based on core selection
    RAMD4 : origin = 0x01E000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0xC000. User should comment/uncomment based on core selection
    RAMD5 : origin = 0x020000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0xE000. User should comment/uncomment based on core selection
    RAMLS0 : origin = 0x008000, length = 0x000800
    RAMLS1 : origin = 0x008800, length = 0x000800
    RAMLS2 : origin = 0x009000, length = 0x000800
    RAMLS3 : origin = 0x009800, length = 0x000800
    RAMLS4 : origin = 0x00A000, length = 0x000800
    RAMLS5 : origin = 0x00A800, length = 0x000800
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Flash build

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    MEMORY
    {
    BEGIN : origin = 0x080000, length = 0x000002 // Update the codestart location as needed
    BOOT_RSVD : origin = 0x000002, length = 0x0001AF /* Part of M0, BOOT rom will use this for stack */
    RAMM0 : origin = 0x0001B1, length = 0x00024F
    RAMM1 : origin = 0x000400, length = 0x000400
    RAMD0 : origin = 0x00C000, length = 0x002000
    RAMD1 : origin = 0x00E000, length = 0x002000
    RAMD2 : origin = 0x01A000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0x8000. User should comment/uncomment based on core selection
    RAMD3 : origin = 0x01C000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0xA000. User should comment/uncomment based on core selection
    RAMD4 : origin = 0x01E000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0xC000. User should comment/uncomment based on core selection
    RAMD5 : origin = 0x020000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0xE000. User should comment/uncomment based on core selection
    RAMLS0 : origin = 0x008000, length = 0x000800
    RAMLS1 : origin = 0x008800, length = 0x000800
    RAMLS2 : origin = 0x009000, length = 0x000800
    RAMLS3 : origin = 0x009800, length = 0x000800
    RAMLS4 : origin = 0x00A000, length = 0x000800
    RAMLS5 : origin = 0x00A800, length = 0x000800
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    You can also take a look at the example code at this link: cla_asin_ls8_9 (ti.com)

    Best Regards,

    Delaney