TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320低功耗唤醒卡在IDLE

大家好~(公司项目,卡在低功耗这里两周了)

我用lpm_haltwake例程做低功耗时,加了 FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep); 电流确实降到了3mA,但是唤醒的时候,程序一直卡在IDLE这里出不来,请问一下这是什么问题?

#pragma CODE_SECTION(SetLowPower, "ramfuncs");
void SetLowPower(void)
{FLASH_setActiveWaitCount(myFlash,10000);//RunInRam();if ( PLL_getClkStatus(myPll) != PLL_PLLSTS_MCLKSTS_BITS){//// LPM mode = Standby//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Halt);//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Idle);}FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep);//如果不加FLASH睡眠,可以正常唤醒,但是电流有10mAIDLE;//加了FLASH睡眠模式,调式的时候发现程序一直卡在这里,无法向下执行FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankStandby);//func1();
}

Susan Yang:请问您现在使用的是哪款芯片?

大家好~(公司项目,卡在低功耗这里两周了)

我用lpm_haltwake例程做低功耗时,加了 FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep); 电流确实降到了3mA,但是唤醒的时候,程序一直卡在IDLE这里出不来,请问一下这是什么问题?

#pragma CODE_SECTION(SetLowPower, "ramfuncs");
void SetLowPower(void)
{FLASH_setActiveWaitCount(myFlash,10000);//RunInRam();if ( PLL_getClkStatus(myPll) != PLL_PLLSTS_MCLKSTS_BITS){//// LPM mode = Standby//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Halt);//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Idle);}FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep);//如果不加FLASH睡眠,可以正常唤醒,但是电流有10mAIDLE;//加了FLASH睡眠模式,调式的时候发现程序一直卡在这里,无法向下执行FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankStandby);//func1();
}

user6134576:

回复 Susan Yang:

你好,TMS320F28027这款芯片(补充一下问题,貌似使用lpm_haltwake这个例程,在IDLE之前调用FLASH_setPowerMode都会程序卡在IDLE这里,是不是调用这个API还需要配置什么呢?

memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);FLASH_setup(myFlash);

这个是有的

)

大家好~(公司项目,卡在低功耗这里两周了)

我用lpm_haltwake例程做低功耗时,加了 FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep); 电流确实降到了3mA,但是唤醒的时候,程序一直卡在IDLE这里出不来,请问一下这是什么问题?

#pragma CODE_SECTION(SetLowPower, "ramfuncs");
void SetLowPower(void)
{FLASH_setActiveWaitCount(myFlash,10000);//RunInRam();if ( PLL_getClkStatus(myPll) != PLL_PLLSTS_MCLKSTS_BITS){//// LPM mode = Standby//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Halt);//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Idle);}FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep);//如果不加FLASH睡眠,可以正常唤醒,但是电流有10mAIDLE;//加了FLASH睡眠模式,调式的时候发现程序一直卡在这里,无法向下执行FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankStandby);//func1();
}

Susan Yang:

回复 user6134576:

您可以尝试修改该函数,在return之前加上IDLE命令。

IDLE命令不能在该函数之外,否则它就会一直 re-enable Flash

void FLASH_setPowerMode(FLASH_Handle flashHandle, const FLASH_PowerMode_e mode)
{FLASH_Obj *flash = (FLASH_Obj *)flashHandle;ENABLE_PROTECTED_REGISTER_WRITE_MODE;// clear the bitsflash->FPWR &= (~FLASH_FPWR_PWR_BITS);// set the bitsflash->FPWR |= mode;DISABLE_PROTECTED_REGISTER_WRITE_MODE;//please add IDLE commandreturn;
} // end of FLASH_setPowerMode() function

大家好~(公司项目,卡在低功耗这里两周了)

我用lpm_haltwake例程做低功耗时,加了 FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep); 电流确实降到了3mA,但是唤醒的时候,程序一直卡在IDLE这里出不来,请问一下这是什么问题?

#pragma CODE_SECTION(SetLowPower, "ramfuncs");
void SetLowPower(void)
{FLASH_setActiveWaitCount(myFlash,10000);//RunInRam();if ( PLL_getClkStatus(myPll) != PLL_PLLSTS_MCLKSTS_BITS){//// LPM mode = Standby//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Halt);//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Idle);}FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep);//如果不加FLASH睡眠,可以正常唤醒,但是电流有10mAIDLE;//加了FLASH睡眠模式,调式的时候发现程序一直卡在这里,无法向下执行FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankStandby);//func1();
}

user6134576:

回复 Susan Yang:

您好!刚刚经过测试,还是无法跳出IDLE呢。请问一下您试过Halt 和Flash Sleep模式一起设置吗?

非常感谢您的回答!

大家好~(公司项目,卡在低功耗这里两周了)

我用lpm_haltwake例程做低功耗时,加了 FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep); 电流确实降到了3mA,但是唤醒的时候,程序一直卡在IDLE这里出不来,请问一下这是什么问题?

#pragma CODE_SECTION(SetLowPower, "ramfuncs");
void SetLowPower(void)
{FLASH_setActiveWaitCount(myFlash,10000);//RunInRam();if ( PLL_getClkStatus(myPll) != PLL_PLLSTS_MCLKSTS_BITS){//// LPM mode = Standby//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Halt);//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Idle);}FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep);//如果不加FLASH睡眠,可以正常唤醒,但是电流有10mAIDLE;//加了FLASH睡眠模式,调式的时候发现程序一直卡在这里,无法向下执行FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankStandby);//func1();
}

