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.

[参考译文] MSP430FR5736:进入和退出 LPM4.5时出现问题

Guru**** 657930 points
Other Parts Discussed in Thread: MSP430FR5736, MSPWARE, MSP430FR5969, MSP430FR5739
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/569341/msp430fr5736-problem-to-enter-and-exit-lpm4-5

器件型号:MSP430FR5736
主题中讨论的其他器件: MSPWAREMSP430FR5969MSP430FR5739

您好!

我的客户很难让 MSP430FR5736进入/退出 LPM4.5。

该代码在定制电路板上运行、并已从其原始应用中剥离、以隔离 LPM4.5功能的相关问题。

以下附加代码已在连接和未连接仿真器的情况下进行测试。 在这两种情况下、在尝试进入 LPM4.5后、MSP 的电流消耗仍然稳定在大约5uA。 我们认为所有 I/O 引脚被正确上拉/下拉、问题与硬件无关、而是与进入 LPM4.5的软件有关。 出于某种原因、执行 LPM4.5代码后、MSP 看起来仍处于活动状态、并在 JTAG 接口上进行响应。 正如我所理解的那样,这应该是不可能的,对吧?

以下示例基于以下版本的 MSPWare 1_60_03_07。
引脚 P2.2配置为 LPM 中断、以便在下降沿将 MSP 从 LPM4.5唤醒。 但是、进入 LPM4.5时似乎都存在问题、如果我们在退出时进入 LPM4.5、则会有一些奇怪的情况:

-         在 LPM4.5代码执行后、功耗保持在5uA、并且仍然可以使用调试器访问 MSP。

-         当下降沿被强制为 P2.2时、未检测到 BOR。

请查看这个简短的示例、并告知我们在尝试进入 LPM4.5时可能出现的问题。

谢谢、此致、

Joakim

 

------------------------------------------

#include
#include "inc/hw_regaccess.h"

 

//

//!

//!   包含 driverlib 的空项目-测试 MSP430FR5736的 LPM4.5

//!

//

 

静态空 SetLPM4_5 (空)

   //关闭不活动的模块

   WDTCTL = WDTPW | WDTHOLD;               //停止看门狗(先执行此操作)

   DMA0CTL = DMA1CTL = DMA2CTL = 0U;       //关闭 DMA

   TA0CTL = TA1CTL = 0U; //关闭计时器

   RTCCTL0 = 0U;                           //关闭 RTC

   REFCTL0 &=~REFON;     //关闭内部电压 REF 模块

       

   //停止时钟函数

   CSCTL0 = CSKEY;  //访问密码

   CSCTL1 = 0U;   //清除

   CSCTL2 = SELA_1;//为 ACLK 选择 VLO

   CSCTL4 = 0U;   //清除所有位

   CSCTL4 |=(SMCLKOFF);   //设置一些位

   CSCTL5 &=~(XT1OFFG);  //清除时钟故障

   CSCTL6 = 0U;   //所有 REQEN 关闭

   HWREG8 (CS_BASE + OFS_CSCTL0_H)= 0x00;  //锁定 CS 寄存器

 

   //端口关闭

   P1OUT = 0x00;P2OUT = 0x00;PJOUT = 0x00;

   P1DIR = 0xFF &~(BIT6);//设置为输出

   

   //设置 LPM 交叉连接 I/O

   P2IE |=(BIT2);    //启用端口中断

   P2IES |=(BIT2);   //在下降边沿上中断

   P2IFG &=~(BIT2);  //清除中断标志

 

   //禁用 SVS

   PMM_disableSVSL (PMM_BASE);

   PMM_disableSVSH (PMM_BASE);

   PMM_regOff (PMM_BASE);// PMMREGOFF = 1. 用于 LPMx.5

   

   _bis_SR_register (GIE+LPM4_BITS);            //输入 LPM4

 

int main (空)

   WDTCTL = WDTPW | WDTHOLD;                //停止 WDT

 

   //复位后检查 PMM 状态

   IF (PMM_getInterruptStatus (PMM_BASE、PMMRSTIFG))

   {

       PMM_clearInterrupt (PMM_base、PMMRSTIFG);

   }

   

   //在 BOR 之后检查 PMM 状态

   IF (PMM_getInterruptStatus (PMM_BASE、PMMBORIFG))

   {

       PMM_clearInterrupt (PMM_base、PMMBORIFG);

   }

 

   //是否刚刚退出 LMP4.5?

   IF (PMM_getInterruptStatus (PMM_BASE、PMMLPM5IFG))

   {

       __no_operation();//在此处设置断点以陷阱 BOR 条件

       

       PMM_unlockLPM5 (PMM_BASE);

       PMM_clearInterrupt (PMM_base、PMMLPM5IFG);

       PMM_regOn (PMM_base);

       PMM_enableSVSL (PMM_BASE);

       PMM_enableSVSH (PMM_BASE);

   }

   

   SetLPM4_5();

   __no_operation();

 

   while (1)

   {

     //只有在激活模式下才会出现在这里

       __no_operation();

   };

 

