Hi,各位TI大神,
我想实现芯片在无连接时,进入低功耗,有链接是正常工作。看了好久的RTC资料,还是迷迷糊糊,根本就没有找到关于RTC的注册IRQ函数。
但是,我在代码中发现Clock_Struct结构,于是想试试这个函数。
代码:
//注册定时器
Util_constructClock(&WakeUpClock,WakeUp_clockHandler,//SPPBLEServer_clockHandler, SBP_BROADCAST_PERIOD, 0, false, SBP_BROADCASE_EVT);
//定时器中断服务程序
static void WakeUp_clockHandler(UArg arg)
{
if((gapProfileState == GAPROLE_CONNECTED) || (gapProfileState == GAPROLE_CONNECTED_ADV))
{
Power_setPM();
}
else
{
Power_relPM(); }
Util_startClock(&WakeUpClock);
}
//进入standby,开启定时器
void AT_CmdSleep(char **ppBuf)
{
extern void Util_startClock(Clock_Struct *pClock);
extern Clock_Struct WakeUpClock;
Util_startClock(&WakeUpClock);
//AONRTCEventClear(AON_RTC_CH0);
//AONRTCCompareValueSet(AON_RTC_CH0, 32258);
//SysCtrlAonSync();
AT_SendEvent(eAT_E_SleepMode);
delay_ms(500);
// release constraints for Standby and idle mode
Power_releaseConstraint(Power_SB_DISALLOW);
Power_releaseConstraint(Power_IDLE_PD_DISALLOW);
Power_sleep(Power_STANDBY, NULL, 0);
}
请问:Clock_Struct 这个底层是调用RTC吗?
Frank Mei:
Hi ,
我最近发现很奇怪的现象。
void AT_CmdSleep(char **ppBuf){ extern void Util_startClock(Clock_Struct *pClock); extern Clock_Struct WakeUpClock; //Util_startClock(&WakeUpClock);
//AONRTCEventClear(AON_RTC_CH0); //AONRTCCompareValueSet(AON_RTC_CH0, 32258); //SysCtrlAonSync(); AT_SendEvent(eAT_E_SleepMode);
delay_ms(500); // release constraints for Standby and idle mode Power_releaseConstraint(Power_SB_DISALLOW); Power_releaseConstraint(Power_IDLE_PD_DISALLOW); Power_sleep(Power_STANDBY, NULL, 0);
}
执行这段代码进入standby模式,烧录完成一次后的第一次执行,电流可以到达10uA左右,BLE广播看不见了。(我认为这种状态才是真正的standby模式)
重新上电,再次执行这段代码,电流0.8mA,此时可以搜索到BLE的广播。
这大神帮我一下,这个standby怎么进入。
Yan:
回复 Frank Mei:
Frank Mei,
你代码里面BLE的广播是在哪里调用的?
在你想stand by之后?