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.

28035的CLA在FLASH里不能起动

Other Parts Discussed in Thread: CONTROLSUITE

TI的专家你们好,请教一个问题:28035的CLA在有仿真情况下,运行正常;去掉仿真器后,自起动却不行,通过输出,确信CAL也运行。但电机却没有反映。网上有贴说加了

CLA1mathTables : LOAD = FLASHB, /*指定加载地址*/
RUN = CLARAM1, /*指定运行地址*/
LOAD_START(_Cla1TablesLoadStart),
LOAD_END(_Cla1TablesLoadEnd),
RUN_START(_Cla1TablesRunStart),
PAGE = 1

就可以,我也加了,依然没反映。请教一下如何解决?下面是我的CMD文件(文件来自:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVPM_Sensorless_CLA_F2803x)

_Cla1Prog_Start = _Cla1funcsRunStart;
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start


MEMORY
{
/*Program Space*/
PAGE 0:
RAML0 : origin = 0x008000, length = 0x000800 /* on-chip RAM (L0)*/
RAML3 : origin = 0x009000, length = 0x001000 /* data RAM (L3) */
OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */
FLASHH : origin = 0x3E8000, length = 0x002000 /* on-chip FLASH */
FLASHG : origin = 0x3EA000, length = 0x002000 /* on-chip FLASH */
FLASHF : origin = 0x3EC000, length = 0x002000 /* on-chip FLASH */
FLASHE : origin = 0x3EE000, length = 0x002000 /* on-chip FLASH */
FLASHD : origin = 0x3F0000, length = 0x002000 /* on-chip FLASH */
FLASHC : origin = 0x3F2000, length = 0x002000 /* on-chip FLASH */
FLASHA : origin = 0x3F6000, length = 0x001F80 /* 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 */

IQTABLES : origin = 0x3FE000, length = 0x000B50 /* IQ Math Tables in Boot ROM */
IQTABLES2 : origin = 0x3FEB50, length = 0x00008C /* IQ Math Tables in Boot ROM */
IQTABLES3 : origin = 0x3FEBDC, length = 0x0000AA /* IQ Math Tables in Boot ROM */

BOOTROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */
RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */
VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */

/*Data Space*/
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 */
CLARAM0 : origin = 0x008800, length = 0x000400 /* on-chip RAM block L1 */
CLARAM1 : 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 */

FLASHB : origin = 0x3F4000, length = 0x002000 /* on-chip FLASH */

}


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_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_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

/* 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 : > FLASHD 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

ClaDataRam0 : > CLARAM0, PAGE = 1
ClaDataRam1 : > CLARAM1, PAGE = 1
CLAmathTables : > CLARAM1, PAGE = 1
CLA1mathTables : > CLARAM1, PAGE = 1

CLA1mathTables : LOAD = FLASHB, /*指定加载地址*/
RUN = CLARAM1, /*指定运行地址*/
LOAD_START(_Cla1TablesLoadStart),
LOAD_END(_Cla1TablesLoadEnd),
RUN_START(_Cla1TablesRunStart),
PAGE = 1


//
// Must be allocated to memory the CLA has write access to
//
CLAscratch :
{ *.obj(CLAscratch)
. += CLA_SCRATCHPAD_SIZE;
*.obj(CLAscratch_end) } > CLARAM0, PAGE = 1

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


