TI中文支持网
TI专业的中文技术问题搜集分享网站

28035 CLA SinPU 函数的 问题

28035 CLA SinPU 函数 在线仿真时能正常工作

为什么在FLASH模式下就不能工作?

Eric Ma:

Peter,

 我记得2803x的CLA例程中的memcpy函数有问题。memcpy函数前两个参数需要互换。你检查一下是否是这个问题。

Eric

28035 CLA SinPU 函数 在线仿真时能正常工作

为什么在FLASH模式下就不能工作?

peter shi:

回复 Eric Ma:

MemCopy(&Cla1funcsLoadStart, &Cla1funcsLoadEnd, &Cla1funcsRunStart);

void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr){ // This function will copy the specified memory contents from // one location to another. // // Uint16 *SourceAddr        Pointer to the first word to be moved //                          SourceAddr < SourceEndAddr // Uint16* SourceEndAddr     Pointer to the last word to be moved // Uint16* DestAddr          Pointer to the first destination word // // No checks are made for invalid memory locations or that the // end address is > then the first start address.

    while(SourceAddr < SourceEndAddr)    {        *DestAddr++ = *SourceAddr++;    }    return;}

这个函数有什么问题?没看出来

28035 CLA SinPU 函数 在线仿真时能正常工作

为什么在FLASH模式下就不能工作?

Eric Ma:

回复 peter shi:

你用的是memcopy就没问题,跟memcpy有点区别。

Eric

28035 CLA SinPU 函数 在线仿真时能正常工作

为什么在FLASH模式下就不能工作?

Eric Ma:

peter,

将问题描述再细化一点,比如不能工作是指该函数不能工作而已,其他功能比如GPIO,PWM等模块是否正常?

另外你在仿真的时候用的CMD文件跟在Flash时用的CMD文件是一样的吗?

还有,你将L0~L3 RAM存储模块,你是如何分配,有没有分配给CLA的RAM,却在CMD中仍映射到CPU的某些段中。

   Cla1Regs.MMEMCFG.bit.RAM0E = CLARAM0_ENABLE;   

  Cla1Regs.MMEMCFG.bit.RAM1E = CLARAM1_ENABLE;

Eric

28035 CLA SinPU 函数 在线仿真时能正常工作

为什么在FLASH模式下就不能工作?

peter shi:

回复 Eric Ma:

其他函数都能正常工作,CMD文件用的是同一个,

Cla1Regs.MMEMCFG.bit.PROGE = SETDAT; // Configure the RAM as CLA program memory

   Cla1Regs.MMEMCFG.bit.RAM0E = CLEARDAT; // configure RAM L1, F28035 as CPU RAM

 Cla1Regs.MMEMCFG.bit.RAM1E = SETDAT; // Configure RAM L2, F28035 as CLA data memory 1

我觉得CLA 配置文件应该没有问题

详细情况如下

VacAngle += 0.019635;

SinWave =  CLAsin(VacAngle);

以上两行代码都是在CLA1TASK1中运行,

在仿真模式下,我通过RS485通讯分别把这两个值发出来,VacAngle  变化,SinWave 变化

在FLASH模式下,我通过RS485通讯分别把这两个值发出来,VacAngle  变化,SinWave 等于0

 

28035 CLA SinPU 函数 在线仿真时能正常工作

为什么在FLASH模式下就不能工作?

Eric Ma:

回复 peter shi:

Peter,

SETDAT =1, CLEARDAT = 0, 对不?可否把CMD文件发上来让我doublecheck一下。

memcopy函数是否有在启动CLA任务之前就已经完成?

 

如果方便的话,可以在CLA1TASK1开始的地方修改PWM的占空比,比如你在初始化占空比为0.8,然后在CLA中修改为0.2,观察PWM引脚,确认能够正常进入该任务中执行。

Eric

 

 

28035 CLA SinPU 函数 在线仿真时能正常工作

为什么在FLASH模式下就不能工作?

