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.

[参考译文] MSP430F5659:锁定在LPM3中,是否为勘误表?

Guru**** 2540830 points
Other Parts Discussed in Thread: MSP430F5659, MSP430F6659, MSP430F5342

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/576693/msp430f5659-gets-locked-in-lpm3-is-it-an-errata

部件号:MSP430F5659
主题中讨论的其他部件: MSP430F6659MSP430F5342

大家好,

通过使用使用MSP430F5659的新器件, 我们遇到了一个问题:在某些情况下,微控制器无法从LPM3唤醒。 完成勘误后,我们找不到任何解释这一点的信息,只是它与PMM15类似。 我们的范围缩小到,在ISR期间,同一计时器的计时器IFG变为真,退出ISR并返回到LPM3后,没有重新进入ISR。 我们通过在需要时手动清除和设置IFG来解决此问题。 这是错误编号1,由于现在发生的情况,我无法再确定。

这让我想到了错误2。 当前代码冻结的方式将不再为任何ISR或DMA提供服务,甚至不会通过 看门狗重置

在测试过程中,我们发现了一个案例,它将卡在LPM3中。 代码具有2个计时器的ISR,两者均为32kHz时的TB0,一旦设置了计时器,ISR将在计时器之间交替设置下一个超时波段(一个带有mA周期,另一个具有较短的操作超时)。 同时,主代码运行其他操作,这些操作将控制权授予ISR。 在某个时候,ISR将返回,当它重新进入LPM3时,它将不会唤醒。 我们尝试使用DMA,其它中断和监视器,但当它进入这种状态时,没有任何工作。

问题似乎消失的原因是关闭了SVS。 我们仅使用SVSH,并关闭SVSL和SVM。 从自动(完全性能/正常)更改为手动也似乎起了作用。

该错误与代码极其相关,因此我们假定时间安排非常重要。 我们正在努力将代码减少到我们可以上传的内容,但至少需要几天时间。

