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.

[参考译文] MSP430F169:看门狗奇怪问题

Guru**** 2522400 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/877056/msp430f169-watchdog-strange-issue

器件型号:MSP430F169
主题中讨论的其他器件:MSP-FET430UIF

您好!

我的看门狗有一个奇怪的问题。 我希望使用 PUC 重新启动程序。 为此、我将不良的密码写入看门狗。

我在 SLA049f 10.2.2中读取"当 WDT 配置为在看门狗模式下运行时、使用不正确的密码写入 WDTCTL 或所选时间间隔到期会触发 PUC "

我在'CLR &WDTCTL'行中放置一个断点、并在汇编窗口中逐步进行。 此命令写入错误的密码、并且从不在 NMI 模式中设置 wathdog。然后我认为处理器读取复位向量并跳转到'init:"

根据所有预期、处理器跳转并在0xFFFC 执行代码!! 这是 NMI 向量(Wathdog 未配置为 NMI)! 但更奇怪的处理器不使用它作为跳转地址(矢量),而是执行代码并运行...

我们非常欢迎您进行解释

Didier

#include "msp430.h"                    ;#define controlled include 文件

       名称   main                   ;模块名称

       公共 主                   ;使主标签可见
                                       ;在本模块之外
       org    0FFFEh
       DC16   init                   ;将复位矢量设置为'init'标签

       RSEG   CSTACK                 ;段的预先声明
       RSEG   代码                   ;将程序置于“代码”段中

初始化:  MOV    #SFE (CSTACK),SP       ;设置堆栈

主                              程序:NOP;主程序
//       MOV.W  #WDTPW+WDTHOLD,&WDTCTL ;停止看门狗计时器

       CLR    WDTCTL

       JMP $                          ;跳转至当前位置'$'
                                       ;(无限循环)
       结束

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

    您好!

    我调查发现:

    如果 Wathdog 由 ACLK 计时或在 SMCLK 故障后返回 ACLK、则看门狗模块无法正常工作:

    写入错误的密码不会重置 CPU、但将0xFFFC 加载到 PC 并在0xFFFC 执行代码、之后...

    我从未读过这种行为是正确的。 我希望 TI 对此采取立场

    谢谢、

    Didier



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

    抱歉、只是一个错误...

    我想说 DCOCLK、而不是 ACLK

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

    调查... 继续...

    实际上、CPU 看起来是可以的。
    当我使用 IAR 和 MSP-FET430UIF 进行调试时、如果我在与之前描述的条件相同的条件下放置一个断点、则调试链会跳转到0xFFFC。 我认为这是一个探测错误问题

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

    您好 Didier、

    我想这在某种程度上是与调试器相关的问题。  使用 JTAG 进行调试时 、它可能会干扰 CPU 行为和时序。  此外、我认为无法通过 PUC /复位进行调试、因此调试器可能会产生干扰。   

    为了测试这一点、我可能会在 MCU 自由运行的情况下对其进行测试。  我认为最简单的方法是在启动时设置/切换 GPIO、然后在尝试触发 PUC 之前设置/切换另一个 GPIO。  您可以看到、如果 PUC 正在生成并且 MCU 按预期复位。   

    谢谢、

    JD

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

    JD

    感谢您的回答。

    当我考虑调试器问题时、我在复位程序入口放置断点。 行为是不同的:CPU 工作的很好。 用于调试的 GPIO 是一种调试解决方案、但断点最终也是可以的。

    我没有考虑调试问题、因为当发生硬复位时、调试器工作正常。 但今天、我需要交付用于生产的软件、并在异常情况下进行深度测试... PUC 后的第一个周期。

    实际上、我现在可以说:如果使用 DCOCLK、请勿在 wathdog passwd 失败和逐步运行后放置断点、并且在复位后通常是可疑的

    很抱歉说英语、希望能理解


    此致、

    Didier