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.

[参考译文] MSP430F5419A:当启用中断时、微控制器冻结

Guru**** 2526700 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/675817/msp430f5419a-the-microcontroller-freezes-when-enable-interrupt

器件型号:MSP430F5419A

我们有一个收集信息的设备。 该器件可长时间不间断运行。 有时微控制器会冻结、 看门狗计时器会重新启动它。 之后、微控制器在命令权限中断时再次挂起(UCA2IE |= UCRXIE;)。 此时 GIE 被禁用。  在这种情况下重置不起作用。 只需完全关闭电源、然后再打开再重新启动微控制器。

有人有这样的问题吗?
是否有解决方案?

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

    您好、Andriy、

    您能否更深入地描述以下内容:

    • 系统频率?
    • PMMCOREVx 设置?
    • 外设
    • 系统闪存编程中是否有任何内容?
    • 问题的可重现性如何?
    • 您如何知道在执行 (UCA2IE |= UCRXIE;)行代码后该器件正在挂起?
    • 器件首次冻结代码中的哪个位置?

    此致、  

    Caleb Overbay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您基本上是说、在这种情况下看门狗无法复位芯片。

    首先、这是很不可能发生的。

    2很明显、如果确实如此、则可能存在硬件问题、最好联系 TI。

    如果我是你,我会非常确定你的主张确实是真的。 我与 MCU 合作已有很长一段时间、但我还没有遇到无法通过其看门狗进行复位的 MCU。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Caleb、

    系统频率- 3.6864MHz

    PMMCOREVx =默认情况下

    UCA0、UCA1、UCA2、UCA3、UCB0、 UCB1、UCB2、UCB3、RTC 计时器、Timer_A1、Timer_B、 WDT、带基准的 ADC

    只有信息扇区正在编程、并且只能通过 PC 的命令进行编程。 信息内存在程序开始时被读取。

    15%的器件会出现此问题、这种情况很少发生、每周或每月发生一次。

     我连接了 JTAG 调试器、并逐步介绍了这些步骤。

     因为这个问题很少见、我无法抓住。

    此致、

    Andrii  

     

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

    当您说15%受影响时、实际受影响的数字是多少? 由于此类问题很少发生、因此能够可靠地重现此问题至关重要。

    听起来您有 PC 连接到设备、这是正确的吗? 是否可以创建一些诊断代码、定期将有关正在执行的代码的信息传递给 PC。 这将有助于跟踪器件首次挂起的位置。

    您是否在应用中使用了任何低功耗模式? 如果是、您是否已验证外设的时钟源在您使用的低功耗模式下处于活动状态?

    最后、我仍然很好奇您是如何知道器件在执行(UCA2IE |= UCRXIE;)代码行后挂起的。 您能更详细地解释一下吗?

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

    您好 Caleb、

    我们制造了大约120个器件。 其中约有15人(目前)有上述问题。 最近的测试表明问题与温度有关。 它出现在环境的特定温度下。 温度变化速度可能仍然很显著、因为所有器件都经过测试、而温度从-20C 变为+55C 时未显示任何故障。 在一个器件中、它发生在44C (重复两次)时、暂挂会落在温度传感器上、该传感器在与 MSP430微控制器的 I2C 接口上工作。 来自传感器的数据每秒计算一次、并存储在 SD 卡上。 与 I2C 配合使用的子程序已根据推荐的 TI 进行了更改。 测试正在进行中。

    是的、可以将器件连接到 PC 并在固件中进行修改以发送诊断代码。

    未使用低功耗模式。

    当微控制器挂起时、我连接 JTAG 调试器并使用命令 UCA2IE |= UCRXIE 将程序从开始传递到线路;这一步之后、微控制器再次挂起并由看门狗定时器重新启动。  

    此致、

    Andrii

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

    如果我理解正确、您说 I2C 通信在高温下发生故障并导致器件停止? I2C 代码中是否有任何永久循环未设置为超时?

    此外、您能否详细说明当使用调试器单步执行并转至 UCA2IE |= UCRXIE;代码行时会发生什么。 哪些症状构成挂起? 程序计数器是否设置为意外地址? 在启用 RX 中断之前、是否正确清除了任何挂起的 RXIFG?

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

    您是否能够解决此问题或是否需要进一步的帮助?

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

    您好 Caleb、

    很抱歉耽误你的时间、我们必须确保一切都完成了。  问题在于通过 i2c 接口进行的两次读取之间的延迟。

     _bis_SR_register (GIE);
     
      U_IN_BIN = VMeasuring ();
     U_in =(U_in_bin * KUin)+ AUin;
     _DELAY_CYCLES (1400);// 0.380ms
     
     u_in_bin2 =温度测量();
     TE =(U_in_bin2*Kte+ate);

     根据公式计算的值取决于温度值并更改总延迟。

    我们消除了该延迟、并在算法中添加了检查:

    signed int TempMeasuring (unsigned int tret){
     while (UCB2STAT 和 UCBBUSY);
       UCB2CTL1 |= UCSWRST;
       UCB2I2CSA = 0x48;
       UCB2CTL1 &=~UCSWRST;
       UCB2CTL1 |= UCTR + UCTXSTT;
       UCB2TXBUF = 0x01;
       while (!(UCB2IFG&UCTXIFG));
       UCB2CTL1 |= UCTXSTP;
       while (UCB2STAT 和 UCBBUSY);
       UCB2CTL1 &=(~UCTR);
       UCB2CTL1 |= UCTXSTT;
       while (!(UCB2IFG&UCRXIFG));
       tret = UCB2RXBUF;
       tret = tret << 8;
       UCB2CTL1 |= UCTXSTP;
       while (!(UCB2IFG&UCRXIFG));
       tret |= UCB2RXBUF;
      return (signed int) tret;  

    问题已解决。

    祝你度过美好的一天!

    Andrii