Part Number:MSP432P401R
Tool/software: Code Composer Studio
I'm using driverlib's pcm_go_to_lpm3 example, but I changed line115 to be MAP_PCM_gotoLPM4(); rather than MAP_PCM_gotoLPM3();. I am reading the current using a multimeter across the 3v3 pins between the debugger and the microcontroller and I am reading 0.2mA. Shouldn't I be expecting something closer to 1uA?
/* --COPYRIGHT--,BSD * Copyright (c) 2017, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * --/COPYRIGHT--*/ /******************************************************************************* * MSP432 PCM - Going to LPM3 * * Description: In this very simple example, the use of the PCM API to go to * LPM3 is demonstrated. The device is configured for GPIO interrupt * (to wake the device up when the user presses the button on P1.1) and then * the device is put into LPM3 using the PCM_gotoLPM3 function. Furthermore, * the device is configured in a manner to minimize power consumption and * achieve datasheet specifications with regard to power consumption. * * MSP432P401 * ------------------ * /|\| | * | | | * --|RST P1.0 |---> P1.0 LED * | | * | P1.1 |<--Toggle Switch * | | * | | * ******************************************************************************/ /* DriverLib Includes */ #include <ti/devices/msp432p4xx/driverlib/driverlib.h> /* Standard Includes */ #include <stdint.h> #include <stdbool.h> int main(void) { /* Halting the Watchdog */ MAP_WDT_A_holdTimer(); /* Configuring P1.0 as output and P1.1 (switch) as input */ MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0); /* Configuring P1.1 as an input and enabling interrupts */ MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1); MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1); MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1); MAP_Interrupt_enableInterrupt(INT_PORT1); MAP_Interrupt_enableSleepOnIsrExit(); /* Terminating all remaining pins to minimize power consumption. This is done by register accesses for simplicity and to minimize branching API calls */ MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, PIN_ALL8); MAP_GPIO_setAsOutputPin(GPIO_PORT_PB, PIN_ALL16); MAP_GPIO_setAsOutputPin(GPIO_PORT_PC, PIN_ALL16); MAP_GPIO_setAsOutputPin(GPIO_PORT_PD, PIN_ALL16); MAP_GPIO_setAsOutputPin(GPIO_PORT_PE, PIN_ALL16); MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, PIN_ALL8); MAP_GPIO_setOutputLowOnPin(GPIO_PORT_PB, PIN_ALL16); MAP_GPIO_setOutputLowOnPin(GPIO_PORT_PC, PIN_ALL16); MAP_GPIO_setOutputLowOnPin(GPIO_PORT_PD, PIN_ALL16); MAP_GPIO_setOutputLowOnPin(GPIO_PORT_PE, PIN_ALL16); /* Starting LFXT and sourcing ACLK and BCLK from it */ MAP_CS_setExternalClockSourceFrequency(32000,48000000); MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_PJ, GPIO_PIN0 | GPIO_PIN1, GPIO_PRIMARY_MODULE_FUNCTION); MAP_CS_startLFXT(CS_LFXT_DRIVE3); MAP_CS_initClockSignal(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1); MAP_CS_initClockSignal(CS_BCLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1); /* Disabling high side voltage monitor/supervisor */ MAP_PSS_disableHighSide(); /* Enabling "rude" mode which forces device to go to sleep regardless of * outstanding clock requests */ MAP_PCM_enableRudeMode(); /* Enabling MASTER interrupts */ MAP_Interrupt_enableMaster(); /* Going to LPM3 */ while (1) { /* Note that while this examples just goes to LPM3, LPM4 is essentially just LPM3 with WDT_A/RTC_C disabled. For convenience, the user can use the MAP_PCM_gotoLPM4() function if they want the API to handle the disabling of these components */ MAP_PCM_gotoLPM4(); } } /* GPIO ISR */ void PORT1_IRQHandler(void) { uint32_t status; status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1); MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status); /* Toggling the output on the LED */ if(status & GPIO_PIN1) { MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); } }