微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > cc2650 RTC唤醒

cc2650 RTC唤醒

时间:10-02 整理:3721RD 点击:

进入standby mode后,如何基于ti-RTOS设置为RTC唤醒?请给个参考例子。

regards

ttttt ,

可以参考simpleBLEPeripheral工程里面的Util_constructClock()的用法哦。

hi Y,

//要求任务处理完后立刻进入standby mode,隔几秒后RTC唤醒MCU,再处理任务,再进入睡眠模式,如此循环。

//以下为大致处理流程:连接上后任务开始处理用户自定义事件,处理完后让MCU进入睡眠模式,5秒后再唤醒MCU。
//1.但睡眠后没能唤醒MCU,这如何解决?
//2.听说应用层不能直接调PowerCtrlStateSet()这个函数,该如何处理?
#define PERIODIC_WKUP_EVT 0x0010
#define PROCESS_SOMTHING_EVT 0x0011

static Clock_Struct periodicWakupClock;

void periodicWakupClockHandler(UArg arg )
{
events |= arg;
Semaphore_post(sem);
}

static void SimpleBLEPeripheral_taskFxn(UArg a0, UArg a1)
{
SimpleBLEPeripheral_init();
Util_constructClock(&periodicWakupClock, periodicWakupClockHandler, 5000, 0, false, PERIODIC_WKUP_EVT);

for (;;)
{
// Waits for a signal to the semaphore associated with the calling thread.
// Note that the semaphore associated with a thread is signaled when a
// message is queued to the message receive queue of the thread or when
// ICall_signal() function is called onto the semaphore.
ICall_Errno errno = ICall_wait(ICALL_TIMEOUT_FOREVER);
...

if (events & PERIODIC_WKUP_EVT)
{
events &= ~PERIODIC_WKUP_EVT;
}

if(events & PROCESS_SOMTHING_EVT)
{
events &= ~PROCESS_SOMTHING_EVT;
//start do something.
//.......
//.......
//.......
//handle done.
//睡眠前,开启时钟,以便5s后唤醒MCU。
Util_startClock(&periodicWakupClock);
PowerCtrlStateSet(PWRCTRL_STANDBY);
}
...
}
}

连接上后,唤醒任务开始处理事件,以便处理完后进入standby mode,在SimpleBLEPeripheral_processStateChangeEvt()中添加
case GAPROLE_CONNECTED:
...

events |= PROCESS_SOMTHING_EVT;
Semaphore_post(sem);

...
break;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top