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.

[参考译文] TMS320F28069:增加 CLA 程序 RAM

Guru**** 2976880 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1026272/tms320f28069-increasing-the-cla-program-ram

器件型号:TMS320F28069

你好! 我想将 CLA 程序 RAM 与 CLA 数据 RAM1 (L3 DPSARAM 与 L2 DPSARAM)相结合。 重组后的编译以及合并 L2和 L3没有问题。 但是、无法初始化 CLA、因此 CLA 无法运行。  

我使用以下代码初始化 CLA:

memcpy (&Cla1funcsRunStart、&Cla1funcsLoadStart、(uint32)&Cla1funcsLoadSize);
memcpy (&Cla1mathTablesRunStart、&Cla1mathTablesLoadStart、(UINT32)&Cla1mathTablesLoadSize);

当我在 CLA 中的中断内设置一个"_mdebugstop()"断点时、无法达到该断点。 我使用最初的.cmd 文件预重组进行了测试、没有问题。 那么、我的问题是、是否可以将 L2和 L3组合在一起? 如果是、我该怎么做。 感谢你的帮助。

我的.cmd 文件供参考

MEMORY
 {
 PAGE 0:/* Program Memory */ 
/*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*//
 RAML3->CLA 程序空间
 RAML23 :origin = 0x008C00,length = 0x001400//片上 RAM 块 L3 */
 RAML6 :origin = 0x00E000、length = 0x002000 /*片上 RAM 块 L6 */

 OTP :origin = 0x3D7800,length = 0x000400 /*片上 OTP */
 FLASHH :origin = 0x3D8000,length = 0x004000 /*片上闪存*/
 FLASHG :origin = 0x3DC000、length = 0x004000 /*片上闪存*/
 FLASHFE :origin = 0x3E0000、length = 0x008000 /*片上闪存*//
 FLASHE :origin = 0x3E4000,length = 0x004000 /*片上闪存*/
 FLASHD :origin = 0x3E8000、length = 0x004000 /*片上闪存*/
 FLASHC :origin = 0x3EC000、length = 0x004000 /*片上闪存*/
 FLASHA :origin = 0x3F4000,length = 0x003F80 //片上闪存*/
 csm_RSVD:origin = 0x3F7F80,length = 0x000076 /* FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 */
开始 :origin = 0x3F7FF6,length = 0x000002 /* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 //
 csm_PWL_P0:origin = 0x3F7FF8,length = 0x000008 /* FLASHA 的一部分。 FLASHA */

 FPUTABLES 中的 CSM 密码位置:origin = 0x3FD860,length = 0x0006A0//引导 ROM 中的 FPU 表*/
 IQTABLES:origin = 0x3FDF00,length = 0x000B50 /*引导 ROM 中的 IQMath 表*/
 IQTABLES2:origin = 0x3FEA50,length = 0x00008C /*引导 ROM 中的 IQMath 表*/
 IQTABLES3:origin = 0x3FEADC,length = 0x0000AA/*引导 ROM 中的 IQMath 表*/

 ROM :origin = 0x3FF3B0,length = 0x000C10 /*引导 ROM */
重置 :origin = 0x3FFFC0,length = 0x000002 引导 ROM 的/*部分*/
向量 :origin = 0x3FFFC2,length = 0x00003E /*部分引导 ROM */

第1页:/*数据存储器*/ 
/*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/ 
/*寄存器保留在第1页上 //

 boot_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
 RAMM0 :origin = 0x000050、length = 0x0003B0 /*片上 RAM 块 M0 */
 RAMM1 :origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */
//========================= CPU Space/CLA DataRAM space================================================ //
 RAML0 :origin = 0x008000、length = 0x000800 /*片上 RAM 块 L0 */
 RAML1 :origin = 0x008800,length = 0x000400 /*片上 RAM 块 L1 *//
 RAML2 :origin = 0x008C00,length = 0x000400 /*片上 RAM 块 L2 */==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== 
//
 RAML5. :origin = 0x00C000、length = 0x002000 /*片上 RAM 块 L5 */

 RAML4 :origin = 0x00A000、length = 0x002000 /*片上 RAM 块 L4 */
 RAML78 :origin = 0x010000,length = 0x004000 /*片上 RAM 块 L7 *//
 RAML8 :origin = 0x012000、length = 0x002000 /*片上 RAM 块 L8 */
 USB_RAM :origin = 0x040000、length = 0x000800 /* USB RAM */ 
FLASHB :origin = 0x3F0000、length = 0x004000 /*片上闪存*/

 CLA1_MSGRAMLOW :origin = 0x001480、length = 0x000080
 CLA1_MSGRAMHIGH :origin = 0x001500,length = 0x000080
 }/*

将段分配给内存块。 
注: 
DSP28_CodeStartBranch.asm 中用于重定向代码的 codestart 用户定义段 
闪存时执行 
ramfuncs 用户定义的段来存储将从闪存复制到 RAM 中的函数
*/


