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.

TMS320F38377D Conflict between SDFM and dual core ?



Hello ,

I program SDFM to measure a voltage. The configuration is: SD2, SD Clock at 12,5MHz from EPWM8.

When using simple FLASH on CPU1, i manage and read correctly the data, ie the voltage i want to measure.

When using my 2nd CPU core (CPU2) to transmit the value of this voltage via IPC and serial link, i get a 0 every where, included in the SDFM driver.

I have been using IPC and serial links for many messages so i know they both work good. Other data is transmitted correctly while my voltage keeps to 0.

Is there any known issue between SDFM and dual core ? or SDFM and IPC?

Thank you,

Pierre-Axel.

  • Following analysis:
    The extern (global) variables that i use to send SDFM are find in the ".map" at the address: 0x0C000 which the address of the RAM_MSG0 which is used by IPC for inter CPU communication.
    This could explain my problem.
    How can i do to have my data not declared in the RAM_MSG0 zone?
    Why is it declared there though i am using 2 CPUs and IPC?

    Regards,
    thank you,
    Pierre-Axel.
  • This explains the problem.
    I reduced the size of several buffers and now everything is back in place.
    How can i protect the RAMSG0 so that it is a reserved zone for IPC?

    Regards,
    thank you.
  • If you want to reserve the GS0 RAM, you can edit the linker command file. Look in the SECTIONS part and remove any references to RAMGS0.
  • Ok, Just to perfectly clear: My shared RAM is RAMSG0
    for exxmple , in my.cmd file, i have now :


    .ebss : >> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1
    .esysmem : > RAMLS5 PAGE = 1

    I should remove "RAMMSG0" and "RAMGS1" and have:

    .ebss : >> RAMLS5 | RAMGS1 PAGE = 1
    .esysmem : > RAMLS5 PAGE = 1

    I also have:
    Filter_RegsFile : > RAMGS0, PAGE = 1

    I should remove "RAMMSG0" and have:


    Filter_RegsFile : > RAMGS1, PAGE = 1

    Thank you!
  • Hi,

    I also have:
    Filter_RegsFile : > RAMGS0, PAGE = 1

    I should remove "RAMMSG0" and have:


    Filter_RegsFile : > RAMGS1, PAGE = 1

    You are using word "RAMGS0" as well as "RAMMSG0". Please note that both are different RAMs. RAMGS0 is Global Shared RAM where as RAMMSG0 Message RAM used for  IPC. Please clarify the same to understand the issue better.

    Regards,

    Vivek Singh

  • Yes, that should work, assuming LS5 and GS1 are enough memory for your global variables.

  • OK. The n i need a bit of precision:

    When i look
    In the .cmd file at RAMSG0 i have address 0x00C000
    In the IPC code, #define GS0SARAM_START 0xC000 // Start of GS0 SARAM

    And finally in the .cmd file: SHARERAMGS0 : > RAMGS0, PAGE = 1

    Then i assumed "RAMGS0" and "RAMMSG0" are identical.
    And my IPc was jnot working properly as soon as i had data in the RAMSG0 memory part.

    Could you please calrify?


    Thank you!
    Regards,
    PA
  • When i look
    In the .cmd file at RAMSG0 i have address 0x00C000
    In the IPC code, #define GS0SARAM_START 0xC000 // Start of GS0 SARAM

    And finally in the .cmd file: SHARERAMGS0 : > RAMGS0, PAGE = 1

    Then i assumed "RAMGS0" and "RAMMSG0" are identical.
    And my IPc was not working properly as soon as i had data in the RAMSG0 memory part.

    Could you please clarify?
  • Hi,

    Please refer "Table 6-1. C28x Memory Map" in device datasheet to see the address of different RAMs. There different shared RAMs and if GS0 is used for IPC data then you can use GS1 or some other GSx RAM for data.

    Regards,

    Vivek Singh