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.

[参考译文] MSP430FR5969:我想退出 LMP4模式而不中断按钮

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1290122/msp430fr5969-i-want-to-get-out-of-the-lmp4-mode-without-button-interupt

器件型号:MSP430FR5969
主题中讨论的其他器件: MSP430WARE、MSP-EXP430FR5969

您好、TI 团队:  

我使用的是 MSP430FR5969的示例代码、我希望器件进入 LMP4模式、60秒后、我应该自动重启自身、而无需外部中断(如按钮)。 如何实现

我正在使用的代码附在该线程下方。

/*-版权-, BSD_EX
 *版权所有(c) 2012、德州仪器(TI)公司
 保留所有权利。
 *
 *以源代码和二进制形式重新分发和使用,有或没有
 *修改,在以下条件允许的条件下
 *满足:
 *
 ** 源代码的重新分发必须保留以上版权
 *  请注意,本条件清单和以下免责声明。
 *
 ** 二进制形式的再分发必须复制上述版权
 *  通知,本条件清单和下述免责声明在
 *  与分发一起提供的文档和/或其他材料。
 *
 ** 德州仪器公司名称或公司名称
 *  其贡献者可用于认可或推广派生的产品
 *  从本软件未经事先书面许可。
 *
 *本软件由版权持有者和贡献者"按原样"提供
 本站明确声明不作出任何种类的所有明示或暗示的保证,包括但不限于关于适销性、适用于
 *对特定产品的适销性和适用性的暗示保证
 *免责声明。 在任何情况下,版权所有者或
 *贡献者对任何直接、间接、偶然、特殊、
 *示例性或后果性损害(包括但不限于:
 *替代产品或服务的采购;使用、数据或利润的损失;
 *或业务中断)然而造成和任何责任理论,
 *无论是合同,严格的责任,或侵权(包括疏忽或
 *其他)因使用本软件而产生的任何原因、
 *即使被告知此类损害的可能性。
 *
 *
 *
 *            MSP430代码示例免责声明
 *
 * MSP430代码示例是自包含的低级程序、通常
 *以高度优化的方式演示单个外设功能或设备特性
 *简洁的方式。 为此、代码可依赖于器件的加电默认值
 *寄存器的值和设置,如时钟配置和小心必须
 *在合并来自几个示例的代码时采取,以避免潜在的侧
 *效果。 有关 GUI、另请参阅 www.ti.com/grace 和 www.ti.com/msp430ware
 *针对外设配置的 API 函数库方法。
 *
 *-/版权-*/
//*****
// MSP430FR59xx 演示-进入 LPM4.5并通过 P1.1中断唤醒
//            禁用 SVS
//
// 说明:下载并运行程序。 如果出现以下情况、LED1 (或 P4.6)将保持开启
//         已正确输入 LPM4.5。 使用按钮 S2 (或 P1.1)
//         EXP 板以从 LPM4.5唤醒器件。 这将支持
//         LFXT 振荡器并使 LED2闪烁(在 P1.0上)。
//
//         此演示在 MSP-EXP430FR5969 LaunchPad 上进行了测试。
//
//      MSP430FR5969
//     ----------------
//  /|\|       XIN|-
//   |        | 32KHz 晶振
//   --|RST    XOUT|-
//    |        |
//    |      P1.0|--> LED2 (MSP-EXP430FR5969)
//    |      P4.6|--> LED1 (MSP-EXP430FR5969)
//    |        |
//    |      P1.1|<-- S2按钮(MSP-EXP430FR5969)
//
// William Goh / Andreas Dannenberg
// 德州仪器公司
// 2014年6月
// 通过 IAR Embedded Workbench V6.10.3和 Code Composer Studio V6.0构建
//*****

#包含

