#include <msp430.h>
//#define SYS14_WORKAROUND_REVE // Uncomment this line if using RevE silicon
#define INIT_MEMORY_ADDR1 0x0206
unsigned int *Init_Addr1 = ((unsigned int*)INIT_MEMORY_ADDR1);
#ifdef SYS14_WORKAROUND_REVE
#define INIT_MEMORY_ADDR2 0x0900
unsigned int *Init_Addr2 = ((unsigned int*)INIT_MEMORY_ADDR2);
#endif
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
// SYS14 Workaround
*Init_Addr1 = 0x7F00;
*(Init_Addr1+0x10) = 0x00E0;
*(Init_Addr1+0x20) = 0xC140;
*(Init_Addr1+0x30) = 0x07FF;
#ifdef SYS14_WORKAROUND_REVE *Init_Addr2 = 0x9628;
*(Init_Addr2+4) = 0x0000;
*Init_Addr2 = 0x9600;#endif // Clock Configuration
UCSCTL4 = SELA_1; // ACLK = VLO
// Port Configuration
P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00;
PJOUT = 0x00;
P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF;
PJDIR = 0xFF;
__bis_SR_register(LPM3_bits); // Enter LPM3 __no_operation();
}
电路板只接JTAG,3.3v电源,断点在 __bis_SR_register(LPM3_bits); // Enter LPM3 功耗为 230ua正常,继续跑下去 还是230ua,拔掉JTAG功耗20ua不是手册上的2ua,是什么原因????
Susan Yang:
建议先用例程跑跑以排除硬件问题。另外建议确认下是否真正进入了LPM3
user5348798:
回复 Susan Yang:
该怎么确认是否正进入LPM3呢,因为现在测试的结果是指令LPM3,功耗22.7UA和小于LPM0/LPM1但是又大于LPM2
灰小子:
楼主,你是怎么测量的?
手册里的只是mcu的功耗,如果你有外围电路,外围电路也会耗电的
user5348798:
回复 user5348798:
我是用空板,只焊接芯片了,只连接了JTAG用来调试下载程序(下载之后拔掉JTAG并重新上电),用恒压源提供1.8到3.6伏电压,测试是用fluke万用表串联在电源上,测试过LPM0/LPM1是79ua,LPM2/LPM3/LPM4都是25.1ua,电压越低功耗有降低一点但是没有见过10ua以下,所以怀疑根本没有进入LPM2/LPM3/LPM4,不知道是什么原因导致,因为除了JTAG没有任何外围电路,有引一个LED查看程序运行,但是测试功耗的时候是拔掉的。
Susan Yang:
回复 user5348798:
您可以试一下官网给出的例程www.ti.com/…/toolssoftware 下载MSP430F530x, MSP430F5310 Code Examples (Rev. J)(ZIP776KB )
MSP430F530x_LPM3_01.cEnters LPM3 with ACLK = LFXT1, REF0 disabled, VUSB LDO and SLDO disabled, SVS disabled
MSP430F530x_LPM3_02.cEnters LPM3 (ACLK = VLO)
user5348798:
回复 Susan Yang:
我最上面的代码就是MSP430F530x_LPM3_02.c Enters LPM3 (ACLK = VLO)啊
Susan Yang:
回复 user5348798:
您可以去看一下状态寄存器Status Register (SR)的值来判断是否进入了LPM3
6.3.3 Status Register (SR)
灰小子:
回复 user5348798:
你的代码明显不是官网例程。
建议去掉无关代码,重新测试