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.

RAM access with CPU and CLA

Other Parts Discussed in Thread: TMS320F28069

 I am using the tms320f28069  and I am trying to use RAM1 to be accessible from CPU and CLA . I read the tread :

//e2e.ti.com/support/microcontrollers/c2000/f/171/p/218230/770892#770892

and I used a global acces to the register MMEMCFG  but  I still having the same problem :  access with CLA but not with CPU.

I included parts of the code if any one can help

Thanks

Hamid

 

 

Cla1Regs.MMEMCFG.all  = CLA_PROG_ENABLE| CLARAM0_ENABLE|CLARAM1_ENABLE|CLA_RAM1CPUE;

 

 

 

 

 

 

 

 

_Cla1Prog_Start = _Cla1funcsRunStart;

-heap 0x200

-stack 0x200

 

// Define a size for the CLA scratchpad area that will be used

// by the CLA compiler for local symbols and temps

// Also force references to the special symbols that mark the

// scratchpad are.

CLA_SCRATCHPAD_SIZE = 0x100;

--undef_sym=__cla_scratchpad_end

--undef_sym=__cla_scratchpad_start

 

MEMORY

{

/* Note that the memory allocation below does not create sections as necessary for

   the CLA on the F2803x.

*/

 

PAGE 0:

       RAML0      : origin = 0x008000, length = 0x000800 /* on-chip RAM (L0-L1)*/

       RAML3      : origin = 0x009000, length = 0x001000     /* data RAM (L3) */

       OTP         : origin = 0x3D7800, length = 0x000400     /* on-chip OTP */

       FLASHH      : origin = 0x3D8000, length = 0x004000     /* on-chip FLASH */

    FLASHG      : origin = 0x3DC000, length = 0x004000     /* on-chip FLASH */

    FLASHF      : origin = 0x3E0000, length = 0x004000     /* on-chip FLASH */

    FLASHE      : origin = 0x3E4000, length = 0x004000     /* on-chip FLASH */

    FLASHD      : origin = 0x3E8000, length = 0x004000     /* on-chip FLASH */

    FLASHC      : origin = 0x3EC000, length = 0x004000     /* on-chip FLASH */

    FLASHA      : origin = 0x3F4000, length = 0x003F80     /* on-chip FLASH */

       CSM_RSVD    : origin = 0x3F7F80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */

       BEGIN       : origin = 0x3F7FF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */

       CSM_PWL     : origin = 0x3F7FF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */

 

       FPUTABLES   : origin = 0x3FD860, length = 0x0006A0    /* FPU Tables in Boot ROM */

    IQTABLES    : origin = 0x3FDF00, length = 0x000B50     /* IQ Math Tables in Boot ROM */

    IQTABLES2   : origin = 0x3FEA50, length = 0x00008C     /* IQ Math Tables in Boot ROM */

    IQTABLES3   : origin = 0x3FEADC, length = 0x0000AA       /* IQ Math Tables in Boot ROM */

 

       BOOTROM     : origin = 0x3FF3B0, length = 0x000C10     /* Boot ROM */

       RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */

       VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */

 

PAGE 1 :

       BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */

       RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */

       RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */

       dataRAM             : origin = 0x008800, length = 0x000400    /* on-chip RAM block L1 */

       RAML2        : origin = 0x008C00, length = 0x000400    /* on-chip RAM block L2 */

       CLA_CPU_MSGRAM  : origin = 0x001480, length = 0x000080 /* CLA-R/W, CPU-R message RAM */

       CPU_CLA_MSGRAM  : origin = 0x001500, length = 0x000080 /* CPU-R/W, CLA-R message RAM */

}

 

 

SECTIONS

