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.

[参考译文] MSP430F2132:禁用看门狗例程跳转至复位矢量

Guru**** 2511415 points
Other Parts Discussed in Thread: MSP430F2132, MSP-FET

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/998851/msp430f2132-disable-watchdog-routine-jumps-to-reset-vector

器件型号:MSP430F2132
主题中讨论的其他器件: MSP-FET

我正在研究一些过去5年以上一直在运行的旧代码(自从我加入公司以来)、我注意到在我们的一个具有 MSP430F2132的电路板上、当我单步执行下面显示的 disable_watchdog 例程时、我在调试模式下看到了这些代码、 它会立即跳转至复位矢量。

使用的看门狗宏:

#define WDTCR_INIT()            {WDTCTL =(U16)(WDTPW+WDTHOLD+WDTIS1);\
                              WDTCTL =(U16)(WDTPW+WDTCNTCL+WDTSSEL+WDTIS1);}

#define KICK 安全装置()       (WDTCTL =(U16)(WDTPW+WDTCNTCL+WDTSSEL+WDTIS1))

#define disable_watchdog ()   (WDTCTL =(U16)(WDTPW+WDTHOLD+WDTIS1))

第3个参数 WDTIIS1 (所选时钟源的分频)似乎导致了问题。 如果我将其删除、它将执行预期的命令以禁用看门狗、但我的担心是、此代码已运行多年、现在才开始给我一些问题。

我使用的是 IAR MSP430 IDE、一年来、它的编译器和 IDE 已经有过几次更新(不确定这是否以任何方式相关)

  禁用看门狗宏中的 WDTIST1为什么会强制跳转到复位矢量?

KR、

Alki

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

    您好、Alki、

    我必须承认,我从未见过

    [引用 userid="486015" URL"~/support/microcontrollers/msp430/f/msp-low-power-microcontroller-forum/998851/msp430f2132-disable-watchdog-routine-jumps-to-reset-vector ]WDTPW+WDTHOLD+WDTIS1[/quot]

    停止 WDT。  通常它只是 WDTPW + WDTHOLD。  不确定设置时钟分频值的原因。

    在正常运行(不是调试)下、您看不到任何问题、对吧?

    它可能与调试器有关、尤其是在单步执行时。  

    您使用的是哪种调试器?

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

    我能够使用您的宏在 F2013上生成您的症状、其中使用的是未连接32kHz 晶体的 G2ET Launchpad。

    尝试添加:

    >BCSCTL3 |= LFXT1S_2;// ACLK=VLOCLK

    您提到了一个特定的电路板。 我想知道该板上的晶体是否发生了什么情况。 我看到故障转移在 F2设备上有点随意。

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

    您好 Dennis、  

    我理解并同意禁用看门狗的建议宏。 这是一个继承的代码、以前一直在工作、但不再处于调试模式、因此我只是试图绕过出错的地方。 在释放模式下、代码正常工作。

    我使用 以下调试器: https://www.ti.com/tool/MSP-FET

    这不是一个主要问题、看起来它以某种方式链接到调试器/调试模式、因此我现在可以使用建议的宏来解决这个问题。 感谢你的帮助

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

    大家好、Bruce、感谢您的回复。 此电路板上没有任何外部晶振、我使用的是 ACLK=VLO。 有趣的是、在多次尝试失败后、我已经能够让它运行宏、当它正常工作时、大约需要60秒的时间来单步执行该行。  

    最好的解决方案是从 disable_watchdog 中删除 WDTIs1、并且仅在 init_watchdog 宏上进行设置。

    再次感谢您花时间观看本期节目。

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

    您好、Alkiviadis、

    由于您似乎能够解决您的问题、我将此帖子的状态更改为已解决。
    如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="486015" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/998851/msp430f2132-disable-watchdog-routine-jumps-to-reset-vector/3692825 #3692825">它不是一个主要问题、看起来它以某种方式链接到调试器/调试模式、因此我现在可以使用建议的宏来解决它。 [/报价]

    浏览 MSPDebugStack_OS_Package_3_15_1_1源代码、可以看到获取/设置看门狗控制寄存器值的函数。 我不了解逻辑、但程序设置  WDTIS1可能会干扰 MSP-FET 代码在调试期间如何处理看门狗。

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

    切斯特、您好、这很可能是沿着这些线发展的东西。 查看反汇编、我可以看到它正确的 mov.w 0x5A82到 WDCTL 寄存器。

    当我单步执行代码时、它会失败(复位矢量)、但是如果我手动直接用0x5A82更新 WDCTL 寄存器、它会正常工作。