TI工程师您好。
我正在使用rfEasyLinkRx做一些改进。我的想法是在EasyLink_receiveAsync(rxDoneCb, 0);的超时后,让射频进入低功耗睡眠,比如设置睡眠5s,然后5s后再重新开启接受。我曾经使用Task_Sleep,发现根本没有睡眠。电流依然在5.4mA左右。请问这个该如何操作。谢谢您!
Felix ZF:
你应该在超时后执行完EasyLink_abort,确定RF部分退出rx状态之后,再使用Task_Sleep
user3895839:
回复 Felix ZF:
TI工程师:
您好!我仿真过,程序会一直进入红色标注的部分
EasyLink_receiveAsync(rxDoneCb, 0);
/* Wait 300ms for Rx */
if(Semaphore_pend(rxDoneSem, (WAKEUP_TIMEROUT / Clock_tickPeriod)) == FALSE)
{ /* RX timed out abort */
if(EasyLink_abort() == EasyLink_Status_Success)
{ /* Wait for the abort */
Semaphore_pend(rxDoneSem, BIOS_WAIT_FOREVER);
}
}
Task_sleep(5000000 / Clock_tickPeriod);//sleep for 5s
执行完应该就退出RX了吧?如果没有退出该如何判断当前状态并退出RX模式,进入到睡眠。
谢谢!
Felix ZF:
回复 user3895839:
进入你标红的部分,是因为没有接收到数据,这个是正常的。
你可以看一下进入红色部分之后,代码能否运行到rxDoneCb里面的else if(status == EasyLink_Status_Aborted)分支。
如果可以,说明通过EasyLink_abort命令成功结束了当前的rx状态。
这时,代码可以运行到Task_sleep,这时,应该就可以进入睡眠了。