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.

[参考译文] TMS320F280049M:使用看门狗执行软件复位操作的正确方法

Guru**** 2535440 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/604541/tms320f280049m-correct-way-to-perform-software-reset-operation-using-watchdog

器件型号:TMS320F280049M

您好!

我想问、触发软件看门狗复位的正确过程是什么。 按照示例 watchdog_ex1_service.c、这些是我 在项目中执行的步骤:

  1. Device_init()中-禁用了看门狗
  2. SYSCTL_setWatchdogMode (SYSCTL_WD_MODE_RESET);-设置看门狗以生成复位信号
  3. SYSCTL_serviceWatchdog();-复位看门狗计数器
  4. SYSCTL_enableWatchdog();-启用看门狗
  5. SYSCTL_serviceWatchdog();-在主循环中,复位看门狗计时器  

然后、

a)     在我的项目中 、当我调用我的复位代码时:

 

EALLOW;

WdRegs.WDCR.ALL = 0x0000;       

EDIS;

 

 结果是调用了以下函数:

 静态空 Interrupt_illegalOperationHandler (空)

   //

   //出现了问题。  CPU 试图执行一个非法的

   //指令,生成非法指令陷阱(ITRAP)。

   //

   ESTOP0;

   for (;;)

   {

       ;

   }

 

然后:

然后、MCU 在未定义状态下挂起、肯定未正确重置。

b)     在示例 watchdog_ex1_service.c 中、当我 将 SYSCTL_WD_MODE_INTERRUPT 更改为 SYSCTL_WD_MODE_RESET、然后当触发看门狗超时时、结果再次为:

 

那么、我的问题是、使用看门狗从代码复位器件的正确方法是什么。 我 是否错过了什么?

 

非常感谢、Marek

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

    我认为 WD 复位工作正常、但复位后 CPU 再次启动、并尝试从没有有效代码的位置执行代码。 由于您已连接仿真器、因此器件处于仿真启动状态、您需要检查其中的启动设置。 请参阅器件文档中的仿真启动部分。

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

    Vivek、

    您似乎是对的。 在仿真器断开连接的情况下、复位后 CPU 表现正常(基于我使用的 LED 的正确闪烁)。 但是、您能否指出我应该检查哪些引导设置以在连接仿真器的情况下保持此行为?

    非常感谢、Marek

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

    请检查地址0xD00处的值。 该值应为0x5AFFFFF、以用作独立启动。 您可以在启动 WD 复位之前写入此值。

    请告诉我们这是否可行。

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

    Vivek、

    我检查了0xD00处的值。 该值与0x5AFFFFF 不同。

    您能否指出、我应该更改哪种设置以获得正确的值并作为独立启动工作?

    非常感谢、

    Marek

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

    在发出 WD 复位信号之前、在0xD00位置写入0x5AFFFFF。

    Vivek Singh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vivek、
    在0xD00写入0x5AFFFFF 无效、行为相同-处理器未正确重置、在未定义状态下挂起。

    Marek