使用的单片机型号是MSP430FR5739,进入低功耗模式LPM4可以使用TI提供的函数__bis_SR_register(LPM4_bits)设置寄存器,那么进入LPM3.5或者LPM4.5应该如何写程序,另外进入LPMx.5之后仿真器将无法使用,如何验证结果,求大神赐教~
Susan Yang:
可以参考文档 http://www.ti.com.cn/cn/lit/ug/zhcu026ac/zhcu026ac.pdf 第16页
user4132520:
回复 Susan Yang:
不好意思,我用的调试软件是CCS,不知道有没有对应的资料
; Enter LPMx.5 ExampleMOV.B #PMMPW_H, &PMMCTL0_H ; Open PMM registers for writeBIS.B #PMMREGOFF, &PMMCTL0_L ;BIS #GIE+CPUOFF+OSCOFF+SCG1+SCG0,SR ; Enter LPMx.5 when PMMREGOFF is set.
我使用芯片手册上提供的以上方法进入低功耗模式,但是上电后发现它无限复位,不知道是什么情况…
Butterfly:
回复 user4132520:
用CCS, 参考下面文档67页
http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=slau157&fileType=pdf&keyMatch=CCS LPMX.5&tisearch=Search-EN
user4132520:
回复 Butterfly:
你好,可能我现在更关注的是进入LPMx.5的方式是否正确,以下是我的代码
#include "Msp430fr5739.h"
void main(void){ WDTCTL = WDTPW + WDTHOLD; clock_Init(); gpio_Init_LPM(); __bis_SR_register(GIE);
__delay_cycles(5000000); PJOUT |= BIT1; // output is high(PJ.1) for test __delay_cycles(5000000);
PMMCTL0_H |= PMMPW_H; PMMCTL0_L |= PMMREGOFF; __bis_SR_register(LPM3_bits); while(1);}
#pragma vector = PORT1_VECTOR__interrupt void Port_1(void){ switch(__even_in_range(P1IV,P1IV_P1IFG5)) { case P1IV_P1IFG5: PJOUT &= ~BIT1; // output is low(PJ.1) for test break;
default: break; } P1IFG = 0; // P1 IFG cleared}
其中gpio_Init_LPM()将所有的管脚设置成IO模式,输出低电平,P1.5配置成下降沿中断用来唤醒430
PMMCTL0_H |= PMMPW_H; PMMCTL0_L |= PMMREGOFF;
用来进入LPMx.5模式,现在的现象是脱离仿真器上电以后灯在闪烁,也就是程序一直在无限重新加载,百思不得其解
我理解的是应该是P1.5触发中断唤醒之后才会重新加载程序,不知道哪里理解的有问题,还请赐教
Butterfly:
回复 user4132520:
LPMX.5 把片内降压的LDO关掉了,RAM里面的数据都会丢失,为什么不进LPM3?