工具/软件:Code Composer Studio
您好、Cottier
感谢您的指导。
我们测试了 ePWM 模块的一些寄存器、包括 EPwmxRegs.TZFLG.ALL、EPwmxRges.TZCTL.ALL、EPwmxRges.DBCTL.ALL、EPwmxRges.AQCTL.ALL、 EPwmxRges.AQCTLA.ALL、EPwmxRges.TBCTL.ALL、(x=1/2/3)。所有这些寄存器的值都是预期值。 在测试期间、我们发现当 ePWM 模块不能正常工作时、一些函数调用不会执行、尤其是闪存程序调用在 RAM 中运行的函数、或者 RAM 程序调用在闪存中运行的函数。 是 CMD 文件错误吗? 以下是 CMD 文件。 请帮助您查看是否存在任何错误或不恰当。
//如果使用、用户必须在项目链接器设置中定义 CLA_C
// CLA C 编译器
//项目属性-> C2000链接器->高级选项->命令文件
//预处理->--define
#ifndef CLA_C
#define CLA_C
#endif //cla_C
#ifdef CLA_C
//为将要使用的 CLA 暂存区定义大小
//由 CLA 编译器生成局部符号和 temps
//还强制引用标记的特殊符号
//暂存区是。
CLA_ScratchPad_size = 0x100;
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start
#endif //cla_C
存储器
{
第 0页:
/* begin 用于"引导至 SARAM"引导加载程序模式 */
开始 :origin = 0x080000,length = 0x000002
RAMM0 :origin = 0x000122、length = 0x0002DE
RAMD0 :origin = 0x00B000、length = 0x000800
RAMLS0_1 :origin = 0x008000、length = 0x001000
RAMLS3_5 :origin = 0x009800、length = 0x001800
//RAMLS3 :origin = 0x009800,length = 0x000800
//RAMLS4 :origin = 0x00A000,length = 0x000800
//RAMLS5 :origin = 0x00A800,length = 0x000800
RAMGS14 :origin = 0x01A000,length = 0x001000
RAMGS15 :origin = 0x01B000,length = 0x001000
复位 :origin = 0x3FFFC0,length = 0x000002
/*闪存扇区*/
FLASHA :origin = 0x080002,length = 0x001FFE /*片上闪存*/
FLASHB :origin = 0x082000、length = 0x002000 //片上闪存*
FLASHC :origin = 0x084000,length = 0x002000 //片上闪存*/
FLASHD :origin = 0x086000、length = 0x002000 //片上闪存*/
FLASHE :origin = 0x088000、length = 0x008000 //片上闪存*/
FLASHF :origin = 0x090000,length = 0x008000 //片上闪存*
FLASHG :origin = 0x098000、length = 0x008000 //片上闪存*/
FLASHH :origin = 0x0A0000,length = 0x008000 //片上闪存*/
FLASHI :origin = 0x0A8000、length = 0x008000 //片上闪存*/
FLASHJ :origin = 0x0B0000,length = 0x008000 //片上闪存*/
FLASHK :origin = 0x0B8000、length = 0x002000 //片上闪存*/
FLASHL :origin = 0x0BA000、length = 0x002000 //片上闪存*/
FLASHM :origin = 0x0BC000、length = 0x002000 //片上闪存*/
FLASHN :origin = 0x0BE000、length = 0x002000 //片上闪存*/
第 1页:
BOOT_RSVD :origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1 :origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
//RAMLS0 :origin = 0x008000、length = 0x000800
//RAMLS1 :origin = 0x008800,length = 0x000800
RAMLS2 :origin = 0x009000,length = 0x000800
//RAMLS3 :origin = 0x009800,length = 0x000800
RAMGS0 :origin = 0x00C000、length = 0x001000
RAMGS1 :origin = 0x00D000、length = 0x001000
RAMGS2 :origin = 0x00E000、length = 0x001000
RAMGS3 :origin = 0x00F000、length = 0x001000
RAMGS4 :origin = 0x010000,length = 0x001000
RAMGS5 :origin = 0x011000,length = 0x001000
RAMGS6 :origin = 0x012000,length = 0x001000
RAMGS7 :origin = 0x013000,length = 0x001000
RAMGS8 :origin = 0x014000,length = 0x001000
RAMGS9 :origin = 0x015000,length = 0x001000
RAMGS10 :origin = 0x016000,length = 0x001000
RAMGS11 :origin = 0x017000,length = 0x001000
RAMGS12 :origin = 0x018000,length = 0x001000
RAMGS13 :origin = 0x019000,length = 0x001000
CPU2TOCPU1RAM :origin = 0x03F800,length = 0x000400
CPU1TOCPU2RAM :origin = 0x03FC00,length = 0x000400
CLA1_MSGRAMLOW :origin = 0x001480,length = 0x000080
CLA1_MSGRAMHIGH :origin = 0x001500,length = 0x000080
}
部分
{
/*分配计划领域:*/
.cinit :> FLASHE PAGE = 0,align (4)
.pinit :> FLASHE、 PAGE = 0、ALIGN (4)
.text :>> FLASHF PAGE = 0,ALIGN (4)
codestart :> begin page = 0,align (4)
ramfuncs :load = FLASHD,
运行 = RAMLS0_1、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
/*分配未初始化的数据段:*/
.stack :>RAMM1 page = 1.
.ebss :> RAMGS5 PAGE = 1.
.esysmem :>RAMGS6 PAGE = 1.
/*初始化段进入闪存*/
.econst :> FLASHB PAGE = 0,ALIGN (4)
.switch :> FLASHB PAGE = 0,ALIGN (4)
.reset :> reset, page = 0,type = DSECT //未使用,*/
filter_RegsFile :> RAMGS0, PAGE = 1
.sysmem :>RAMGS7, PAGE = 1.
.cio :>RAMGS8, page = 1.
/* CLA 特定部分*/
Cla1Prog :load = FLASHC,
运行 = RAMLS3_5、
load_start (_Cla1funcsLoadStart)、
load_end (_Cla1funcsLoadEnd)、
run_start (_Cla1funcsRunStart)、
load_size (_Cla1funcsLoadSize)、
PAGE = 0、ALIGN (4)
CLADataLS0:>RAMLS2,PAGE=1
Cla1ToCpuMsgRAM :> CLA1_MSGRAMLOW, page = 1.
CpuToCla1MsgRAM :>CLA1_MSGRAMHIGH, PAGE = 1.
#ifdef __TI_Compiler_version
#if __TI_Compiler_version >=15009000
.TI.ramfunc:{}负载 = FLASHD,
运行 = RAMLS0_1、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
#endif
#endif
/*以下部分定义适用于 SDFM 示例*/
filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111
Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444
#ifdef CLA_C
/* CLA C 编译器段*/
//
//必须被分配给 CLA 具有写入访问权限的内存
//
CLAscratch :
{*。obj (CLAscratch)
。 += CLA_ScratchPad_size;
*。obj (CLAscratch_end)}> RAMLS2、 PAGE = 1
暂存区 :>RAMLS2, 页 =1
.bss_cla :> RAMLS2, PAGE = 1.
.const_cla : load = FLASHC,
运行 = RAMLS2、
run_start (_Cla1ConstRunStart)、
Load_start (_Cla1ConstLoadStart)、
load_size (_Cla1ConstLoadSize)、
PAGE = 1.
#endif //cla_C
/*使用 IPC API 驱动程序时需要以下部分定义*/
组 :> CPU1TOCPU2RAM,PAGE = 1
{
PUTBUFFER
PUTWRITEIDX
GETREADIDX
}
组 :> CPU2TOCPU1RAM,PAGE = 1
{
GETBUFFER: TYPE = DSECT
GETWRITEIDX: TYPE = DSECT
PUTREADIDX: TYPE = DSECT
}
}
/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*
以下是 .map 文件的第0页:
名称 源 长度 使用 未使用 的属性 填充
------------ ---- ------ ---- ---- --------
第0页:
RAMM0 00000122 000002DE 00000000 000002DE RWIX
RAMLS0_1 00008000 00001000 00000870 00000790 RWIX
RAMLS3_5 00009800 00001800 00001598 00000268 RWIX
RAMD0 0000b000 00000800 00000000 00000800 RWIX
RAMGS14 0001a000 00001000 00000000 00001000 RWIX
RAMGS15 0001b000 00001000 00000000 00001000 RWIX
DCSM_OTP_Z1_LINKPOINT 00078000 0000000c 00000000 0000000c RWIX
DCSM_OTP_Z1_PSWDLOCK 00078010 00000004 00000000 00000004 RWIX
DCSM_OTP_Z1_CRCLOCK 00078014 00000004 00000000 00000004 RWIX
DCSM_OTP_Z1_BOOTCTRL 0007801c 00000004 00000000 00000004 RWIX
DCSM_ZSEL_Z1_P0 00078020 00000010 00000000 00000010 RWIX
DCSM_OTP_Z2_LINKPOINT 00078200 0000000c 00000000 0000000c RWIX
DCSM_OTP_Z2_GPREG 0007820c 00000004 00000000 00000004 RWIX
DCSM_OTP_Z2_PSWDLOCK 00078210 00000004 00000000 00000004 RWIX
DCSM_OTP_Z2_CRCLOCK 00078214 00000004 00000000 00000004 RWIX
DCSM_OTP_Z2_BOOTCTRL 0007821c 00000004 00000000 00000004 RWIX
DCSM_ZSEL_Z2_P0 00078220 00000010 00000000 00000010 RWIX
BEGIN 00080000 00000002 00000002 00000000 RWIX
FLASHA 00080002 00001ffe 00000000 00001ffe RWIX
FLASHB 00082000 00002000 0000025d 00001da3 RWIX
FLASHC 00084000 00002000 00001598 00000a68 RWIX
FLASHD 00086000 00002000 00000870 00001790 RWIX
FLASHE 00088000 00008000 0000001a 00007fe6 RWIX