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.

[参考译文] TMS320F28020:通过看门狗控制寄存器进行软件复位

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1132025/tms320f28020-software-reset-via-watchdog-control-register

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

大家好、

当前项目需要软件复位功能。  之前的迭代(微芯片 MCU)使用 GPIO 引脚将其自身的复位引脚拉低。  这种方法不适用于28020。  首先、GPIO 引脚在启动时为低电平、因此 MCU 永远不会脱离复位状态。  将一个反相器串联放置可实现启动、但是当尝试将引脚置为高电平时、它开始上升、然后在毫伏时挂起。

现在、我想使用 WDT 功能来进行复位。 我已经读取了几个线程、这些线程是指将 WDCR 设置为非法状态。  添加这样的行会导致代码进入杂草中。  单步执行代码、我在反汇编窗口中看到程序已在 estop 上停止、但我不确定它是如何到达的。

以下是导致错误的代码片段:

if(val1 == 9)
{
    if(resetFlag_CPU)
    {
        resetFlag_CPU = 0;

        EALLOW;
        DINT;

        myWDog->WDCR = 0x17;    // 0X17 Keeps div by in lower 3 bits and adds faulty check bit

        EINT;
        EDIS;
    }
}

在注释掉第10行(上面)后、代码工作正常。  当未注释掉时、代码看起来像预期的那样执行、它在中运行的函数完成并返回、但这是它运行到 estop 时的结果。

我打算重置处理器并在 main()顶部重新启动代码。

有人能给我一些方向吗?