//唤醒端口引脚中断

#pragma vector=port2_vector

_interrupt void Port2_ISR (void)

 P2IFG &=~(BIT2);//清除中断标志

 

 //如果需要激活模式,请启用此代码

 //PMM_regOn (PMM_base);

 //LPM4_EXIT;

 

#pragma vector=Port1_vector

_interrupt void Port1_ISR (void)

 __no_operation();

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

    您在唤醒(无 BOR)时看到的电流消耗和行为听起来好像您只能到达 LPM4而不是 LPM4.5。 PMM_regOff 是我看到的用于关闭稳压器的函数、这本质上是进入 LPM4和 LPM4.5之间的差异-您能否分享这个函数的外观?

    您是否可以在器件中还有其他模块? 您可能会尝试清除 CS 模块中的时钟请求使能位、以查看是否能够真正进入 LPM4.5。

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

    您好 Katie、

    感谢您的帮助。 我要附加函数 PMM_regOff 的源代码、该函数是1.60.03.07版本中的 MSPWare 函数:

    /*********

    //

    //! 进入时、\brief 关闭低压降稳压器(LDO)

    //! LPM3/4、因此系统将分别进入 LPM3.5或 LPM4.5

    //!

    //! 修改后的寄存器为 PMMCTL0。

    //!

    //! \param baseAddress 是 PMM 模块的基址。

    //!

    //! \无返回

    //

    //

    void PMM_regOff (uint32_t baseAddress)

           HWREG8 (baseAddress + OFS_PMMCTL0_H)= PMMPW_H;

           HWREG8 (baseAddress + OFS_PMMCTL0)|= PMMREGOFF;

           HWREG8 (baseAddress + OFS_PMMCTL0_H)= 0x00;

    客户还尝试清除 CS 模块中的时钟请求使能位、但遗憾的是、结果相同。 这是否 应该真正断开时钟或阻止新请求进入?

    有没有其他建议可以让器件进入 LPM4.5?

    我查看了 MSPWare 最新版本中提供的示例、但找不到任何仅 LPM4的 LPM4.5示例。 如果我们可以得到一个正常工作的 LPM4.5示例、则客户可以修改该示例以在其硬件上运行。 您是否知道是否存在这样的示例?

    谢谢、此致、

    Joakim

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

    您好 Katie、

    您知道我们是否有任何 LPM4.5示例吗?

    如果没有、您如何建议我们继续验证客户是否进入 LPM4.5? 我的意思是、它们仍然是一个小风险、即高电流来自 I/O 引脚(但这应该已经检查过)、所以只查看电流并不完美。

    此致、

    Joakim

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

    很抱歉耽误你的时间。 遗憾的是、判断您是否处于 LPM4.5模式的唯一方法是查看电流消耗、并在中断发生时看到复位。 我确实发现我们为 MSP430FR5969器件提供了两个 LPM4.5示例: dev.ti.com/.../

    例如、如果您使用示例 msp430fr59xx_lpm4-5_02.c 为您的器件移植该示例(应该必须更改某些引脚、可能需要更改一些时钟设置、因为 CS 模块稍有不同)、我能够从 MSP430FR5739数据表中看到正确的 LPM4.5电流消耗。 例如、如果您使用 msp430fr59xx_lpm4-5_01.c、则会看到稍高的电流消耗、因为 SVS 仍在运行(但仍小于5uA)。

    我希望这会有所帮助。

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

    您好 Katie、

    客户已将该示例移植到其定制板、但仍具有相同的结果->无 BOR。

    有关 JTAG 接口配置的问题。 在代码的版本构建中、客户将 PJ.0、PJ.1、PJ.2和 PJ.3用于 PCB 识别电阻器、在调试构建中、他们将这些公共引脚用于 JTAG/仿真器。 BOR 和 JTAG 接口是否存在它们可能在这里运行的任何问题?

    谢谢、此致、

    Joakim

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

    您是否说端口 J 引脚上有上拉/下拉电阻器也用于 JTAG? 我强烈建议您不要这样做、因为我们的编程工具只在 JTAG 引脚上使用建议的连接进行测试、而不会在这些引脚上挂起任何其他连接。 此外、如果您的代码遵循 LPM 示例、则这些引脚可能会被软件设置为输出低电平-如果您有一个电阻器上拉至 Vcc、则会消耗一些电流。 我建议移除电阻器、看看在这种情况下会发生什么情况。

    您是否只有在调试模式下才会遇到 LPM 问题?

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

    有更新吗? 它们是否移除了电阻器?

    此致、
    Katie
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于不活动、我将关闭该线程、但如果您有更新、请发布回。