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.

[参考译文] MSP430FR5972:低功耗模式4.5

Guru**** 2553260 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/592833/msp430fr5972-low-power-mode-4-5

器件型号:MSP430FR5972

您好!

当我运行示例代码 separate 时、它可以正常工作、但当我在几秒钟(30-40秒)后将同一代码放入项目时、 LPM4.5会自动输出。

我正在发送下面的代码。 请建议我 做什么

空 LPM4_5 (空)

     UART_putstring ("\r\n>>>> 在 LPM 4.5模式下<<<<<< \r\n ");

//配置 GPIO
P1OUT &=~BIT6;
P1DIR = BIT6;

//确定我们是从 LPMx.5还是常规复位中退出。
if (SYSRSTIV = SYSRSTIV_LPM5WU){
PJSEL0 = BIT4 | BIT5;//对于 XT1

//时钟系统设置
CSCTL0_H = CSKEY >> 8;//解锁 CS 寄存器
CSCTL1 = DCOFSEL_0;//将 DCO 设置为1MHz
CSCTL2 = SELA_LFXTCLK | SELESS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;//设置所有分频器
CSCTL4 &=~LFXTOFF;

PM5CTL0 &=~LOCKLPM5;

执行{
CSCTL5 &=~LFXTOFFG;//清除 XT1故障标志
SFRIFG1 &=~OFIFG;
} while (SFRIFG1 & OFIFG);//测试振荡器故障标志

否则{
//将 P1.6配置为中断
P1OUT &=~BIT6;// P1.6上的下拉电阻器
P1REN |= BIT6;//为 P1.6选择下拉模式
P1DIR = 0xFF ^ BIT6;//将除 P1.1之外的所有方向设置为输出方向
P1IES &=~BIT6;// P1.6低/高边沿
P1IFG = 0;//清除所有 P1中断标志
P1IE |= BIT6;// P1.6中断被启用

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

PMMCTL0_H = PMMPW_H;//打开 PMM 寄存器进行写入
PMMCTL0_L |= PMMREGOFF;//并设置 PMMREGOFF
PMMCTL0_H = 0;//锁定 PMM 寄存器

//输入 LPM4请注意,此操作不会返回。 LPM4.5
//将通过复位事件退出,从而重新启动
代码的//。
_bis_SR_register (LPM4_BITS);

while (1);// MCU 将在这里等待、直到在 P1.6上接收到中断

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否使用了任何中断?
    代码中是否有从 LPM 获取器件的任何位置?
    您是否禁用了看门狗计时器?

    请验证这些问题、如果问题仍然存在、请发布您的其余代码、以便我可以查看其他地方是否存在导致复位的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Nima、

    在我的项目中、我正在使用 UART、RTC、ADC 中断、并且只有一个 LPM 4.5、它不会退出项目中的任何位置
    我在第一行中禁用了看门狗计时器。

    因此、建议一些其他问题、否则请等待积极的回复
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我建议您将 此代码放入您的项目中并禁用 UART、RTC 和 ADC 中断。 如果这起作用、请尝试逐步启用每个模块、并检查此行为何时发生。 之后、我们可以检查该模块为什么会生成中断。

    此致、
    托比亚斯

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

    当我禁用 RTC 时,LPM 4.5正常工作,但当我发出从 LPM 4.5唤醒的信号时,仍然面临一个问题,它不是从 LPM 之后的下一行开始,它从 main 开始()
    然后我检查了复位原因、它给出了退出 LPMx.5的原因(SYSRSTIV 寄存器中的接收值8)
    Mease、当我发出信号从 LPM 唤醒时、它会被重置。
    非常好的建议做什么…
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您现在已为意外中断识别了 RTC。

    有关 LPM x.5入口点的第二个问题、这是预期的。 LPMx.5 (LPM3.5或 LPM4.5)唤醒事件会生成欠压复位(BOR)、因此程序从主程序开始执行。 请注意、当进入 LPMx.5时、电源管理模块(PMM)的稳压器被禁用。 所有 RAM 和寄存器内容丢失。 虽然 I/O 寄存器中的内容丢失
    I/O 引脚状态在进入 LPMx.5时被锁定。 这就是为什么需要 BOR 的原因。

    此致、
    托比亚斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Tobias。
    这是两个方面、
    首先、我发现 Rsion 是 RTC、但我必须在项目中使用 RTC、因此请告诉我需要做的是、两者都应该正常工作
    第二、我希望如果我提供唤醒信号、它应该在 LMP4.5之后继续、而不是从主器件启动。 那么、我需要在我的程序中写入什么内容?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要检查 RTC 配置、您可以运行 RTC 而不产生中断。 但 RTC 在 LPM4.5中不可用、而在 LPM3.5中可用。 如果您需要在 LPM 条目后继续行、我建议您使用 LPM3。 LPMx.5始终从 main 开始、因为您的所有寄存器设置都将丢失、正如我之前提到的、您需要在代码中处理这一点。

    托比亚斯