/* Uncomment the section below if calling the IQNexp() or IQexp()
functions from the IQMath.lib library in order to utilize the
relevant IQ Math table in Boot ROM (This saves space and Boot ROM
is 1 wait-state). If this section is not uncommented, IQmathTables2
will be loaded into other memory (SARAM, Flash, etc.) and will take
up space, but 0 wait-state is possible.
*/
/*
IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD
{

IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)

}
*/
/* Uncomment the section below if calling the IQNasin() or IQasin()
functions from the IQMath.lib library in order to utilize the
relevant IQ Math table in Boot ROM (This saves space and Boot ROM
is 1 wait-state). If this section is not uncommented, IQmathTables2
will be loaded into other memory (SARAM, Flash, etc.) and will take
up space, but 0 wait-state is possible.
*/
/*
IQmathTables3 : > IQTABLES3, PAGE = 0, TYPE = NOLOAD
{

IQmath.lib<IQNasinTable.obj> (IQmathTablesRam)

}
*/

}

  • 教一个问题:28035的CLA在有仿真情况下,运行正常;去掉仿真器后,自起动却不行,通过输出,确信CAL也运行。但电机却没有反映。

    ERIC:

    你说仿真能够运行,仿真的时候,也是运行在FLASH吗?GPIO34, GPIO37有没有上拉或是悬空。

    既然你用的是F28035,我倒是建议你直接跑一下这个例程,或用这个例程去做对比,因为这个例程是可以工作的。

    C:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVPM_Sensorless_CLA_F2803x

  • 另外,CMD没有问题。还有确保main文件里面有调用memcpy。

  • Eric


       1、主程序里有MemCopy,

      2、 GPIO37、GPIO34都有上拉3.3V。(不用CLA,程序放在CPU里是可以自起动的,证明硬件没问题。)

      3、带仿真器运行时,程序也是运行在FLASH里面(同一个CMD)。最初我们是没用CAL,后来用CLA,才用这个例程测了下,发现去掉仿真器也不能起动。

  • 并且,我们看了CMD文件,

    ipark1.cos=CLAcosPU(rg1.Out);
    ipark1.sine=CLAsinPU(rg1.Out);

    所要用到的CLA1mathTables 确实没有从FLASH拷贝到RAM里的过程。所以网友在相关的贴子里加了这一段:

    CLA1mathTables : LOAD = FLASHH, /*指定加载地址*/
    RUN = CLARAM1, /*指定运行地址*/
    LOAD_START(_Cla1TablesLoadStart),
    LOAD_END(_Cla1TablesLoadEnd),
    RUN_START(_Cla1TablesRunStart),
    PAGE = 1

  • 你带仿真器时可以正常工作,去掉仿真器后不能工作,确实有点奇怪。code_start.asm有添加吧?

    另外,把CLA里面的__mdebugstop(); 去掉。

    如果还不行,那建议你弄个GPIO口翻转,插入到你的代码里面,用示波器观察,看看跑在哪里出问题的。

    ERIC

  • 程序烧到Flash之后复位运行,然后连接仿真器,用Load Symbols将程序加载,利用Flash在线调试,看看程序跑到什么地方。

  • 非常感谢你们的回复!

    1、code_start.asm 在DSP2803x_CodeStartBranch.asm文件里是有的。
    2、我现在完全是TI的controlSUITE工程导入:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVPM_Sensorless_CLA_F2803x 来验证。这个工程CMD应有问题。
    3、在CLA里面,执行很简单的程序:


    if(EnableFlag!=0)
    {
    IsrTicker++;
    IsrTicker1++;
    if(IsrTicker1 > 2000)
    IsrTicker1 =0;
    // =============================== LEVEL 1 ======================================
    // Checks target independent modules, duty cycle waveforms and PWM update
    // Keep the motors disconnected at this level
    // ==============================================================================
    #if (DMC_CLA_BUILDLEVEL==LEVEL1)
    // ------------------------------------------------------------------------------
    // Connect inputs of the RMP module and call the ramp control macro
    // ------------------------------------------------------------------------------
    rc1.TargetValue = SpeedRef;
    RAMP_CNTL_CLA_MACRO(rc1)

    // ------------------------------------------------------------------------------
    // Connect inputs of the RAMP GEN module and call the ramp generator macro
    // ------------------------------------------------------------------------------
    rg1.Freq=rc1.SetpointValue;
    RAMP_GEN_CLA_MACRO(rg1)

    // ------------------------------------------------------------------------------
    // Connect inputs of the INV_PARK module and call the inverse park trans. macro
    // ------------------------------------------------------------------------------
    ipark1.d=VdTesting;
    ipark1.q=VqTesting;
    ipark1.cos=CLAcosPU(rg1.Out);
    ipark1.sine=CLAsinPU(rg1.Out);
    iPARK_CLA_MACRO(ipark1)

    // ------------------------------------------------------------------------------
    // Connect inputs of the SVGEN module and call the space-vector gen. macro
    // ------------------------------------------------------------------------------
    svgen1.Ualpha=ipark1.alpha;
    svgen1.Ubeta=ipark1.beta;
    SVGEN_CLA_MACRO(svgen1)

    // ------------------------------------------------------------------------------
    // Connect inputs of the PWM_DRV module and call the PWM signal generation macro
    // ------------------------------------------------------------------------------
    pwm1.MfuncC1=svgen1.Ta;
    pwm1.MfuncC2=svgen1.Tb;
    pwm1.MfuncC3=svgen1.Tc;
    PWMDRV_3phInv_CLA_MACRO(pwm1)

    当EnableFlag使能(外部IO控制)时,IsrTicker1计数,IsrTicker1>1000时,通过Cla1ToCpuMsgRAM导出控制一个LED灯闪。

    这个工程,有仿真器时,电机是可以转的,LED灯也闪,表现OK;当去掉仿真器时,LED灯也闪,但电机却不动了。

    论坛里有的贴子说CMD文件“  CLA1mathTables : > CLARAM1,  PAGE = 1 ” 需要复位时从FLASH拷贝到RAM,这句是有问题的,因为“CLAcosPU(rg1.Out  CLAsinPU(rg1.Out ”这两句需要用到“CLA1mathTables”内容支持。是问题所在!

    CLA1mathTables : LOAD = FLASHB, 
    RUN = CLARAM1, 
    LOAD_START(_Cla1TablesLoadStart),
    LOAD_END(_Cla1TablesLoadEnd),
    RUN_START(_Cla1TablesRunStart),
    PAGE = 1

    可我拷了后,问题依然不能解决。反而带仿真时也不行啦。

    求支持!

  • 去看我写的文章:《在flash 里运行》,21IC上是发的两个文件,EEworld上是这个标题

  •  谢谢你的回复。

      刚看了你的贴子,与我这个情况有一些不一样。因为我这个程序是要拷到CLA里运行。

  • 通过GPIO,确信,rg1.Out输出是OK的;ipark1.cos、ipark1.sine没有变化!就是以下这段。

    ipark1.d=VdTesting;
    ipark1.q=VqTesting;
    ipark1.cos=CLAcosPU(rg1.Out);
    ipark1.sine=CLAsinPU(rg1.Out);
    iPARK_CLA_MACRO(ipark1)

  • 问题终于解决了。现在可以确信:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVPM_Sensorless_CLA_F2803x 工程是有问题!问题有那几处!

    在这里也就提醒大家啦。

    这里的发贴都是自己顶自己啊。

  • 你好,

    程序烧到FLASH,复位,点运行............能说详细一点吗?

    我照你说的,看不到啊!

  • 您好,不知您的问题是否有解决,

    由于帖子较长,建议您引用回复者的回帖,然后再咨询就比较容易分别是哪个问题,或者假设帖子的问题解决了,您可以重新发新帖咨询,谢谢。

  • 问题有那几处??麻烦明确一下么?

  • 你好!请问可不可以告诉一下详细解决方法?

  • 您好,@CAI DANSE。 可以具体说一下你的CLA 在FLASH里面运行时怎么解决的么?