Susan Yang:

回复 user6134576:

我之前使用的是Ipm_standbywake这个例程,我回头实验一下lpm_haltwake

大家好~(公司项目,卡在低功耗这里两周了)

我用lpm_haltwake例程做低功耗时,加了 FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep); 电流确实降到了3mA,但是唤醒的时候,程序一直卡在IDLE这里出不来,请问一下这是什么问题?

#pragma CODE_SECTION(SetLowPower, "ramfuncs");
void SetLowPower(void)
{FLASH_setActiveWaitCount(myFlash,10000);//RunInRam();if ( PLL_getClkStatus(myPll) != PLL_PLLSTS_MCLKSTS_BITS){//// LPM mode = Standby//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Halt);//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Idle);}FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep);//如果不加FLASH睡眠,可以正常唤醒,但是电流有10mAIDLE;//加了FLASH睡眠模式,调式的时候发现程序一直卡在这里,无法向下执行FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankStandby);//func1();
}

user6134576:

回复 Susan Yang:

谢谢您!我这边也试下Ipm_standbywake。

大家好~(公司项目,卡在低功耗这里两周了)

我用lpm_haltwake例程做低功耗时,加了 FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep); 电流确实降到了3mA,但是唤醒的时候,程序一直卡在IDLE这里出不来,请问一下这是什么问题?

#pragma CODE_SECTION(SetLowPower, "ramfuncs");
void SetLowPower(void)
{FLASH_setActiveWaitCount(myFlash,10000);//RunInRam();if ( PLL_getClkStatus(myPll) != PLL_PLLSTS_MCLKSTS_BITS){//// LPM mode = Standby//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Halt);//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Idle);}FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep);//如果不加FLASH睡眠,可以正常唤醒,但是电流有10mAIDLE;//加了FLASH睡眠模式,调式的时候发现程序一直卡在这里,无法向下执行FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankStandby);//func1();
}

user6134576:

回复 Susan Yang:

您好,请问一下测试有结果吗?低功耗唤醒这里我还是有问题呢

ps:还有一个疑问,正常运行到进入halt模式,功耗约降至11mA左右。如果在IDLE之前加上FLASH_setPowerMode,电流才会降至3mA,但是我看手册有这样的注明:

也就是进入HALT模式,Flash是掉电模式的,外设和输入时钟也都关闭了,那芯片的功耗从何而来呢?

大家好~(公司项目,卡在低功耗这里两周了)

我用lpm_haltwake例程做低功耗时,加了 FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep); 电流确实降到了3mA,但是唤醒的时候,程序一直卡在IDLE这里出不来,请问一下这是什么问题?

#pragma CODE_SECTION(SetLowPower, "ramfuncs");
void SetLowPower(void)
{FLASH_setActiveWaitCount(myFlash,10000);//RunInRam();if ( PLL_getClkStatus(myPll) != PLL_PLLSTS_MCLKSTS_BITS){//// LPM mode = Standby//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Halt);//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Idle);}FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep);//如果不加FLASH睡眠,可以正常唤醒,但是电流有10mAIDLE;//加了FLASH睡眠模式,调式的时候发现程序一直卡在这里,无法向下执行FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankStandby);//func1();
}

Susan Yang:

回复 user6134576:

功耗测量的话建议您移除JTAG.您现在程序是从Flash运行还是RAM?是否是下面帖子的情况?

e2e.ti.com/…/1345657

另外手册内给出的数据,对应TSET CONDITION里的内容是得到相应IDDIO电流值得前提条件,测试得到IDDA还需要关闭ADC时钟。

大家好~(公司项目,卡在低功耗这里两周了)

我用lpm_haltwake例程做低功耗时,加了 FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep); 电流确实降到了3mA,但是唤醒的时候,程序一直卡在IDLE这里出不来,请问一下这是什么问题?

#pragma CODE_SECTION(SetLowPower, "ramfuncs");
void SetLowPower(void)
{FLASH_setActiveWaitCount(myFlash,10000);//RunInRam();if ( PLL_getClkStatus(myPll) != PLL_PLLSTS_MCLKSTS_BITS){//// LPM mode = Standby//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Halt);//PWR_setLowPowerMode(myPwr, PWR_LowPowerMode_Idle);}FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankSleep);//如果不加FLASH睡眠,可以正常唤醒,但是电流有10mAIDLE;//加了FLASH睡眠模式,调式的时候发现程序一直卡在这里,无法向下执行FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankStandby);//func1();
}

user6134576:

回复 Susan Yang:

您好!上面那个帖子我参考了,进入低功耗那里我用#pragma CODE_SECTION(SetLowPower,"ramfuncs");加载到RAM中去了,但是问题依然没有解决,进入Halt模式后,电流依然还有十几毫安。另外唤醒的时候,是否是GPIO拉低一段时间,然后必须再拉高才能唤醒中断?而拉低后等待是不会唤醒的是这样的吗?

赞(0)
未经允许不得转载:TI中文支持网 » TMS320低功耗唤醒卡在IDLE
分享到: 更多 (0)