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**** 2553610 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 = 0x008C00length = 0x001400//片上 RAM L3 */
 RAML6 origin = 0x00E000length = 0x002000 /*片上 RAM L6 */

 OTP origin = 0x3D7800length = 0x000400 /*片上 OTP */
 FLASHH origin = 0x3D8000length = 0x004000 /*片上闪存*/
 FLASHG origin = 0x3DC000length = 0x004000 /*片上闪存*/
 FLASHFE origin = 0x3E0000length = 0x008000 /*片上闪存*//
 FLASHE origin = 0x3E4000length = 0x004000 /*片上闪存*/
 FLASHD origin = 0x3E8000length = 0x004000 /*片上闪存*/
 FLASHC origin = 0x3EC000length = 0x004000 /*片上闪存*/
 FLASHA origin = 0x3F4000length = 0x003F80 //片上闪存*/
 csm_RSVDorigin = 0x3F7F80length = 0x000076 /* FLASHA 的一部分当 CSM 正在使用时、使用所有0x0000进行编程。 */
开始 origin = 0x3F7FF6length = 0x000002 /* FLASHA 的一部分用于"引导至闪存"引导加载程序模式//
 csm_PWL_P0origin = 0x3F7FF8length = 0x000008 /* FLASHA 的一部分FLASHA */

 FPUTABLES 中的 CSM 密码位置origin = 0x3FD860length = 0x0006A0//引导 ROM 中的 FPU 表*/
 IQTABLESorigin = 0x3FDF00length = 0x000B50 /*引导 ROM 中的 IQMath 表*/
 IQTABLES2origin = 0x3FEA50length = 0x00008C /*引导 ROM 中的 IQMath 表*/
 IQTABLES3origin = 0x3FEADClength = 0x0000AA/*引导 ROM 中的 IQMath 表*/

 ROM origin = 0x3FF3B0length = 0x000C10 /*引导 ROM */
重置 origin = 0x3FFFC0length = 0x000002 引导 ROM 的/*部分*/
向量 origin = 0x3FFFC2length = 0x00003E /*部分引导 ROM */

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

 boot_RSVDorigin = 0x000000length = 0x000050 // M0的一部分引导 ROM用于*/
 RAMM0 origin = 0x000050length = 0x0003B0 /*片上 RAM M0 */
 RAMM1 origin = 0x000400length = 0x000400 /*片上 RAM M1 */
//========================= CPU Space/CLA DataRAM space================================================ //
 RAML0 origin = 0x008000length = 0x000800 /*片上 RAM L0 */
 RAML1 origin = 0x008800length = 0x000400 /*片上 RAM L1 *//
 RAML2 origin = 0x008C00length = 0x000400 /*片上 RAM L2 */==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== 
//
 RAML5. origin = 0x00C000length = 0x002000 /*片上 RAM L5 */

 RAML4 origin = 0x00A000length = 0x002000 /*片上 RAM L4 */
 RAML78 origin = 0x010000length = 0x004000 /*片上 RAM L7 *//
 RAML8 origin = 0x012000length = 0x002000 /*片上 RAM L8 */
 USB_RAM origin = 0x040000length = 0x000800 /* USB RAM */ 
FLASHB origin = 0x3F0000length = 0x004000 /*片上闪存*/

 CLA1_MSGRAMLOW origin = 0x001480length = 0x000080
 CLA1_MSGRAMHIGH origin = 0x001500length = 0x000080
 }/*

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





//分配程序区域*/
.cinit :> FLASHFEPAGE = 0.Pinit 
> FLASHAPAGE = 0.text 
> FLASHAPAGE = 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_P0page = 0
 csm_rsvd >csm_RSVDpage = 0

 /*分配未初始化的数据*/
.stack :> RAMM0PAGE = 1.ebss 
> RAML4PAGE = 1
 .esysmem :> RAMM1PAGE = 1.scratchpad 
> RAML1PAGE = 1

 /*初始化段进入闪存*/
/*使 SDFlash这些段进行编程必须将它们分配 PAGE 0 */
.econst :> FLASHCPAGE = 0.switch 
> FLASHAPAGE = 0
 .scratchpad:> RAML1PAGE = 1
 snapshot_buffer> RAML78PAGE = 1
 graph_buffer> RAML5PAGE = 1
 /*分配 FPU 数学区域*/
 FPUmathTables > FPUTABLESPAGE = 0TYPE = NoLoad

 ClaToCpuMsgRAM > CLA1_MSGRAMLOWPAGE = 1. /*链接 PF0 - CLA 消息 RAM */
 CpuToClaMsgRAM > CLA1_MSGRAMHIGHPAGE = 1. /*链接 PF0 - CLA 消息 RAM */ 


/* CLA.c 文件使用的 Cla1Prog 部分*/
 Cla1Prog load = FLASHHpage = 0 /*加载闪存 CLA Prog RAM 运行*/ 
RUN_START (_Cla1Prog_Start) 
运行= RAML23PAGE = 0 
load_start (_Cla1funcsLoadStart)、 
load_size (_Cla1funcsLoadSize)、 
run_start (_Cla1funcsRunStart)

 CLA1mathTablesload = FLASHCpage = 1 
运行= RAML1= 1 
Load_start (_CLA1mathTablesLoadStart)、 
Load_End (_CLA1mathTablesLoadEnd)、 
load_size (_CLA1mathTablesLoadSize)、 
run_start (_CLA1mathTablesRunStart)

 ramfuncs load = FLASHDpage = 0 
运行= RAML6= 0 
load_start (_RamfuncsLoadStart)、 
load_end (_RamfuncsLoadEnd)、 
run_start (_RamfuncsRunStart)


 Cla1DataRam1>RAML0page = 1/*


 DMARAML5 > RAML5PAGE = 1
 DMARAML6 > RAML6PAGE = 1
 DMARAML7 > RAML7PAGE = 1
 DMARAML8 > RAML8page = 1
 */
/*如果调用 IQNexp() IQexp(),取消注释以下部分 
库中的函数、以便利用 
引导 ROM 中的相关 IQ Math 表(可以节省空间引导 ROM 
1个等待状态)如果部分注释则为 IQmathTables2 
将被加载其他存储器(SARAM闪存等)中并将采用 
行空间、但0等待状态是可能的
//
/*
 IQmathTables2> IQTABLES2page = 0type = NoLoad
 { 

IQMath.lib (IQmathTablesRam)


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


IQMath.lib (IQmathTablesRam)


//

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

/*分配 IQ 数学区域*/
 IQmath > FLASHAPAGE = 0 /*数学代码*/
 IQmathTables > IQTABLESPAGE = 0TYPE = NoLoad

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


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

//文件结束