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.

[参考译文] TMS320F28379D:C28x led_ex2_sysconfig 示例在硬件复位后挂起

Guru**** 2611705 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE, LAUNCHXL-F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1576978/tms320f28379d-c28x-led_ex2_sysconfig-example-hangs-after-a-hardware-reset

部件号:TMS320F28379D
主题中讨论的其他器件:SysConfigC2000WARELAUNCHXL-F28379D

您好:

我正在测试led_ex2_sysconfig示例、但遇到了一些意外行为。 如果您能回顾一下这个问题、我将不胜感激。

我的环境:

  • CCS: v12.8.0

  • C2000Ware: v5.05.00.00

  • 电路板: LAUNCHXL-F28379D

  • 项目: C2000Ware_5_05_00_00\driverlib\f2837xd\examples\dual\led\led_ex2_sysconfig_cpu*

配置:

  • CPU1 和 CPU2 工程的构建配置均已设置为 闪存中

  • _LAUNCHXL_F28379D添加到了预定义符号中。

  • 程序通过 CCS 直接加载到目标上。

问题描述:

首先、我将独立测试 CPU1 工程。 为此、我注释掉了IPC_sync()中的行main.c、如下所示。

[修改后的 main.c ]

// This is the code from the led_ex2_sysconfig_cpu* example with the IPC_sync line commented out.
#include "driverlib.h"
#include "device.h"
#include "board.h"

void main(void)
{
    Device_init();
    Device_initGPIO();
    Board_init();
    Interrupt_initModule();
    Interrupt_initVectorTable();

    // The original code would halt here, which is expected as CPU2 is not running.
    // IPC_sync(IPC_CPU1_L_CPU2_R, IPC_SYNC);

    EINT;
    ERTM;

    for(;;)
    {
        GPIO_writePin(DEVICE_GPIO_PIN_LED1, 0);
        DEVICE_DELAY_US(500000);
        GPIO_writePin(DEVICE_GPIO_PIN_LED1, 1);
        DEVICE_DELAY_US(500000);
    }
}

观察到的行为:

  1. 当我使用调试器构建并运行 CPU1 项目时、程序正确地进入for循环main()、LED 开始按预期闪烁。

  2. 但是、如果我再按 硬件复位按钮 在电路板上、电路板复位后 LED 不再闪烁。

  3. 在引导过程中、程序似乎在某个地方停止。 由于这是由硬件复位触发的、因此我无法使用调试器来确定代码卡住的位置。

其他信息:

  • 为了进行比较、我led_ex1_blinky_cpu*在完全相同的条件下测试了(非 SysConfig 版本)示例。 此工程运行良好、即使在硬件复位后、LED 也能正确闪烁。

您能否对此进行调查? 在基于 SysConfig 的led_ex2示例中、引导或初始化序列似乎存在差异、导致其在独立复位后挂起。

感谢您的支持。

 

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

    您好:

    当您注释掉 IPC_SYNC () 行并独立运行 CPU1 时、SysConfig 初始化 (Board_init ()) 仍会配置多个模块(GPIO、时钟和 IPC 结构)、假设 CPU2 也会引导并确认所有权。

    但是、在硬件复位期间、CPU2 默认保持在复位状态。 因此、即使在到达主循环之前、程序也可能会在生成的电路板或器件初始化中停止。

    请尝试在进行上述更改后重新生成代码、告知我们复位后 LED 切换是否按预期工作。

    此致、

    Masoud

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

    您好、Masoud、

    感谢您的答复。 我已找到问题的原因。

    示例工程的构建配置默认为闪存、因此我自然地期望程序存储在闪存中、并从闪存引导。

    但是、在检查 SysConfig GUI 中的 CMD 模块后、我发现该工程被配置为将程序存储在闪存中、但将启动入口点设置为 RAMM。

    即使构建配置显式设置为 RAM、也会应用此设置。

    该问题是由这个错误的程序起始地址引起的、该地址在硬件复位后阻止器件正确引导。