LOW POWER MODE | INTERUPT MSP432

Hello Everybody, I try to put the MSP432 in PCMLPM0LDOVCORE0 mode , using PCMsetPowerState, but the code just keeping running the code. I don’t know what I’m doing wrong. Has anyone passed through this before? Thank you! PS: I’m using the FreeRTOS DEMO code. code: https://github.com/guilionzzo/firmware_onBoardComputer/blob/master/src/taskManager.c

LOW POWER MODE | INTERUPT MSP432

I don’t know anything about the code you are linking to so my answer is generic. How the system will behave will depend on what the low power mode is doing and the clock used to generate the tick interrupt. If you just leave the clock that generates the tick interrupt running, and the low power mode also keeps the clock running, then you will most likely leave low power mode whenever the next tick interrupt occurs. I’m afraid I don’t know which clock you are using to generate the tick or what PCMLPM0LDO_VCORE0 does so suggest having a look at the following for more info: https://www.freertos.org/low-power-tickless-rtos.html

LOW POWER MODE | INTERUPT MSP432

Hi Richard, I set the interrupt on INT_PORT1, as shown in the code below. Even I specified what source will generate the interrupt, Do I have to disable the Systick Clock? If it was a dumb question, my apologies. I don’t have much experience with this kind of application. Thank you for the quick reply. hibernate code: ~~~ MAPGPIOsetAsInputPinWithPullUpResistor(GPIOPORTP1, GPIOPIN1); MAPGPIOclearInterruptFlag(GPIOPORTP1, GPIOPIN1);
MAP_Interrupt_disableSleepOnIsrExit();
MAP_SysCtl_enableSRAMBankRetention(SYSCTL_SRAM_BANK1);
MAP_Interrupt_enableInterrupt(INT_PORT1);
MAP_Interrupt_enableMaster();

PCM_setPowerState(PCM_LPM0_LDO_VCORE0);
~~~

LOW POWER MODE | INTERUPT MSP432

Where are you putting the MCU into low power mode? Are you using the FreeRTOS tickless idle mode as described on the link in my previous post? If so, are you using the default tickless mode on an msp432 specific one. Apologies but replying on my cell/mobile/handy phone so can’t see all links.

LOW POWER MODE | INTERUPT MSP432

Don’t worry my friend, you are really helping me in the issue, even if I do not see the links. I was putting the MCU in low power mode using the PCM_setPowerState(). Now I understand the situation better :D. The xMaximumPossibleSuppressedTicks is very low, 349 ticks. Instead of put MCU in low power mode I used vPortSuppressTicksAndSleep() in a wrapper function [CODE1]. It is working, but I’d like to put the microcontroller in a non-working state. I saw the link that you sent and the Low Power RTOS For ARM Cortex-M MCUs material, but I’m bit confused whether I can configure two SysTick sources. Is it possible to use two SysTick sources? One used when the MCU needs more power and another when the hibernate mode is required. I appreciate your help. CODE1: ~~~ void hibernate(uint8t timems) {
int clockFrequency = 48000000;  //48MHz
int tickRateHZ = 1000;           //1KHz

int timerCountsForOneTick = (clockFrequency / tickRateHZ); // 48000 - timer for one tick 20,8ms
int maximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER
        / timerCountsForOneTick 349 ticks;
int iterations = time_ms / maximumPossibleSuppressedTicks;
int i = 0;

for (i = 0; i < iterations; i++)
{
    vPortSuppressTicksAndSleep(maximumPossibleSuppressedTicks); // loop to complete the time
}
~~~

LOW POWER MODE | INTERUPT MSP432

The default tickless idle operation does not use tick sources, but if you provide your own ‘suspend and sleep’ function as per the link I posted then you can just stop SysTick all together and configure whichever clock you want to bring the MCU out of low power mode at the appropriate time. I’m still not clear where you are placing the MCU into low power mode as if you are using the ‘suspend and sleep’ function it should be called by the kernel, not you, and it won’t call PCM_setPowerState() unless you have already customised the sleep functions for your particular MCU.