TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] TMS320F28069:使用带有 CLA 的复制表/扩展 CLA 程序存储器/CLA 存储器优化/ CLA 存储器不足

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1247762/tms320f28069-using-copy-tables-with-cla-expanding-cla-program-memory-cla-memory-optimization-not-enough-cla-memory

器件型号:TMS320F28069

有人能不能提供在 CLA 中运行带有复制表的程序所需的行。  

有两个任务。 任务1和任务8

这两个函数的映射如下。  

Fullscreen
1
2
3
4
5
6
UNION {
.Cla1Task1 : LOAD = FLASHE PAGE = 0, table (_task1_copy_table)
.Cla1Task8 : LOAD = FLASHE PAGE = 0, table (_task8_copy_table)
}run = RAML3 PAGE = 0
.ovly > FLASHE PAGE = 0
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

然后我执行以下操作

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
EALLOW;
Cla1Regs.MPISRCSEL1.bit.PERINT1SEL = CLA_INT1_NONE;
memcpy(&cla1Funcs_runstart, &cla1Funcs_loadstart, (Uint32) &cla1Funcs_loadsize);
Cla1Regs.MMEMCFG.all = CLA_PROG_ENABLE | CLARAM0_ENABLE | CLARAM1_ENABLE | CLARAM2_ENABLE | CLA_RAM1CPUE;
Cla1Regs.MCTL.bit.IACKE = 1;
Cla1Regs.MIER.all = 0x00FF;
EDIS;
copy_in(&task8_copy_table);
EALLOW;
Cla1Regs.MVECT8 = (Uint16) ((Uint32) &Cla1Task8 - (Uint32) &Cla1Prog_Start);
EDIS;
Cla1ForceTask8andWait();
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

但没有发生任何情况。 任务不运行。 这里出了什么问题。  

有人能至少在这里提供必要的步骤吗?  

请注意、如果没有这个复制表、CLA 运行正常。 由于程序 RAM 限制、我不得不加入复制表。  


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

    您好!

    它是否成功地将程序从闪存复制到 RAM? 我没有看到链接器 cmd 文件中提到的运行地址。

    此致、

    维纳

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

    您好

    我能够使代码正常运行。 运行链接器中提及但我在此处未包含的地址并将其添加到链接器中。  

    下面我将介绍如何帮助遇到同样的 CLA 程序存储器耗尽问题的人。  

    诀窍是、 在调用 copy_in 之前、每次我都必须对 Cla1Regs.MMEMCFG.all 位进行重新编程。 否则、C28内核无法访问 CLA 程序空间、copy_in 无法复制程序的第二部分。 。  
    以下代码显示了我已经执行的步骤。  

    任务8是第一个使用来初始化 CLA 变量的任务。 任务1是重复任务、它将 在代码中的某个位置被触发。  

    Cla1Regs.MVECT8被配置为0是因为、出于某种原因、编译器将 UNION 段放在 CLA 程序空间的开头、然后 CLA 程序的其余部分(Cla1Prog)被放置在相同的存储器区域(RAML3)中。 能不能让你明白为什么会发生这种情况。 我们如何配置、其中代码段放置在同一存储器段中。  


    此处还包含链接器代码以供参考。  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    EALLOW;
    Cla1Regs.MPISRCSEL1.bit.PERINT1SEL = CLA_INT1_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT8SEL = CLA_INT8_NONE;
    memcpy(&cla1Funcs_runstart, &cla1Funcs_loadstart, (Uint32) &cla1Funcs_loadsize);
    memcpy(&mathTablesRunStart, &mathTablesLoadStart, (Uint32) &mathTablesLoadSize); // load cla math tables for cla sine and cos functions
    EDIS;
    copy_in(&task8_copy_table);
    EALLOW;
    Cla1Regs.MVECT8 = 0;
    Cla1Regs.MPISRCSEL1.bit.PERINT8SEL = CLA_INT8_NONE;
    Cla1Regs.MIER.all = 0x00FF;
    Cla1Regs.MMEMCFG.all = CLA_PROG_ENABLE | CLARAM0_ENABLE | CLARAM1_ENABLE | CLARAM2_ENABLE | CLA_RAM1CPUE;
    Cla1Regs.MCTL.bit.IACKE = 1;
    EDIS;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    MEMORY
    {
    PAGE 0 : /* Program Memory */
    /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
    //RAML1 : origin = 0x008800, length = 0x000400 /* on-chip RAM block L1 */
    RAML3 : origin = 0x009000, length = 0x001000 /* CLA program ram
    OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */
    FLASHH : origin = 0x3D8000, length = 0x004000 /* on-chip FLASH */
    FLASHG : origin = 0x3DC000, length = 0x004000 /* on-chip FLASH */
    FLASHF : origin = 0x3E0000, length = 0x004000 /* on-chip FLASH */
    FLASHE : origin = 0x3E4000, length = 0x004000 /* on-chip FLASH */
    FLASHD : origin = 0x3E8000, length = 0x004000 /* on-chip FLASH */
    FLASHA : origin = 0x3EC000, length = 0x007F80 /* on-chip FLASH */
    //FLASHA : origin = 0x3F4000, length = 0x003F80 /* 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_P0 : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */
    FPUTABLES : origin = 0x3FD860, length = 0x0006A0 /* FPU Tables in Boot ROM */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX