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.

[参考译文] TMS320F28388D:使用 IPC 消息复制到 RAM boot"以启动 CM 时出现问题

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1469190/tms320f28388d-problem-using-ipc-message-copy-to-ram-boot-to-start-cm

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

工具与软件:

您好,我试图引导一个相当简单的程序到使用"IPC 消息复制到 RAM 启动"方法,我做以下操作:

1.i 使用 armhex 工具在程序中创建和数组。

2.i 修复了使用 uin8_t 类型 cmds 创建的数组,它应该是 uint16_t (在我修复之前,我得到了一个"发生了硬故障"状态)。

3.i 将固定阵列复制到地址0x00039400处的 CPU1TOCMMSGRAM1。

4.i 将 CPU1TOCMIPCBOOTMODE 配置为以下值:0x5A02640C、其状态为100Mhz freq 和200字 copy。

5.重置 CM (使用和不使用均已尝试)。

设置 CPU1TOCMIPCFLG0 flag0以开始复制。

我看到的是 CPU1TOCMMSGRAM1接收到数组,但复制没有发生,因为作为副本目标的 CM 中的地址0x20000800只填充零。

我是不是遗漏了某些部分的过程,我遵循了手册,试图检查其他帖子,但没有效果。

任何帮助都将非常感谢。

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

    您好、Michael:

    您是否有机会 了解   C2000Ware 中提供的 ipc_ex2_msgqueue_c28x1、ipc_ex2_msgqueue_cm 示例?  
    https://dev.ti.com/tirex/explore/node?node=A__ANwwURrRiqh4Fp5sl6q1qQ__C2000WARE__1kRFgrO__LATEST

    提供了基于 C28和 CM 的示例、您可以将其用作起点。

    此致、

    Ozino


    此致、

    Ozino

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

    谢谢、我让它运行起来、我遇到了一个小问题、我希望可能有人了解它、
    我使用嵌套函数创建了一个基本的延迟函数 的说明 loop ,当我加载程序到厘米,程序卡在 for 循环良好,因为在没有得到函数。

    将函数的延迟缓存到主代码后、CM 会按预期运行、是否有因优化而发生的可能性?
    此外、当我使用 CCS 将函数中包含嵌套循环的代码直接加载到 CM 中时、函数中也会正确运行。

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

    您好、Michael:

    很高兴听到您已经开始工作。 对于代码卡在 for 循环中的情况、停止调试器时正在执行什么例程? 它是否处于 driverlib 函数的 while 循环中? 还是在主代码中运行代码?

    您如何将代码加载到目标中? CM 在前还是 CPU 在前?

    此致、

    Ozino

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

    我只启动 CPU1、它通过"IPC copy msg RAM boot"加载代码。函数进入循环我编写的函数、我没有使用任何 TI 库。

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

    如果进行优化、它是否能够按预期工作?  

    如果我理解正确、那么在运行时直接通过 CCS 而不是通过 CPU1加载 CM 时、代码是否有效?

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

    一旦我实现了一个函数、我就尝试了另外几个代码、当我将与函数中相同的代码放在 main 中时、它会中断、任何推测是什么导致了这个函数?

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

    问题是、当您将代码放在一个单独的函数中时、它将不再起作用? 您是否知道您是否添加了函数原型并在#include 中包含了对它的引用。 另请仔细检查工程属性中是否列出了使用该函数的文件的路径。

    此致、

    Ozino

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

    是的,如果我通过调试器加载代码后,我连接到 target(cm)它工作,然后不改变任何东西,我把它变成一个数组(使用 ARM 十六进制),并通过"ipc msg ram copy boot"加载它不工作的原因,同样的代码不使用函数工作.

    它似乎只有循环 AS:while 和 for 的函数似乎有问题。

    编辑:

    经过一些挖掘,我发现 R14寄存器 在我把我的程序复制到 S2RAM 后没有正确的更新,并在那里分支寄存器 R14保持不变,因此当 BX r14发生时,程序跳回我的 msg ram 代码,我怎么能正确分支到一个确切的地址? 当 R1保存所需的地址并且出现问题时、我使用了 asm ("mov PC、r1")。

    编辑#2:
    对于所有遇到相同问题的人、请使用代码启动并跳转到"_c_int00"、它会设置所有寄存器、如 PC、R13、R14等、这些寄存器对于程序流至关重要。