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.

[参考译文] TMS320F28P650DK:在将 Cla1Prog 分配给 RAMLS8_CLA 或 RAMLS9_CLA 时、CLA 不工作

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1312233/tms320f28p650dk-the-cla-is-not-working-when-assign-cla1prog-to-ramls8_cla-or-ramls9_cla

器件型号:TMS320F28P650DK
主题中讨论的其他器件:C2000WARE

尊敬的 专家:

我有一个  TMS320F28P65X controlCARD。 我正在测试  cla_ex4_pwm_control 的示例并将其构建在 CPU1_FALSH 中。 一切都很正常、但当我 将 Cla1Prog 从 RAMLS0分配 给 RAMLS8_CLA 或 RAMLS9_CLA 时、CLA 不工作。 跟踪 SW 后、我发现  board.c 中的 memcpy 函数不能正常工作。 会有很多日期丢失。  你可以帮助去询问什么是问题?

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MEMORY
{
BEGIN : origin = 0x080000, length = 0x000002 // Update the codestart location as needed
BOOT_RSVD : origin = 0x000002, length = 0x0001AF /* Part of M0, BOOT rom will use this for stack */
RAMM0 : origin = 0x0001B1, length = 0x00024F
RAMM1 : origin = 0x000400, length = 0x000400
RAMD0 : origin = 0x00C000, length = 0x002000
RAMD1 : origin = 0x00E000, length = 0x002000
RAMD2 : origin = 0x01A000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0x8000. User should comment/uncomment based on core selection
RAMD3 : origin = 0x01C000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0xA000. User should comment/uncomment based on core selection
RAMD4 : origin = 0x01E000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0xC000. User should comment/uncomment based on core selection
RAMD5 : origin = 0x020000, length = 0x002000 // Can be mapped to either CPU1 or CPU2. When configured to CPU2, use the address 0xE000. User should comment/uncomment based on core selection
RAMLS0 : origin = 0x008000, length = 0x000800
RAMLS1 : origin = 0x008800, length = 0x000800
RAMLS2 : origin = 0x009000, length = 0x000800
RAMLS3 : origin = 0x009800, length = 0x000800
RAMLS4 : origin = 0x00A000, length = 0x000800
RAMLS5 : origin = 0x00A800, length = 0x000800
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* These arguments were used when this file was generated. They will be automatically applied on subsequent loads
* via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
* @cliArgs --device "F28P65x" --package "256ZEJ" --part "F28P65x_256ZEJ" --context "CPU1" --product "C2000WARE@5.01.00.00"
* @versions {"tool":"1.18.0+3266"}
*/
/**
* Import the modules used in this configuration.
*/
const cla = scripting.addModule("/driverlib/cla.js", {}, false);
const cla1 = cla.addInstance();
const memcfg = scripting.addModule("/driverlib/memcfg.js");
/**
* Write custom configuration values to the imported modules.
*/
cla1.$name = "myCLA0";
cla1.cpuint_CLA_TASK_1 = false;
cla1.cpuint_CLA_TASK_2 = false;
cla1.cpuint_CLA_TASK_3 = false;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Cla1Prog 是 RAMLS0。

Cla1Prog 是 RAMLS8_CLA

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

    我们没有  针对 RAMLS8和 RAMLS9的 Cla1Prog 设置、因为它们始终固定为 CLA 的程序存储器(不能用作数据)。  另请注意、memcpy 由 CPU 完成、并且 CPU 的 LS8和 LS9 RAM 的地址不同。 请参阅器件数据表中存储器映射表的以下快照。

    此致、

    维维克·辛格

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

    您好、Vivek、

    在数据表中、LS8和 LS9可用作 CLAProg。  但它不起作用。

    最好的地区

    洪瑞安

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

    您好、Vivek、

      我使用了 F28P65构建配置"CPU1_RAM"来测试演示代码 CLA_ex4_PWM_CONTROL。   当将 Cla1Prog 分配给 RAMLS8_CLA 或 RAMLS9_CLA 时、我无法使 CLA 工作。 从内存转储中、看起来 CLA 程序代码未加载到 LS8/LS9中。  

    您能否再次确认 f28p65是否支持将 LS8/LS9作为 CLA 程序 RAM 还是只是数据表的拼写错误? 如果 f28p65支持、SDK 或其他组件中是否有任何错误?

    此致

    安德烈

     

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

    该功能受支持、但需要在 CPU 地址映射处加载进入 LS8和 LS9的 CLA 代码并从 CLA 地址映射运行。 我正在检查我们是否有此方面的示例。 会在1-2天内回来的。

    维维克·辛格

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

    您好!

    在最新的 C200Ware 中、我们发布了此用例的示例- CLA_ASIN_LS8_9

    下面是它对 memcpy 的作用-  

     memcpy (((uint32_t *)(&Cla1ProgRunStart + 0x1E000)、(uint32_t *)&Cla1ProgLoadStart、
    (uint32_t)&Cla1ProgLoadSize);

    希望这对您有所帮助。

    此致、

    维维克·辛格

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

    作者:Vivek、

      谢谢。  从手动导入工程 /driverlib/f28p65x/examples/c28x/cla

    Resource Explorer 未将此项目显示为我们最初未找到该项目的原因。

    可以手动导入工程。 我们会在下一版本中修复它吗?

    此致

    安德烈

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

    尊敬的 Vivek:

    我已检查  CLA_ASIN_LS8_9。  在闪存模式下运行时、CLA 仍然不工作。

    此致、

    洪瑞安

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

    作者:Vivek、

      该演示项目仅在 RAM 模式下工作。  我  在  MemCfg_initSections 行设置断点(MEMCFG_SECT_MSGCLA1TOCPU);

    RAM 模式。

    闪存模式。

    必须在切换模式之前复位器件才能清除 LS8内容。  

    闪存模式下的 memcpy()函数不起作用。 安全性? 或是否有丢失?

    此致

    安德烈

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

    好的、我们会检查一下、1-2天后再与您联系。

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

    您好!

    您是否能够替换如下代码中的 memcpy 函数调用、然后尝试执行。  

    memcpy (((uint32_t *)(&Cla1ProgRunStart +(0x1E000/2))、(uint32_t *)&Cla1ProgLoadStart、 (uint32_t)&Cla1ProgLoadSize);

    维维克·辛格

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

    作者:Vivek、

       将 CLA 运行地址从 (uint32_t *)(&Cla1ProgRunStart +(0x1E000))更改为 (uint32_t *)(&Cla1ProgRunStart +(0x1E000/2))是可行的。

    但我有疑问、 &Cla1ProgRunStart +(0x1E000)应为0x22000、这是 LS8的起始地址。  在存储器重映射前、该0x22000是 LS8地址。 我们为什么需要对偏移量0x1E000进行分频?

    此致

    安德烈

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

    作者:Vivek、

       更多输入、更改  memcpy ((uint32_t *)(0x22000)、(uint32_t *)&Cla1ProgLoadStart、(uint32_t)&Cla1ProgLoadSize);也适用。

    编译器问题 是否生成错误的地址&Cla1ProgRunStart? 您能再次确认吗?

    此致

    安德烈

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

    您好!

    Cla1ProgRunStart 为0x4000、因为这是该存储器的 CLA 地址、对于复制、我们需要使用 CPU 地址、即0x22000 (0x4000 + 0x1E000)。 这就是我们必须将0x1E000添加到运行地址的原因。  这不是编译器问题。

    维维克·辛格

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

    --对先前未回答的查询之一进行更新。  

    您好!

    然而我有问题, &Cla1ProgRunStart +(0x1E000)应为0x22000,这是 LS8的起始地址。  在存储器重映射前、该0x22000是 LS8地址。 为什么需要对偏移量0x1E000进行分频?

    这是因为当我们向指针添加某些内容时、它会添加指针大小的倍数、因此在错误情况下、它会添加地址值的两倍(即2x1E000)。 因此、我们将该值替换为1E000/2。  

    以下是我们在更新后的示例中将提供的功能、其中包含针对失调电压的拼写、以便它添加正确的失调电压。

        memcpy ((uint32_t *)((uint32_t)&Cla1ProgRunStart +(0x1E000U))、(uint32_t *)&Cla1ProgLoadStart、

              (uint32_t)&Cla1ProgLoadSize);