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.

TMS320低功耗唤醒卡在IDLE

Other Parts Discussed in Thread: TMS320F28027

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

我用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睡眠,可以正常唤醒,但是电流有10mA
    IDLE;   //加了FLASH睡眠模式,调式的时候发现程序一直卡在这里,无法向下执行
    FLASH_setPowerMode(myFlash,FLASH_PowerMode_PumpAndBankStandby);
    //func1();
}

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

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

    这个是有的

    )

  • 您可以尝试修改该函数,在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 bits
        flash->FPWR &= (~FLASH_FPWR_PWR_BITS);
    
        // set the bits
        flash->FPWR |= mode;
    
        DISABLE_PROTECTED_REGISTER_WRITE_MODE;

    //please add IDLE command return; } // end of FLASH_setPowerMode() function

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

    非常感谢您的回答!

  • 我之前使用的是Ipm_standbywake这个例程,我回头实验一下lpm_haltwake
  • 谢谢您!我这边也试下Ipm_standbywake。
  • 您好,请问一下测试有结果吗?低功耗唤醒这里我还是有问题呢

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

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

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

    e2e.ti.com/.../1345657

    另外手册内给出的数据,对应TSET CONDITION里的内容是得到相应IDDIO电流值得前提条件,测试得到IDDA还需要关闭ADC时钟。
  • 您好!上面那个帖子我参考了,进入低功耗那里我用#pragma CODE_SECTION(SetLowPower,"ramfuncs");加载到RAM中去了,但是问题依然没有解决,进入Halt模式后,电流依然还有十几毫安。另外唤醒的时候,是否是GPIO拉低一段时间,然后必须再拉高才能唤醒中断?而拉低后等待是不会唤醒的是这样的吗?