int main (void){
  WDTCTL = WDTPW | WDTHOLD       //停止看门狗计时器

  //配置 GPIO
  P1OUT = 0               // P1.1上的上拉电阻
  P1DIR = 0xFF             //将除 P1.1之外的所有设置为输出方向

  P2OUT = 0
  P2DIR = 0xFF

  P3OUT = 0
  P3DIR = 0xFF

  P4OUT = 0
  P4DIR = 0xFF

  PJOUT = BIT4;              //将 PJ.4 / LFXTIN 设置为高电平
  PJDIR = 0xFFFF

  //确定是来自 LPMx.5还是常规复位。
  如果(SYSRSTIV == SYSRSTIV_LPM5WU){
    PJSEL0 = BIT4;            //用于 XT1

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

    //针对输出配置 LED 引脚
    P1DIR |= BIT0;

    //禁用 GPIO 上电默认高阻抗模式以激活
    //先前配置的端口设置。 振荡器现在应该启动...
    PM5CTL0 &=~μ A LOCKLPM5

    请执行
      CSCTL5 &=~LFXTOFFG;       //清除 XT1故障标志
      SFRIFG1 &=~OFIFG;
    } while (SFRIFG1 OFIFG);      //测试振荡器故障标志
  }
  否则
    //配置 P1.1中断
    P1OUT |= BIT1;            // P1.1上的上拉电阻
    P1REN |= BIT1;            //为 P1.1选择上拉模式
    P1DIR = 0xFF ^ BIT1;         //将除 P1.1之外的所有设置为输出方向
    P1IES |= BIT1;            // P1.1高/低边沿
    P1IFG = 0             //清除所有 P1中断标志
    P1IE |= BIT1;            // P1.1中断被启用

    P4OUT |= BIT6;            //打开 EXP 板上的 P4.6 (LED1)
                      //表明我们将要输入
                      // LPM4.5

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


    PMMCTL0_H = PMMPW_H;         //打开 PMM 寄存器以进行写入
    PMMCTL0_L &&(SVSHE);        //禁用高侧 SVS
    PMMCTL0_L |= PMMREGOFF;       //并设置 PMMREGOFF
    PMMCTL0_H = 0           //锁定 PMM 寄存器

    //输入 LPM4注意该操作不返回。 此 LPM4.5
    //将通过复位事件退出,导致重新启动
    //代码。
    __ bis_SR_register (LPM4_bits);

    //不应该在这里...
    while (1);
  }

  //现在使 LED 在无限循环中闪烁。
  while (1){
    P1OUT ^= BIT0;            // P1.0 =切换
    __delay_cycles (100000);
  }
谢谢!
此致、
普赫拉吉·辛格
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿 Pukhraj、

    您希望在低功耗睡眠期间打开什么电源?  这里显示的代码示例适用于 LPM4.5。  在 LPM4.5中、该关断操作均可且只能由外部唤醒。   

    您是否要有 RTC?  有一种 LPM3.5模式、它会关闭除 RTC 之外的所有其他功能、然后 RTC 可能每60秒唤醒一次。  它的功率略高、但我认为这可能是您的理想模式。   

    谢谢。

    JD

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

    那么、您能否与我共享 LMP3.5节点的代码、在该节点下、器件可进入睡眠状态60秒、然后唤醒。 比如我可以下载代码、但代码被配置为2秒的间隔。 如何更改它、以便微控制器关闭60秒、然后再次为 GPIO 通电。

    谢谢!

    此致、

    普赫拉吉·辛格

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

    嘿 Pukhraj、

    是的、正如您提到过的、我们有一个每2秒从 RTC 唤醒一次的 LPM3.5示例、如下所示: https://dev.ti.com/tirex/explore/node?node=A__AAMul1n2VPAevkaO2S7xVw__msp430ware__IOGqZri__LATEST 

    要从2秒更改为60秒,最简单的方法可能是更改 InitRTC ()和 WakeUpLPM35 ()功能中的分频器。  

    谢谢。

    JD  

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

    JD、您好!

    MSP430新手上路。 如果你能解释或编辑 InitRTC ()和 WakeUpLPM35 ()函数中的分频器参数中需要更改的内容,那会很好。

    谢谢!

    此致、

    普赫拉吉·辛格

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

    Pukhraj,

    遗憾的是、我没有机会深入钻研特定的代码更改建议、但如果您能通过 RTC MSP Academy 获得 帮助、您会有所收获。  这是一个书面的交互式培训。  这是为 FR2x 器件编写的、但您可能需要密切关注 FR5x。  

    谢谢。

    JD