CC3200深度睡眠被系统任务切换中断唤醒,怎么解决?
时间:10-02
整理:3721RD
点击:
想问一下CC3200,CC3200深度睡眠被系统任务切换中断唤醒,怎么解决?
这个休眠函数,会被所有的中断唤醒,我把它放在freertos下,发现总是不能保持睡眠。猜测是因为不断被系统任务切换中断唤醒。我看数据表deepsleep也是可以设置唤醒源的,但是API貌似并没有提供这样的设置函数。这种问题有什么解决办法吗?
//*****************************************************************************
//
//! Puts the system into Deep Sleep power mode.
//!
//! This function puts the system into Deep Sleep power mode. System exits the
//! power state on any one of the available interrupt. On exit from deep
//! sleep the function returns to the calling function with all the processor
//! core registers retained.
//!
//! \return None.
//
//*****************************************************************************
void
PRCMDeepSleepEnter()
{
//
// Set bandgap duty cycle to 1
//
HWREG(HIB1P2_BASE + HIB1P2_O_BGAP_DUTY_CYCLING_EXIT_CFG) = 0x1;
//
// Enable DSLP in cortex
//
HWREG(0xE000ED10)|=1<<2;
//
// Request Deep Sleep
//
CPUwfi();
//
// Disable DSLP in cortex before
// returning to the caller
//
HWREG(0xE000ED10) &= ~(1<<2);
}
这个休眠函数,会被所有的中断唤醒,我把它放在freertos下,发现总是不能保持睡眠。猜测是因为不断被系统任务切换中断唤醒。我看数据表deepsleep也是可以设置唤醒源的,但是API貌似并没有提供这样的设置函数。这种问题有什么解决办法吗?
//*****************************************************************************
//
//! Puts the system into Deep Sleep power mode.
//!
//! This function puts the system into Deep Sleep power mode. System exits the
//! power state on any one of the available interrupt. On exit from deep
//! sleep the function returns to the calling function with all the processor
//! core registers retained.
//!
//! \return None.
//
//*****************************************************************************
void
PRCMDeepSleepEnter()
{
//
// Set bandgap duty cycle to 1
//
HWREG(HIB1P2_BASE + HIB1P2_O_BGAP_DUTY_CYCLING_EXIT_CFG) = 0x1;
//
// Enable DSLP in cortex
//
HWREG(0xE000ED10)|=1<<2;
//
// Request Deep Sleep
//
CPUwfi();
//
// Disable DSLP in cortex before
// returning to the caller
//
HWREG(0xE000ED10) &= ~(1<<2);
}
请参照一下例程idle_profile, 里面有指明如何调用middleware 去操作LPDS模式。