是否有人遇到了这样的错误?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我发现这个帖子似乎很相关...
    e2e.ti.com/.../30.4147万
    但没有得到答复
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Agustin,
    我可能必须尝试复制此代码,您是否有可以共享的代码?
    此外,您是否在调试,freerun或两者中都看到了此行为?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    很抱歉耽误了时间,但现在是假期了。

    我们正在努力将问题与我们的代码隔离开来,以便更容易地查看(我们有 一个包含 许多外设的复杂设备)。  我今天尝试上传。

    除调试外,所有情况下都发生此问题。 我的猜测是,切换到LPM3是必要的,这样才能实现这一目标。

    当我们更改SVSH模式时,它将停止,至少在 我们的设置中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您将SVSH模式更改为什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们在自动,全性能/正常模式下使用SVSH。
    当我们更改为手动时,它工作正常。
    我想纠正看门狗似乎工作正常的问题,我们在这些测试中可能出现了错误。 但不提供中断服务。
    简化代码所需的时间更长,对代码的更改会使错误消失...因此,我们每次都必须返回并引入其他更改。

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

    你好

    我希望附加一个IAR 6.50 1项目,该项目至少生成一个错误的特定案例。

    它看起来很像PMM15的新条件。 我们仍在努力寻找更多信息。

    请告诉我您是否可以重现该错误。

    此致

    代码由main.c,events.c和timer.h组成

    主要c

    主(void):

    执行一些初始化(InitPeripherals();)并将SVSH设置为自动,完全/正常

    启用 32kHz计时器的中断 (TB0CCTL_bit[TB0_Period].CCIE = true;)-此中断每30.5us发生一次,因为它在ISR的Events中重置。c

    然后进入for (;;)循环,其中:

    设置监视程序

    设置具有可变持续时间(取决于I)的SMCLK (TA0CCR[TA0_GEN]= TA0R + I;)的计时器

    等待计时器  

    在该模式下,在WFP 5.7 上转到LPM3跟踪时间,后台的中断将唤醒它

    e2e.ti.com/.../Test-MSP430F5659-20170307-1300.zip</s>2017.0307万 1300.

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

    Agustin,

    我查看了您的代码,发现了一些我想与您讨论的内容。

    在"main.c"文件中,在main函数中输入LPM3。

    您使用的代码行是,

    __low_power模式3(); 

    在instrinsics.h.中定义 此宏是,

    #define __low_power mode_3() \
    (__bis_sr_register (__sr_gie. \
    |__SR_CPU_OFF \
    |__SR_SCG0 \
    |__SR_SCG1)) 

    这使我们想到"events.c"。 在此文件中,您可以使用以下函数:

    __LPM_OFF_ON_EXIT(); 

    您#将此函数定义为,

    #define __LPM_OFF_ON_EXIT()__BIC_SR_REGISTER_ON_EXIT (__SR_CPU_OFF |__SR_SCG1 |__SR_OSC关闭) 

    这与退出LPM3模式所需的功能不一致。 您正在使用不需要的_SR_OSC关闭,并且未使用_SR_SCG0。

    退出LPM3的正确功能是:

    __BIC_SR_REGISTER_ON_EXIT (__SR_CPU_OFF) \
    |__SR_SCG0 \
    |__SR_SCG1) 

    以下宏已提供,可用于避免上述问题。

    /*在SR */
    
    #define LPM0_bits中使用位4-7编码的低功耗模式 (CPUOFF)
    #define LPM1_Bits (SCG0+CPUOFF)
    #define LPM2_bits (SCG1+CPUOFF)
    #define LPM3_bits (SCG1+SCG0+CPUOFF)
    #define LPM4_bits (SCG1+SCG0+OSCOFF + CPUFF)
    
    
    #define LPM0 __bis_sr_register (LPM0_bits) /*输入低功率模式0 */
    #define LPM0_exit __BIC_SR_REGISTER_ON_EXIT (LPM0_bits)/* Exit Low Power Mode 0*/
    #define LPM1 __bis_sr_register (LPM1_bits) /*输入低功率模式1 */
    #define LPM1_EXIT __BIC_SR_REGISTER_ON_EXIT (LPM1_bits)/* Exit Low Power Mode 1*/
    #define LPM2 __bis_sr_register (LPM2_bits) /*输入低功率模式2 */
    #define LPM2_EXIT __BIC_SR_REGISTER_ON_EXIT (LPM2_bits)/* Exit Low Power Mode 2 */
    #define LPM3 __bis_sr_register (LPM3_bits) /*输入低功率模式3 */
    #define LPM3_EXIT __BIC_SR_REGISTER_ON_EXIT (LPM3_bits)/* Exit Low Power Mode 3*/
    #define LPM4 __bis_sr_register (LPM4_bits) /*输入低功耗模式4 */
    #define LPM4_EXIT __BIC_SR_REGISTER_ON_EXIT (LPM4_bits)/*退出低功耗模式4 */ 

    因此,您只需使用LMP3; 进入LPM3模式,并使用LPM3_EXIT退出。

    此外,如果要在启用中断的情况下进入低功耗模式,如  67页的MSP430x5xx和MSP430x6xx用户指南中所示。

    //输入LPM0示例
    __bis_sr_register (LPM0_bits + GIE);//输入启用中断的LPM0
    //退出LPM0中断服务例程
    __BIC_SR_register_on_exit (LPM0_bits);//退出LPM0
    //输入LPM1示例
    
    中断_bis_sr_register (LPM1)_
    退出/启用的PM1 //退出LPM1
    //输入LPM2示例
    __bis_sr_register (LPM2_bits + GIE);//在启用中断的情况下输入LPM2
    //退出LPM2中断服务例程
    __BIC_SR_register_on_exit (LPM2_bits);//退出LPM2
    //输入LPM3示例
    _退出LPMIC_PM3中断_退出LSR_register_ON_EXIT
    
    3;在启用时退出PPMIC_LPM3 //退出LPM3
    //输入LPM4示例
    __bis_sr_register (LPM4_bits + GIE);//在启用中断的情况下输入LPM4
    //退出LPM4中断服务例程
    __BIC_SR_register_on_exit (LPM4_bits);//退出LPM4
    

    请告诉我们这是否能解决问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    感谢您的参与。
    我们不清除SCG0,因为我们不想使用FLL,而OSC关闭只有一个宏,但不应该有什么区别,因为它已经被清除,我们只是再次清除。
    退出LPM3时,保持SCG0设置是否错误? 我们经常这样做...

    尽管如此,我们尝试将宏更改为您建议的宏,但我们仍然有相同的行为。

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

    不清除SCG0意味着从技术上讲,您不会退出LPM3,这取决于LPM模式和活动模式的定义。

    不清除此位意味着保持FLL处于禁用状态,如 用户指南 第167页所述,

    '当FLL操作被禁用时,DCO继续以当前设置运行。 由于它不是由FLL稳定的,温度和电压变化会影响操作频率。 有关电压和温度系数,请参阅特定于设备的数据表,以确保可靠运行。"

    我正在测试代码。 您提到您所面临的问题在调试模式下未显示?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在调试模式下不会发生这种情况,我猜是因为它不是真正进入LPM3
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Agustine,

    我已经测试了您的代码并修改了一些内容以找出导致问题的原因。

    我做的第一件事是添加,

    P6OUT_Bit.P6OUT4 = 1;
    __DELAY周期(200万);
    P6OUT_Bit.P6OUT4 = 0; 

    到for (;;)之前的main函数。

    这有助于我使用LED来检测当我们遇到卡滞时,看门狗计时器是否能够重置设备。

    每次看到代码停止工作时,看门狗计时器重置设备大约需要16秒。

    接下来,我验证了TimerB中断。 我对for (;;)循环中与TimerA相关的代码行进行了注释,以确保我们可以进入低功耗模式,每30次退出一次。 这也起了作用。

    最后,我一起测试了两个计时器。 原始代码为TimerA提供了60个时钟到80个时钟的周期。 在4 MHz输入时钟时,TimerA需要15到20 us才能超时。

    我尝试的第一件事是以恒定的60个周期来尝试代码。 这很有效。 所以我运行了多次测试,看看TimerA周期会导致代码停止退出LPM3模式。 我达到的值为68个时钟,作为TimerA的期间。

    我目前怀疑这可能是勘误表PMM15。 如果计时器设置到计时器超时之间的时间接近30 us,则可能是PMM15所述的时间。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    很高兴您能够重现此问题。
    是的,WDT可以正常工作。 我在上面提到过,我们最初可能有一个错误。

    所述的PMM15不应在使用的SVSH配置中出现,因此如果不是不同的问题,至少这将是一种新情况。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    阿奎斯顿,

    我刚刚对范围进行了两次检查,范围上的TimerA超时显示超过28个,i = 70。 29 us是基于PMM15允许的最大值。 但是,您对SVSH设置的回答是正确的。 我会研究这是一个新情况,还是另一个问题。 现在有两个选项:

    1.使用值小于70 (精确到67)的TimerA。

    2.使用超时时间较长的TimerB。 我以50个用户为例,这个问题已经不再存在。

    如果这解决了问题,请单击验证答案

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

    该问题出现在使用TimerB和异步输入的新设备中,因此更改或限制时间将不起作用。 我们确实需要知道这是新的勘误表还是新的条件,以及在任何一种情况下是什么条件,以便我们可以使用变通办法或避免勘误表。

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

    您好,Agustin,

    您使用的是哪种设备版本?

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

    您好,Cameron:

    我们最初在以下方面看到了这种行为:
    MSP430F5659 (ZQW封装)

    然后我们将其复制到:
    MSP430F5659 (PZ封装)
    MSP430F6659
    MSP430F5342  
     
    标记如下所示。 我无法从他们那里找到如何识别修订版本。

    46AG35TG4.
    MSP430F5659

    MSP430F5342
    TI 571 K
    AXLOG4.

    MSP430 TM
    F6659
    2BC41PT A
    TI G1

    MSP430F5659
    62AP5LTB
    TI G1

    此致,
    Agustin

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

    MSP430F5659修订版B (ZQW封装)
    未指定MSP430F5659修订版,我假设是A?(PZ封装)
    MSP430F6659修订版A
    MSP430F5342修订版K
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    您是否能够找到有关此问题的更多信息??

    此致,

    Agustin

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

    Agustin,

    我还能够在MSP430F6659上重现此问题。 您提到手动模式下的SVS消除了此错误吗? 我想接下来测试不同的SVS模式。

    您能否分享您在代码中所做的更改,以消除此问题?

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

    当我们将SVSH更改为MANUAL (SVSMHACE = 0)时,无论是完全还是正常,似乎都不会发生这种情况。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Agustin,

    我今天做了更多的测试,我注意到即使在SVSMHACE =1的情况下,如果我没有在主for (;)循环中切换引脚,也不会发生该问题。正如您所提到的那样,我们所看到的问题非常依赖于代码。 我尝试清除SVSMHACE位,但未出现问题。 我将把该项目发送给MSP系统应用团队进行进一步测试。 系统应用程序团队的结果出来后,我会尽快回复您。

    再次感谢您耐心等待。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,当您更改时间时,它可能看起来是固定的。 因此,我们进行了一次扫测,我认为你已经改变成了一个固定的延迟。
    请告诉我这是怎么做的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Agustin,

    只是想登记入住,让您知道我们仍在处理此问题,一旦找到答案,我将尽快回复您。

    感谢您的耐心等待。

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

    谢谢!
    同时,我们正在禁用SVSH的自动更改。 这似乎可以避免这个问题。
    如果您有任何进展,请告诉我。
    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Nima:
    有关此问题的任何消息?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Agustin,

    我已联系我们的系统应用程序团队,他们目前正在处理该问题。 今天上午,我还让我们的SVS专家了解了这个问题。 他们会回复我,一旦我发现新信息,我会立即通知您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Agustin,

    实际上,表和勘误表说明之间存在差距。 最初的根本原因分析表明,您必须使用它的手动模式。
    我们将在内部讨论此问题,并在达成共识后,与您联系并做出最终决定。
    到目前为止,非常感谢您的报告! 非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dietmar,您好!

    感谢您的更新。
    因此,我理解勘误表和相关的PMM15Check()缺少一些条件,避免此问题的方法是不使用自动SVSH。

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

    您好,Agustin,

    正确,我们将努力更正文档。

    此致,
    Dietmar

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