目前、我们填充了 MSP430F5659上的每个端口、这可能是我将微控制器置于低功耗模式(LPM4状态)时、我们无法理解为什么会有显著的电流消耗。 当微控制器进入低功耗模式时、它消耗大约533uA 的电流。 它最初是从1.148 mA 获得的、但我通过发出以下命令"DAC12_1DAT = 0;"、将微控制器的值更改为"0"、从而降低了电流消耗。 下图是 MSP430F5659的布局、后跟将微控制器置于低功耗模式的主代码。 我注意到的一种奇怪现象是、当微控制器在低功耗模式下启动、等待中断退出低功耗模式时、微控制器消耗大约55uA 的电流。 首次上电和下电时、其低功耗模式约为550uA。 所以在未加电的情况下启动低功耗模式与微退出低功耗模式、然后重新置于低功耗模式之间似乎存在差异。 我已经在器件退出低功耗模式后删除了源代码、以隔离额外关断电流的来源。 这似乎来自加电功能、但将微控制器置于低功耗模式的大部分主代码应可缓解最初在加电功能中运行的任何问题。
// Entering Low-Power Mode
P1IFG = 0; // clear any pending interrupts
HW_CLEAR_SOURCE_READ_INTERRUPT;
HW_CLEAR_CHRG_ADAPT_INTERRUPT_FLAG;
DAC12_1DAT = 0;
HW_SSR_DRIVE_STRENGTH_LOW; // Lower the drive strength from ports (P3.2, P8.7, P8.4, P7.4)
_EINT();
DISABLE_WATCHDOG; // WDTCTL = WDTPW + WDTHOLD; // disable Watchdog
WriteFlash(EZ_CHECKS);
// Port Configuration
P1DIR = 0xFF;
P1OUT = 0x00;
P1IE = 0x00; //Port1 is not interruptable.
P1IES = 0x00; //Interrupt on low-to-high.
P1SEL = 0x00; //No functions on port1.
P2DIR = 0xFF; //Port2 is output selected.
P2OUT = 0x00;
P2IE = 0x00; //Port2 is not interruptable.
P2IES = 0x00; //Interrupt on low-to-high.
P2SEL = 0x00; //No functions on port2.
P3DIR = 0xFF;
P3OUT = 0x00;
P3SEL = 0x00; //No functions on port3.
P3IES = 0x00; //Interrupt on low-to-high.
P3SEL = 0x00; //No functions on port1.
P4DIR = 0xFF; //Port4 is output selected.
P4OUT = 0x00;
P4SEL = 0x00; //No functions on port4.
P5DIR = 0xFF; //Port5 is output selected.
P5OUT = 0x00;
P5SEL = 0x00; //No functions on port5.
P6DIR = 0xFF; //Port6 is output selected.
P6OUT = 0x00;
P6SEL = 0x00; //No functions on port6.
P7DIR = 0xFF; //Port7 is output selected, power control
P7OUT = 0x00;
P7SEL = 0x00; //No functions on port7.
P8DIR = 0xFF;
P8OUT = 0x00;
P8SEL = 0x00; //No functions on port8.
P9DIR = 0xFF;
P9OUT = 0x00;
P9SEL = 0x00; //No functions on port9.
PJDIR = 0xFF; //PortJ is input selected.
PJOUT = 0x00;
HW_ENABLE_SWITCH_INTERRUPTS; // enable source/read switch interrupts
// Setup UCS
UCSCTL4 = SELA_1 + SELS_1 + SELM_1; // Ensure VLO is every CLK source
UCSCTL6 |= XT2OFF + XT1OFF;// + SMCLKOFF; // make sure XT1 and XT2 are off
UCSCTL8 &= ~(MODOSCREQEN + SMCLKREQEN + MCLKREQEN + ACLKREQEN); // Clear clock requests so lpm can properly be entered
// Disable VUSB LDO and SLDO
USBKEYPID = 0x9628; // set USB KEYandPID to 0x9628
// enable access to USB config reg
USBPWRCTL &= ~(SLDOEN+VUSBEN); // Disable the VUSB LDO and the SLDO
USBKEYPID = 0x9600; // disable access to USB config reg
// Setup ADC
ADC12CTL0 &= ~ADC12ON; //ADC12 is OFF
PMMCTL0_H = PMMPW_H; // PMM Password
// Disable SVS
SVSMHCTL &= ~(SVMHE | SVSHE); // Disable High side SVS
SVSMLCTL &= ~(SVMLE | SVSLE); // Disable Low side SVS
__bis_SR_register(LPM4_bits + GIE); // Enter low power mode 4 with interrupts enabled
UCSCTL8 |= (SMCLKREQEN + MCLKREQEN + ACLKREQEN); // enable clock requests so lpm can properly be exited