段
{

//分配程序区域:*/
.cinit :> FLASHFE, PAGE = 0.Pinit 
:> FLASHA、 PAGE = 0.text 
:> FLASHA、 PAGE = 0
 codestart :>开始, PAGE = 0
 /*
 Cla1Prog :load = FLASHA, 
运行= RAML3、 
load_start (_Cla1funcsLoadStart)、 
load_end (_Cla1funcsLoadEnd)、 
run_start (_Cla1funcsRunStart)、 
PAGE = 0

 */
//#ifdef __TI_Compiler_version__
//#if __TI_Compiler_version__>/= 15009000
 //.TI.ramfunc:{}load = FLASHD,
// 运行= RAML0、
// load_start (_RamfuncsLoadStart)、
// load_end (_RamfuncsLoadEnd)、
// run_start (_RamfuncsRunStart)、
// PAGE = 0
 //#else
 // ramfuncs :load = FLASHD,
// 运行= RAML0、
// load_start (_RamfuncsLoadStart)、
// load_end (_RamfuncsLoadEnd)、
// run_start (_RamfuncsRunStart)、
// PAGE = 0
 //#endif
 //#endif

 csmpasswds :>csm_PWL_P0、page = 0
 csm_rsvd :>csm_RSVD,page = 0

 /*分配未初始化的数据段:*/
.stack :> RAMM0, PAGE = 1.ebss 
:> RAML4, PAGE = 1
 .esysmem :> RAMM1, PAGE = 1.scratchpad 
:> RAML1, PAGE = 1

 /*初始化段要进入闪存*/
/*要使 SDFlash 对这些段进行编程、必须将它们分配到 PAGE 0 */
.econst :> FLASHC, PAGE = 0.switch 
:> FLASHA、 PAGE = 0
 .scratchpad:> RAML1,PAGE = 1
 snapshot_buffer:> RAML78, PAGE = 1
 graph_buffer:> RAML5, PAGE = 1
 /*分配 FPU 数学区域:*/
 FPUmathTables :> FPUTABLES,PAGE = 0,TYPE = NoLoad

 ClaToCpuMsgRAM :> CLA1_MSGRAMLOW, PAGE = 1. /*链接至 PF0 - CLA 消息 RAM */
 CpuToClaMsgRAM :> CLA1_MSGRAMHIGH, PAGE = 1. /*链接至 PF0 - CLA 消息 RAM */ 


/* CLA.c 文件使用的 Cla1Prog 部分*/
 Cla1Prog :load = FLASHH,page = 0 /*加载到闪存、从 CLA Prog RAM 运行*/ 
RUN_START (_Cla1Prog_Start) 
运行= RAML23、PAGE = 0 
load_start (_Cla1funcsLoadStart)、 
load_size (_Cla1funcsLoadSize)、 
run_start (_Cla1funcsRunStart)

 CLA1mathTables:load = FLASHC,page = 1 
运行= RAML1、页= 1 
Load_start (_CLA1mathTablesLoadStart)、 
Load_End (_CLA1mathTablesLoadEnd)、 
load_size (_CLA1mathTablesLoadSize)、 
run_start (_CLA1mathTablesRunStart)

 ramfuncs :load = FLASHD,page = 0 
运行= RAML6,页= 0 
load_start (_RamfuncsLoadStart)、 
load_end (_RamfuncsLoadEnd)、 
run_start (_RamfuncsRunStart)


 Cla1DataRam1:>RAML0,page = 1/*


 DMARAML5 :> RAML5, PAGE = 1
 DMARAML6 :> RAML6, PAGE = 1
 DMARAML7 :> RAML7, PAGE = 1
 DMARAML8 :> RAML8, page = 1
 */
/*如果调用 IQNexp()或 IQexp(),取消注释以下部分 
库中的函数、以便利用 
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM 
1个等待状态)。 如果此部分未注释、则为 IQmathTables2 
将被加载到其他存储器(SARAM、闪存等)中并将采用 
上行空间、但0等待状态是可能的。 
//
/*
 IQmathTables2:> IQTABLES2,page = 0,type = NoLoad
 { 

IQMath.lib (IQmathTablesRam)

}
*/ 
/*如果调用 IQNasin ()或 IQasin (),请取消注释以下部分 
库中的函数、以便利用 
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM 
1个等待状态)。 如果此部分未注释、则为 IQmathTables2 
将被加载到其他存储器(SARAM、闪存等)中并将采用 
上行空间、但0等待状态是可能的。 
* 
/* 
IQmathTables3:> IQTABLES3,PAGE = 0,TYPE = NOLOAD 
{ 

IQMath.lib (IQmathTablesRam)

} 
//

/*.reset 是编译器使用的标准段。 它包含
用于 C 代码的_c_int00起始地址的*//*。 /*
/*使用引导 ROM 时
,不需要此部分和 CPU 矢量*//*表。 因此,默认类型设置为*/
/* DSECT */ 

/*分配 IQ 数学区域:*/
 IQmath :> FLASHA、 PAGE = 0 /*数学代码*/
 IQmathTables :> IQTABLES,PAGE = 0,TYPE = NoLoad

 .reset :>重置, PAGE = 0、TYPE = DSECT
 向量 :>引导程序,page = 0,type = DSECT
}

/*/=========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== 

//文件结束。