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.

[参考译文] AM5728:RTOS 中的 DSP 程序加载问题

Guru**** 2927270 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/667211/am5728-dsp-program-load-issue-in-rtos

器件型号:AM5728
Thread 中讨论的其他器件:SYSBIOS

尊敬的 TI:我有两个几乎相同的代码副本、可使用 MessageQ 测试 DSP 之间的通信  。但是、当我执行以下过程时:

1. 启动配置

2. 通过按 EVM 模块上的按钮连接到 Cortex A15_0

2. 连接到 DSP1

3. 连接到 DSP2

一切都很好

现在、我尝试为 DSP1和 DSP2执行"加载程序"。

DSP1似乎加载正常、但 DSP 卡在 timer.c 函数中。 开:

while (Timer_getCount (&tempObj)< timerCountStart + TIMERCOUNTS);

至少当我暂停处理器时、这就是它所在的位置。

问题可能出在哪呢?  这个 SYS/BIOS 启动过程是否被锁定、以便它永远不会到达主函数?  为什么它可能锁定在这里?

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    有一个类似的 问题、e2e.ti.com/.../2241182 、请检查这是否有帮助。

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

    它确实是相关的。  但是、我可以让 DSP1进入 main、但当我加载 DSP2时、它会被捕获在同一个位置。

    它指出了 GPEVM_AM572X_SiReva.ccxml、我不熟悉 IDK 与 GP 之间的差异。

    是否只需要运行一个 GEL 文件即可为 DSP 启用计时器?  我没有手动运行任何内容、只是连接到 A15_0时运行的 GEL 文件、然后我连接到 DSP、无需额外的手动运行 GEL 文件。

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

    CCS 版本和使用的 GEL 文件是什么? DSP1和 DSP2中使用什么计时器? 请尝试使用较新的 CCS 版本、例如 CCS 7.3。 在 A15上运行默认脚本后、能否运行 GEL 函数 AM572x_multicore_EnableAllCores 以查看行为是否发生变化?

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

    在上面的函数中、如果取消定时器5和6的暂停控制该怎么办:
    WR_MEM_32 (DRM_SUSPEND_CTRL_TIMER5、(DRM_SUSPEND_SRC_DSP1 << 4)| 0x1);
    WR_MEM_32 (DRM_SUSPEND_CTRL_TIMER6、(DRM_SUSPEND_SRC_DSP2 << 4)| 0x1);

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用 code composer v7.4.0
    我不确定、但当我选择 Cortex 部件并查看 GEL 文件时、它会列出:
    gpevm_am572x.gel
    AM572x_startup_common.gel
    AM572x_prcm_config.gel
    AM572x_pad_config.gel
    AM572xmulticore_reset.gel
    AM572x_EMIF_macros.gel
    AM572x_DDR_config.gel
    AM572x_PRCM_GET_Config.gel

    我不太熟悉 GEL 文件、我假设这是在我完成选择 Launch Selected configuration、然后按 connect to the cortex A15_0并按板上的按钮的过程时运行的文件。 当我选择 A15_0并转至工具和 GEL 文件时、这是列表。

    至于 DSP 使用的计时器、我不知道。 我正在使用 SYS/BIOS、并假设它正在使用/设置它们。 在我的代码中、我不会具体使用计时器。 这是由您提供的启动代码(timer.c)、由 SYS/BIOS 调用、而不是由我调用。

    我转到脚本并尝试启用所有内核脚本。 遗憾的是、响应没有变化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    愚蠢的问题、GEL 文件位于何处? 我搜索过驱动器、找不到它的位置、它的名称是否不同? 我假设您希望从 AM572x_multicore_EnableAllCores.gel 中删除上述两行代码是正确的吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rob、

    我发现问题是:默认情况下、BIOS 使用 GPTMER5来提供 BIOS 时钟模块中的时钟节拍。 GEL 的创建假设 DSP1开发人员将使用 GPTimer5、DSP2 用户将使用 GPTimer6作为时钟模块的源。 这意味着 DSP2开发人员将需要添加配置脚本以将时钟源更改为 GPtimer6。

    因此、请勿更改 GEL 文件并将以下内容添加到 dsp2 .cfg 中、让我知道这是否有效。
    /*-------------------- 勾选---------------------------------------- *
    VAR 时钟= xdc.useModule('ti.sysbios.knl.Clock');
    /*将 BIOS 时钟源更改为 GPTimer6 */
    clock.timerId = 5;

    我无法构建您的项目、但我尝试了一个简单的 RTOS hello world 示例、如果没有此更改、它可以加载到 DSP1并转到 main、但加载时卡在 DSP2上。 在.cfg 中添加这两行之后、我可以在 DSP2上毫无问题地加载和运行。 我还附上了我的 CCS 项目供您参考。

    此致、Erice2e.ti.com/.../hello_5F00_GPEVM_5F00_AM572X_5F00_C66XX.zip

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

    感谢 Eric、这确实解决了这个问题。  两个 DSP 现在都启动并允许我对其进行调试。

    谢谢。