谢谢、
Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="215497" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-via watchdog-control-register"]上一次迭代(微芯片 MCU)使用 GPIO 引脚将其自身的复位引脚拉低。[/quot]

    复位时、GPIO 引脚是带有弱上拉电阻的输入、因此该方法不起作用。

    [引用 userid="215497" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog-control-register"]添加一条仅会导致代码转入电子指南的行。[/quot]

    这可能与您的代码如何区分 WD 启动的复位和其他形式的复位有关。 请查看 此帖子是否 有用。

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

    您好、Haresh、

    感谢您的回答。

    在我的应用程序中、无需区分 WD 复位、BOR、POR、外部复位或任何其他复位。  因此、时序不是问题、并且没有用于检查 WDFLAG 状态的代码。  XRS 引脚上只有一个3k 上拉电阻器、无电容器。  这是电路:(当前未组装 R11)

    您对什么可能导致代码最终到达 estop 有什么了解吗?

    再次感谢、
    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 您的代码如何确定何时启动 WD 启动的复位?
    2. 是否可以附加反汇编窗口的屏幕截图?  
    3. 未连接 JTAG 连接器时的行为是否有所不同?
    4. 请注意、其中一个引导模式选择引脚(GPIO37)也是 JTAG 引脚 TDO。 JTAG 连接器是否可能会与 GPIO37输入混淆、从而导致引导模式混乱?  
    5. 请注意、存在与 WD 相关的勘误表。 以下内容是否适用?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-via watchdog/4201092#4201092"]您的代码如何确定何时启动 WD-initiated reset?

    外部生成的 RS232命令将被接收、解析、并根据收到的命令调用例程。  在这种情况下、在 WDCR 中设置非法值之前有两个步骤。  当接收到第一个命令时、代码会设置一个标志。  当接收到第二个命令时、只有在之前设置了该标志时才会启动复位。  设置非法值的实际代码显示在我的原始帖子中。

    [引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog/4201092#4201092"]您是否可以附加反汇编窗口的屏幕截图?  [/报价]

    下面是从设置 WDCR 之前到到达 estop 为止的步骤: e2e.ti.com/.../Disassembly-to-estop.pdf

    [引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog/4201092#4201092"] JTAG 连接器未连接时的行为是否有所不同?

    您可能会在这里看到一些东西。  当我独立运行目标时、它在发出 SW 复位命令后不起作用。  它似乎正在复位并正常工作。

    [引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog/4201092#4201092]\n 请注意、存在有关 WD 的勘误表。 以下内容是否适用?

    基于以上观察、我认为这不是问题。  无论如何、我不使用 OSCCLKSRC2。

    这是否有助于解释通过 XDS100v3使用 CCS 进行调试时发生的情况?

    谢谢、
    Robin

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

    Robin、

             0x3FF5F5 (包含 Estop)位于引导 ROM 中。 我认为这是 ITRAP ISR 的一部分。 您可以通过从 C:\ti\c2000\C2000Ware_4_01_00_00\libraries\boot_rom\f2802x\v2_0\rom_sources\Release 加载引导 ROM 符号(TMS320x2802x_boot_rom_Gold_V200.out)来验证这一点。 由于您的代码进入了杂草中、CPU 会执行垃圾处理。 未实施的操作码会导致您看到的 ITRAP。 无论如何、这只是您的问题的症状、而不是您的问题。 我们需要了解在连接 JTAG 连接器时代码进入杂草的原因。 当然、由于 JTAG 连接器被连接、引导模式是不同的。 连接调试器后、您现在进入调试器引导( www.ti.com/lit/SPRUI09的第170页)。 在此模式下、0xD00和0xD01中的值很重要。 我想您在那里有一些随机值、这些值会强制器件跳转到 RAM 引导并执行垃圾处理。 确保这些值为闪存引导设置正确的值(见176页)。

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

    您好、Haresh、

    连接调试器后、TRST 引脚保持高电平。 SPRUI09中的说明、这使其成为"仿真启动"。

    以下是 estop 中加载了符号的反汇编窗口:

    似乎已进入 waitboot estop。

    这是因为 EMU_KEY (0xD00)未设置为0x55AA 吗?

    我希望能够在以下两种不同的状态下运行此目标:

    1:连接仿真器、以便通过 CCS/XDS100v3进行测试和调试。

    2.在独立模式下,未连接仿真器。

    我要将硬件和软件转移给客户机、并希望为他们提供这两种运行状态、其中至少需要进行配置更改。

    我正在努力解决如何配置 EMU_KEY 和 EMU_BMODE 的问题。 文档似乎表明引导 ROM 将在0x0D00和0x0D01处写入适当的值。  我还不确定是否应该修改 OTP 密钥和 BMODE 值。  为了增加另一个级别的混淆、我不确定它是否可以通过单个配置满足两种运行状态。

    你有什么想法?

    再次感谢 Haresh、
    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="215497" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog/4201422#4201422"]根据 SPRUI09、使其成为"仿真启动"。

    正确。

    [引用 userid="215497" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog/4201422#4201422"]似乎已进入 waitboot estop。

    我之前的帖子的第一部分不正确。 为此、我深表歉意。 处理器不在 ITRAP ISR 中。 它处于 WaitBoot 模式。 如果没有仿真器(现在被称为 JTAG 调试探针、这是正确的命名规则)、ESTOP0指令会被简单地视为 NOP、因此代码将只是执行该无限循环。 连接仿真器后、ESTOP0会停止处理器、这正是您看到的情况。

    [引用 userid="215497" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog/4201422#4201422"]是否因为 EMU_KEY (0xD00)未设置为0x55AA[?]

    是的。

    [引用 userid="215497" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog/4201422#4201422]Documentation 似乎指示引导 ROM 将在0x0D01和0x0D01处写入适当的值。  [/报价]

    DOC 显示"EMU_BMODE 和 EMU_KEY 在 TRST = 0加电时由引导 ROM 自动填充。" 这是独立模式、而不是仿真模式。 对于仿真模式、您需要通过 CCS 调试器手动更新这些值。 这些只是您可以写入的 RAM 位置。

    [引用 userid="215497" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog/4201422#4201422"]我还不确定是否应修改 OTP 密钥和 BMODE[]。

    如果您只是引导至闪存、则无需。 "未编程器件上 GetMode 选项的默认行为是引导至闪存。"

    [引用 userid="215497" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog/4201422#4201422"]我不确定它是否可以通过单个配置满足两种运行状态。[报价]

    通过"两种运行状态"、如果您是指独立和仿真模式、答案是"是"。 对于仿真模式、您只需 处理这两个存储器位置即可。 请告诉我这是否有帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1132025/tms320f28020-software-reset-ovy-watchdog/4201434#4201434]"两种操作状态"、如果您是指独立仿真模式、则回答为"是"是"是"。 对于仿真模式、您只需 处理这两个存储器位置即可。 请告诉我这是否有帮助。[/引述]

    是的、这是两个状态。  当您说要处理这两个存储器位置时、您是说通过观察表达式手动操作、还是有方法通过编程方式进行操作?

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

    您可以在内存浏览器中手动更新这两个位置、然后运行代码。 在运行代码之前、这些位置需要具有正确的值。 这些位置在引导时是只读的。

    请注意、这两个位置是 PIE 矢量 RAM 的一部分

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

    感谢您的宝贵帮助、Hareesh!