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.

[参考译文] MSP430F6736:ADC10转换导致 WDT 复位

Guru**** 2553360 points
Other Parts Discussed in Thread: MSP430F6736

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/593024/msp430f6736-adc10-conversion-causes-a-wdt-reset

器件型号:MSP430F6736

你(们)好

我使用 ADC10来监测 AuxVcc3上电池的电压。
只要电池电压高于大约1.6V、我就会得到一个读数。

但是、一旦我开始将电池电压("电池"是可变电源)降至1.6V 以下、转换就不会发生、并且会触发看门狗计时器。
就好像 ADC10本身是由 AuxVcc3线路供电一样 是吗???

这些是我的设置:

AUXADCCTL |= AUXADCSEL_3 | AUXADCR_0;//选择 AUxVcc3作为 ADC10的输入。 18千欧负载电阻
AUXADCCTL |= AUXADC;                      //打开 ADC10的辅助电源输入

使用具有脉冲采样模式的内部 ADC osc
采样保持时间使用32clks
单次转换
在中断中获取结果。

ADC10CTL0 = ADC10SHT_3 | ADC10ON;                               // S&H=32 ADC CLKS、启用 ADC10、但保持 ADC10ENC = 0
ADC10CTL1 = 0 | ADC10SHP | 0 | ADC10SSEL_0 | ADC10CONSEQ_0;// s/w trig、脉冲采样模式、无反相、无 clk div、 调制、单通道/转换
ADC10CTL2 = ADC10RES;                                            //无预分频、10位转换结果、无符号结果、采样率无下降
ADC10MCTL0 = ADC10SREF_0 | ADC10INCH_12;                      // Ref=AVcc & AVss、通道12是辅助电源输入...而不是11!
ADC10IE |= ADC10IE0 | ADC10TOVIE;                                 //启用 ADC 转换完成中断
ADC10CTL0 |= ADC10ENC | ADC10SC;                                //采样和转换开始

我出了什么问题?

提前感谢。

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

    这是我以前没有看到过的内容、但我可以帮助您进行调试。 您能否提供有关 WDT 间隔以及您根据 ADC 转换在何处复位 WDT 的更多信息?

    此外、您能否提供一个示例、其中包含导致问题发生所需的最低代码、以便我可以在我的末尾对其进行测试?

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

    您好 Caleb...感谢您的回复(在我写我的邮件之前、我没有看到您的回复)

    但我会回答我自己的问题、让他人知道。

    上面没有提到的是 RTC_C 的使用。。。。。。这在 AuxVcc3上运行。。这本身不是问题、但是我也有一个在 RTC_C 上运行的中断、这就是问题所在。
    通过删除该中断,ADC 在 AuxVcc3上的电压完全降至零...当然,我现在有一个变通办法来为 RTC 编写数据,但我可以使用它。

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

    感谢您使用您的解决方案更新帖子。 听到您能够解决这个问题是很好的!

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

    我没有提到另外一个因素、对于 AuxVcc3上存在的任何电容、我必须等待至少4秒(在关闭辅助充电器之后、在启动 ADC 之前)。 如果我只等了3秒,我就没有解决这个问题。

    但我还意识到了特定中断 was...it 是 RTC 振荡器中断使能故障!
    那么、现在我感到困惑的是、为什么特定的中断事件会导致 WDT 启动、而 RTC_RDY 不启动?
    更令人困惑的是...如果我在 RTC_C_ISR 中的特定中断上放置一个断点、它会重复捕获 osc 故障、但不会触发 WDT!

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

    当您说"这是 RTC 振荡器中断使能故障"时、您是说它是 RTC 振荡器故障中断吗?
    您是在应用程序中使用 WDT、还是在应用程序开始时禁用 WDT?
    此外、您如何确定导致复位或器件完全复位的 WDT? 您是否已检查 SYSRSTIV 寄存器的复位源?

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

    重新创建问题需要一段时间...
    这些因素合在一起似乎导致出现问题:
    设置为间隔模式时 WDT 模式未发生看门狗计时器 mode....it 当设置为 WDT 模式时未发生!
    2. RTCCTL0使能振荡器故障。
    设置 ADC 后等待5秒、然后再读取。 但程序实际上并不会到达 ADC 被设置为获取读数的位置、只需5秒就可以让 AUXVcc3上的电容消耗。

    因此、在回答您的问题时:
    是的、我指 RTC 振荡器故障中断。
    是的、我正在使用 WDT。
    是 SYSRSTIV 值表示看门狗"密码违规"。 WDT 本身导致复位的原因是因为我在 WDT ISR 内导致 WDT 密码违规(否则它只返回错误点并且我需要复位 MSP)...。。。。 (IE I 设置 WDTCTL = 1)

    顺便提一下、想要捕获 WDT 的原因是存储导致"超时"的代码地址。 通过振荡器故障找到 WDT 触发器是无意的!

    因此、现在在读取更多内容后、我可以猜测正在发生的是"应该发生的事情"、即当我切换到欠压电池时、辅助振荡器停止工作、并导致中断、进而被 WDT 捕获。

    但是,在进一步的读数中,我注意到 WDT 有两个矢量,这取决于模式...那么,在 WDT 模式而不是间隔模式下,如何捕捉 WDT 中断?

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

    正确的是、从技术上讲、WDT 有两个矢量。 不过、如 MSP430F6736数据表(slas731.pdf)的表9所示、一个中断矢量会导致复位(0xFFFE)、另一个中断矢量是 WDT 间隔模式矢量。

    第一个矢量将始终导致器件复位(PUC)、并且在执行此操作之前无法被捕获。 捕获 WDT 的唯一方法是在间隔模式下使用它。

    此致、
    Caleb Overbay