This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28377D:Standby mode in Low Power Mode(LPM) Test method

Part Number: TMS320F28377D
Other Parts Discussed in Thread: C2000WARE

Dear All,

I tested to enter standby mode and wake up test using TMS320F28377D.

I referenced the source code lpm_standbywake_cpu01.c from the C2000 example.

When I tested the LPM mode, the current consumption changed from 350mA to 180mA.

If you look at the datasheet, it says that idle mode is 105mA from 350mA, and standby mode is 30mA.

1. Is the mode I entered standby mode rather than idle mode?

How do I check which mode it is?

Confirmed changing CpuSysRegs.LPMCR.bit.LPM = 1 in CCS Expressions.

2. I set the wakeup pin to GPIO18.

When pin 18 is high, it enters LPM mode and the current consumption is reduced to 180mA.

Changing pin 18 from high->low changes the GPIODataRegs value from 1->0 in the CCS expression and the current draw is back to 350mA.

But the mcu doesn't work normally.

(In normal operation, the LED on the board is toggled, but in my test, the LED does not work.)

I don't know what's wrong in the source code.

3. There is a function related to flash in the example. If this function is added, the mcu does not work.

Is it irrelevant to omit?

//
// Ensure there are no subsequent flash accesses to wake up the pump and
// bank Power down the flash bank and pump
//
//SeizeFlashPump();
//FlashOff();
//ReleaseFlashPump();

I attach LPM-related sources among the sources I have written.

thank you for your help.

main source

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "F28x_Project.h"
// Function Prototypes
//
void Gpio_setup(void);
void PwmTimerIsrSetUp(void);
__interrupt void local_WAKE_ISR(void);
void main(void)
{
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the F2837xD_SysCtrl.c file.
//
InitSysCtrl();
InitGpio();
// Step 2. Initialize GPIO:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

GPIO Set

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "F28x_Project.h"
void Gpio_setup(void);
void InitSciaGpio(void);
void Gpio_setup(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0x00000000; // All GPIO
GpioCtrlRegs.GPAMUX2.all = 0x00000000; // All GPIO
GpioCtrlRegs.GPBMUX1.all = 0x00000000; // All GPIO
GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF; // All outputs
GpioCtrlRegs.GPBDIR.all = 0x00001FFF; // All outputs
// HeartBit LED // 20191107 SHD
GpioCtrlRegs.GPDMUX1.bit.GPIO99 = 0;
GpioCtrlRegs.GPDDIR.bit.GPIO99 = 1;
//20230630 the external wake-up source
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 1) Normal Operate  : GPIO = 1, LPMCR.bit.LPM = 0, Sts.WakeTest++

    2) Enter Standby mode :  LPMCR.bit.LPM = 1

    3) wake up  : GPIO = 0, LPMCR.bit.LPM = 1, Sts.WakeTest not count

  • I referenced the source code lpm_standbywake_cpu01.c from the C2000 example.

    Please use lpm_ex3_standbywake.c from C:\ti\c2000\C2000Ware_4_03_00_00\driverlib\f2837xd\examples\cpu1\lpm.

    If you look at the datasheet, it says that idle mode is 105mA from 350mA, and standby mode is 30mA.

    30 mA is only the typical current. It can go up to 170 ma, which is the MAX current. Besides, your board should have been specifically designed to measure the current flowing into Vdd pins. It is also extremely important what type of multimeter you use. You cannot use cheap handheld multimeters. It must be measured using high-quality benchtop multimeters.

    Confirmed changing CpuSysRegs.LPMCR.bit.LPM = 1 in CCS Expressions.

    For a value of 1, you are definitely in Standby.

    Please run the example I referred "as is" without any change and let me know what you observed.

  • I have a question.
    In the example, it say that device enters standby mode when GPIO0 is high, and wakes up when GPIO is changed to 1->0->1 in standby mode.
    When I test, I was put 3.3V into GPIO0 using push switch.
    Is making a pulse with a push switch a valid test method? if I'm doing the test wrong, How can I make a pulse?

  • You cannot generate a clean pulse with a push switch. The pulse must be generated with a pulse Generator or using the GPIO pin of another device. I am not saying the device will not come out of STANDBY using a push switch. All I am saying is the pulse generated with a push switch would be extremely noisy. The correct way to generate a pulse would be with the methods I mentioned.

  • Thank you for your help.

    I think i have need study more.