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.

[参考译文] TMS320F28379D:无法在 CPU2 CLA 上从闪存运行 CLAmath

Guru**** 2539500 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1410272/tms320f28379d-not-able-to-run-clamath-from-flash-on-cpu2-cla

器件型号:TMS320F28379D
Thread 中讨论的其他器件:C2000WARE

工具与软件:

今天、我有一个双核 Delfino。  在 CPU2上、我将  在第二个内核的 CLA 上使用 CLAmath (例如.g.CLAsinPU 和 CLAcosPU)。  这在 RAM 中运行良好、但当从闪存运行时、似乎会失败、即使其余的 CLA 和 CPU 程序在该内核上运行良好。   我有一个调试代码可以将其隔离到 CLAmath 的这两个函数调用中。  "你以为我赢了吗?  下面是我一直在尝试调整的代码中的一些关键部分。  提前感谢!!

链接器文件包括以下内容

CPU_CLA_LS_DATA : origin = 0x00A000 length = 0x001000 //CLA data space

CLA1mathTables : > CPU_CLA_LS_DATA, PAGE = 1//was page=1

CLA1mathTables : LOAD = FLASHL,
RUN = CPU_CLA_LS_DATA,
RUN_START(CLA1mathTablesRunStart),
LOAD_START(CLA1mathTablesLoadStart),
LOAD_SIZE(CLA1mathTablesLoadSize),
PAGE = 1, ALIGN(8)

存储器配置

    //local shared RAM master sel register: value 0==CPU, 1==shared between CPU and CLA
    MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 1;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 1;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;

    //local shared memory data/prog control register: value 0==CLA data memory, 1==CLA program memory
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 1;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 0;

在 main()之前定义的变量

extern uint16_t CLA1mathTablesLoadStart;
extern uint16_t CLA1mathTablesRunStart;
extern uint16_t CLA1mathTablesLoadSize;

内存分配

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

    您好、Ryan、

    只是为了验证、您是否会将 CLA 程序从闪存复制到主 C 代码中的 RAM、如下所示?

    此外、对于 F2837xD 器件、数据 ROM 中提供了 CLA 数学表、因此您无需将这些表加载到闪存中并将其复制到 RAM 中。 您 无需在为定义的示例中包含示例链接器 cmd 文件的任何行! (CLA_MATH_TABES_IN_ROM)、因为这只适用于较旧的器件。 我建议使用 C2000ware 提供的 f2837x_cla_c_lnk.cmd 文件、并 在工程的预定义符号中定义 cla_math_tables_in_rom=1、这应该会正确设置您的配置。

    此致、

    Delaney

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

    谢谢!  这解决了我的 CLA TRIG 函数问题。  我参考了  f2837x_cla_c_lnk.cmd 、以便更新我的链接器文件。 当我最初研究 cla_cospu 示例项目时、不是很欣赏在 ROM 中提供了 CLA 数学表、但现在我在您进行清楚说明后更好地了解该示例。  

    最大的问题是我没有 使用 memcpy ()函数将 CLA 程序从闪存复制到 RAM。  这也是您发现的非常关键的部分。   

    感谢您的快速响应和详尽的回答。  做得很好!!