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