peter shi:

回复 Eric Ma:

CMD文件

_Cla1Prog_Start = _Cla1funcsRunStart;–undef_sym=__cla_scratchpad_end–undef_sym=__cla_scratchpad_start

MEMORY{/*Program Space*/PAGE 0: RAML0     : origin = 0x008000, length = 0x000C00     /* on-chip RAM (L0+CLARAM0), previous RAML0     : origin = 0x008000, length = 0x000800  */ 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 = 0x3F5000, length = 0x002F80     /* on-chip FLASH ,previous FLASHA      : origin = 0x3F6000, length = 0x001F80 */ 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 */    RAMM0M1     : origin = 0x000050, length = 0x0007B0// length = 0x0007B0     /* on-chip RAM block M0 and M1 ,Steven 2012.09.26*/    CLARAM1  : origin = 0x008C00, length = 0x000400    /* on-chip RAM block L2,prevous  origin = 0x008E00, length = 0x000200 */ 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 = 0x001000     /* 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    .stack            : > RAMM0M1,       PAGE = 1  //Steven 2012.9.26 combine RAMM0 and RAMM1    .ebss             : > RAMM0M1,      PAGE = 1

 

 //  .esysmem          : > RAMM1,      PAGE = 1 .esysmem          : > RAMM0M1,      PAGE = 1 //Steven 2012.9.26 combine RAMM0 and RAMM1    /* 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       //   // Must be allocated to memory the CLA has write access to   //   CLAscratch       :                         { *.obj(CLAscratch)                        . += CLA_SCRATCHPAD_SIZE;                        *.obj(CLAscratch_end) } > CLARAM1,  PAGE = 1  /*Previous CLARAM0*/                           .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)

   }   */

}

CLA初始化文件

void CLA_C_Init(void){    EALLOW;

    Cla1Regs.MVECT1 = ((Uint16)Cla1Task1 – (Uint16)&Cla1Prog_Start);    Cla1Regs.MVECT8 = ((Uint16)Cla1Task8 – (Uint16)&Cla1Prog_Start);       MemCopy(&Cla1funcsLoadStart, &Cla1funcsLoadEnd, &Cla1funcsRunStart);

 asm("   RPT #3 || NOP");   Cla1Regs.MMEMCFG.bit.PROGE = 1; // Configure the RAM as CLA program memory

   Cla1Regs.MMEMCFG.bit.RAM0E = 0; // configure RAM L1, F28035 as CPU RAM

 Cla1Regs.MMEMCFG.bit.RAM1E = 1; // Configure RAM L2, F28035 as CLA data memory 1

   // Enable the IACK instruction to start a task   // Enable the CLA interrupt 8 and interrupt 1    asm("   RPT #3 || NOP");              Cla1Regs.MCTL.bit.IACKE = 1;    Cla1Regs.MIER.all =  M_INT8;     Cla1ForceTask8();

 EDIS;}

 

CLA_C_Init();

 

EALLOW;

 Cla1Regs.MPISRCSEL1.bit.PERINT1SEL = (Uint16)CLA_INT1_ADCINT1 ;  // 0=ADCINT1    1=none    2=EPWM1INT

 Cla1Regs.MIER.all = (Uint16)M_INT1;

 asm("   RPT #3 || NOP");

 EDIS;

Main 函数先初始化后启动CLA功能的,

还有确定CLA功能已经在运行,只是CLAsin 函数有问题,其他库函数就没问题

28035 CLA SinPU 函数 在线仿真时能正常工作

为什么在FLASH模式下就不能工作?

Eric Ma:

回复 peter shi:

Peter,

我在E2E论坛上找到这个帖子,你看一下是否对你有帮助。

http://e2e.ti.com/support/microcontrollers/c2000/f/171/p/185659/669250.aspx#669250

 

Eric

赞(0)
未经允许不得转载:TI中文支持网 » 28035 CLA SinPU 函数的 问题
分享到: 更多 (0)