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.

[参考译文] TMS320F28377D:CPU2从闪存引导- CPU2中的中断不起作用

Guru**** 2595800 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/668621/tms320f28377d-cpu2-boot-from-flash---interrupts-in-cpu2-do-not-work

器件型号:TMS320F28377D

我使用 controlSUITE 示例项目"blinky_dc_cpu01"和" blinky_dc_cpu02"来测试 controlCARD 评估板上 CPU2从闪存引导的情况。  使用_standalone predefine 编译 CPU1代码时、从闪存引导正常(两个 LED 在未连接调试器的情况下为电路板供电时闪烁)。  但是、当我在 CPU2代码中添加中断时、这些中断在 CPU2中不起作用。  后台循环中的 CPU2代码仍然正常工作。  中断在 CPU1代码中确实可以正常工作。  

注:1)我已验证  、当我 通过调试器运行两个内核时、CPU1和 CPU2代码中的中断都可以正常工作(不 使用_standalone pre-define 编译代码)。

非常感谢你的帮助。

Zubair Hameed

软件架构师- GE Aviation

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

    您好、Zubair、

    如何检查 CPU2上的中断不起作用? CPU 执行是否进入 ISR? 哪个存储器段 ISR 也被放置? 在 CPU2代码中添加中断后、您是否看到 XRSn 引脚切换?

    此致、

    Vivek Singh

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

    我正在从事与 Zubair 相同的项目、并将尝试回答您的一些问题。

    我们使用控制卡上的 LED 来检查 ISR 是否正在运行。 代码与闪烁示例项目类似、每次执行时(在 ISR 或后台循环中、具体取决于测试)都会递增一个变量、并且在经过设定数量的计数后、切换控制 LED 的 GPIO。 每个内核都有一个此代码的副本、并设置为控制两个 LED 中的一个。

    core1的 LED 在所有测试中均按预期工作。

    如果闪烁代码在后台循环中、则 core2的 LED 按预期工作。 如果将闪烁代码放置在 ISR (在本例中为 PWM5)中、则在使用调试器时运行良好、但在从闪存(调试器断开连接)运行时、LED 不会闪烁。 这导致我们认为 CPU 出于某种原因未执行或进入 ISR。

    我不确定 ISR 所处的存储器部分。 除非编译器将 ISR 代码放置在其他位置、否则所有 ISR 代码都集中在闪存中、而不会强制段。 如果我错过了这个问题、请告诉我。

    观察示波器上的 XRSn 引脚、它不会切换、并且一直保持高电平。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Benjamin、

    感谢您的详细回答。 当连接到调试器时、您是否在运行代码之前加载代码? 或者您只需发出调试复位、然后单击 CCS 的运行按钮? 此外、是否有方法来确认当在 ISR 中放置闪烁代码时代码执行跳转到您的应用程序?

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

    在调试和独立测试中、代码都加载到闪存中。 在调试中、CCS 的"run"按钮用于启动代码运行。 在独立测试中、在加载代码后对电路板进行下电上电。

    为了确保 core2中的代码同时在调试和 ISR 测试中运行、我添加了第二个 GPIO、该 GPIO 始终在后台循环中切换、并使用示波器进行监视。 在这两个测试中、GPIO 始终切换。

    值得注意的是、当使用_standalone 预定义编译代码时、唯一的变化是在 core1中添加函数、以便在初始化期间通过 IPC 启动 core2。 在调试模式下测试(不带_standalone)时、此函数将从构建中排除、并且必须通过运行按钮启动 core2。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Benjamin、

    [引用]值得注意的是、当使用_standalone 预定义编译代码时、唯一的变化是在初始化期间添加 core1中的函数以通过 IPC 启动 core2。 在调试模式下测试(不带_standalone)时、此函数将从构建中排除、并且必须通过运行按钮启动 core2。 [/报价]

    没错。 该代码用于引导 CPU2、由于在这两种情况下都看到 GPIO 切换、这是后台代码的一部分、因此 CPU2按预期引导。 这真的很奇怪。 您是否尝试过任何其他中断(例如定时器中断)而不是 PWM5?

    Vivek Singh

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

    在做了更多的测试之后、我发现了问题的根源、事后看来这一点很明显。

    基本原因是 core1在完成初始化之前启动 core2、然后将外设所有权传递给 core2。 因此、core2在运行其初始化代码时没有 PWM5外设的所有权、并且无法设置中断、因此有道理它没有运行。

    将 core1中的 IPC 启动代码移至初始化结束可解决该问题。 因此、ISR 在独立模式下在两个内核中运行。

    我们在调试模式下运行代码时未发现问题的原因是我们手动启动了 core1、然后启动 core2、从而在 core2启动之前为 core1上的初始化留出了足够的时间完成。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、CPU1需要在启动 CPU2之前完成所有器件初始化(向 CPU2分配所需的资源)。 我很高兴这个问题得到解决。

    此致、

    Vivek Singh