大家好~(公司项目,卡在低功耗这里两周了)
我用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拉低一段时间,然后必须再拉高才能唤醒中断?而拉低后等待是不会唤醒的是这样的吗?