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.

[参考译文] TMS320F28375D:CPU2 CLA 问题

Guru**** 2442090 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/972262/tms320f28375d-cpu2-cla-issue

器件型号:TMS320F28375D

向 CPU2闪存添加新代码时、CPU2 CLA 无法正常工作。 此外、CPU2的其他部分正常工作。  我们已将闪存 E、F、G、H、I 和 J 合并为闪存 E。 存储器配置窗口不显示任何存储器溢出。  只需删除添加的新代码、即可使 CPU2 CLA 正常工作。 还尝试在 CCS 8.0中的16.9.6至18.1.8以及 CCS 10.2.0中的20.2.4中编译代码。

CLA 存储器配置和初始化例程如下所示:

void CLA_configClaMemory (void)
{
extern uint32_t Cla1funcsRunStart、Cla1funcsLoadStart、Cla1funcsLoadSize;

EALLOW;

#ifdef _FLASH
/*将代码从闪存复制到 RAM*/
memcpy (((uint32_t *)& Cla1funcsRunStart、(uint32_t *)& Cla1funcsLoadStart、(uint32_t)& Cla1funcsLoadSize);

#endif /*_flash*/

/*初始化并等待 CLA1ToCPUMsgRAM*/
MemCfgRegs.MSGxINIT.bit.init_CLA1TOCPU = 1;

while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CLA1TOCPU!= 1)
{

};

/*初始化并等待 CPUToCLA1MsgRAM*/
MemCfgRegs.MSGxINIT.bit.init_CPUTOCLA1 = 1;

while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CPUTOCLA1!= 1)
{
};

/*选择 LSxRAM 作为 CLA 的编程空间首先配置 CLA
*成为 LSX 的主设备,然后将空间设置为程序块*/

MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1; /*RAMLS4*/

MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;
MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1; /*RAMLS5*/

MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;

/*接下来将 LSxRAM 配置为 CLA 的数据空间首先配置 CLA
*作为 LSX 的主站,并将空格设置为数据块*/

MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1; /*RAMLS0*/

MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;

MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1; /*RAMLS1*/

MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0;

MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 1; /*RAMLS2*/

MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 0;

MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 1; /*RAMLS3*/

MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 0;

EDIS;
}

//CLA 初始化
void CLA_initCpu2Cla1 (void) { /*计算 MVECT 寄存器接受的1类 CLA 上的所有 CLA 任务矢量 *完整的16位任务地址,而不是旧的0类 CLA*/上使用的偏移量 EALLOW; Cla1Regs.MVECT1 =(uint16_t)(&Cla1Task1); Cla1Regs.MVECT2 =(uint16_t)(&Cla1Task2); Cla1Regs.MVECT3 =(uint16_t)(&Cla1Task3); Cla1Regs.MVECT4 =(uint16_t)(&Cla1Task4); Cla1Regs.MVECT5 =(uint16_t)(&Cla1Task5); Cla1Regs.MVECT6 =(uint16_t)(&Cla1Task6); Cla1Regs.MVECT7 =(uint16_t)(&Cla1Task7); Cla1Regs.MVECT8 =(uint16_t)(&Cla1Task8); /*启用 IACK 指令以在软件中启动 CLA 上的任务 *用于所有8个 CLA 任务。 此外、全局启用全部8个任务(或任务的子集) *通过写入 MIER 寄存器中各自的位来实现。*/ asm (" RPT #3 || NOP"); Cla1Regs.MCTL.bit.IACKE = 1; Cla1Regs.MIER all = 0x00FF; /*为所有8个任务配置任务结束中断的向量*/ /* PieVectTable.CLA1_1_INT =&CLA1_ISR; PieVectTable.CLA1_2_INT =&CLA1_2_ISR; PieVectTable.CLA1_3_INT =&CLA1_3_ISR; PieVectTable.CLA1_4_INT =&CLA1_4_ISR; PieVectTable.CLA1_5_INT =&CLA1_5_ISR; PieVectTable.CLA1_6_INT =&CLA1_6_ISR; PieVectTable.CLA1_7_INT =&CLA1_7_ISR; PieVectTable.CLA1_8_INT =&CLA1_8_ISR;* /*在组和子组级别启用 CLA 中断*/ PieCtrlRegs.PIEIER11.all = 0xFFFF; IER |=(M_INT11); EDIS; }

CPU2的工程.map 和.cmd 文件附加在 map_cmd_files.zip 文件中以供参考。

e2e.ti.com/.../map_5F00_cmd_5F00_files.zip

此致、

Amtech

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="amtech"]向 CPU2闪存添加新代码时,CPU2 CLA 无法正常工作。[/quot]

    尊敬的 Amtech:

    您能否提供更多有关 CLA 如何无法正常工作的信息?  任务是否已开始但未完成? 还是任务永远不会启动?

    配置 CLA 存储器后、如果您在 CCS 中查看 CLA 反汇编、代码是否看起来复制正确?   

    尝试在任务中设置断点。  配置完成后、立即通过软件启动任务。 任务是否开始? (2)您能否单步执行任务、以尝试确定问题发生的地方。  

    初始化是否有任何更改? 例如、初始化外设的顺序? 如果 CLA 最后被初始化、它可能不会看到来自外设的中断边沿。

    此致

    Lori