{

   /* Allocate program areas: */

   .cinit            : > FLASHA,     PAGE = 0

   .pinit            : > FLASHA,     PAGE = 0

   .text             : > FLASHA,     PAGE = 0

 

   codestart         : > BEGIN       PAGE = 0

  

   ramfuncs          : LOAD = FLASHD,

                       RUN = RAML0,

                       LOAD_START(_RamfuncsLoadStart),

                       LOAD_SIZE(_RamfuncsLoadSize),

                       LOAD_END(_RamfuncsLoadEnd),

                       RUN_START(_RamfuncsRunStart),

                       PAGE = 0

                     

 Cla1Prog         : LOAD = FLASHC, /* Note for running from RAM the load and RUN can be the same */

                      RUN = RAML3,

                      LOAD_START(_Cla1funcsLoadStart),

                      LOAD_SIZE(_Cla1funcsLoadSize),

                      LOAD_END(_Cla1funcsLoadEnd),

                      RUN_START(_Cla1funcsRunStart),

                      PAGE = 0

 

 

      

   csmpasswds        : > CSM_PWL     PAGE = 0

   csm_rsvd          : > CSM_RSVD    PAGE = 0

  

   /* Allocate uninitalized data sections: */

   .stack            : > RAMM0,      PAGE = 1

   .ebss             : > RAMM1,         PAGE = 1

   .esysmem          : > RAMM1,      PAGE = 1

       Cla1Data            : > dataRAM,        PAGE = 1

   /* Initalized sections go in Flash */

   /* For SDFlash to program these, they must be allocated to page 0 */

   .econst           : > FLASHA      PAGE = 0

   .switch           : > FLASHA      PAGE = 0     

 

   /* Allocate IQ math areas: */

   IQmath            : > FLASHA      PAGE = 0                  /* Math Code */

   IQmathTables      : > IQTABLES     PAGE = 0, TYPE = NOLOAD   /* Math Tables In ROM */

 

   Cla1ToCpuMsgRAM   : > CLA_CPU_MSGRAM PAGE = 1

   CpuToCla1MsgRAM   : > CPU_CLA_MSGRAM PAGE = 1

 

   .reset            : > RESET,      PAGE = 0, TYPE = DSECT

   vectors           : > VECTORS     PAGE = 0, TYPE = DSECT

 

   DMARAML5          : > RAML5,      PAGE = 1

   DMARAML6          : > RAML6,      PAGE = 1

   DMARAML7          : > RAML7,      PAGE = 1

   DMARAML8          : > RAML8,      PAGE = 1

 

 

}

   

 

SECTIONS

{

       /*************       DPLIB Sections C28x      ************************/

       /* ADCDRV_1ch section */

       ADCDRV_1ch_Section                     : > dataRAM                PAGE = 1

      

       /* ADCDRV_4ch section */

       ADCDRV_4ch_Section                     : > dataRAM                PAGE = 1

 

       /* CNTL_2P2Z section */

       CNTL_2P2Z_Section                      : > dataRAM                PAGE = 1

       CNTL_2P2Z_InternalData                 : > dataRAM                PAGE = 1

       CNTL_2P2Z_Coef                                : > dataRAM                      PAGE = 1

      

 

}

  • is there any one to help for this urgent issue?

    Thanks for your support

    Hamid

  • Hi Hamid,

    Did you check the value of "Cla1Regs.MMEMCFG" register in register view of CCS (or in memory watch window)? Just to make correct value is getting written into this register from your code.

    Regards,

    Vivek Singh

  • Hi Vivek,

    I check the register MMEMCFG :

    the RAM1E =1    as expected but RAM1CPUE =0   instead of 1 !!!  

    is is normal   ? I read some where that reading this bit return 0   is that correct ?

    any idea ?

    Hamid

  • Hi Hamid,

    hamid said:
    is is normal   ? I read some where that reading this bit return 0   is that correct ?

    Yes that is correct, bits 8, 9, 10 read 0. You can find the description of the issue, and the workaround, in the errata (SPRZ342).

    The workaround in the errata,which is also copied in the TRM, should work - you should be able to access the dataRAM from the CPU side. Based on the combination of macros, you should be writing 0x0231 to MMEMCFG; you can check the disassembly while executing to see if this is the value being written to the regsiter; if not then its possible the #defines might be incorrect.

  • Hi Vishal,

    Thank you for getting back to me.

    I checked the #defines is correct   and  it's working when I set the bit RAM0CPUE = 1 too. 

    Cla1Regs.MMEMCFG.all  = CLA_PROG_ENABLE| CLARAM0_ENABLE|CLARAM1_ENABLE|CLA_RAM0CPUE|CLA_RAM1CPUE;

     if I put only RAM1CPUE = 1   the CPU  can't access to RAML1.

    Cla1Regs.MMEMCFG.all  = CLA_PROG_ENABLE| CLARAM0_ENABLE|CLARAM1_ENABLE|CLA_RAM1CPUE;

    But its fine for me

    Thanks again