微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > cc1310如何退出待机模式问题

cc1310如何退出待机模式问题

时间:12-23 整理:3721RD 点击:

您好,我使用Task_sleep(5000000 / Clock_tickPeriod);让系统进入待机模式,待机时间为5秒,并使能一个引脚中断,用于唤醒cc1310。但实测中,在待机模式时,我通过按一个按键触发中断,的确能唤醒cc1310,但唤醒后代码执行中断函数后退出似乎又进入待机模式,除非5秒过后才退出。

所以请问怎么才能唤醒cc1310并且再唤醒后执行Task_sleep的下一句代码?

LaoSheng Lin,

你是在task的执行函数里面调用Task_sleep()的吗?

把你代码贴上来看看呗。

您好,我是在task中调用Task_sleep的。

在task中首先我注册按键下降沿中断

const PIN_Config keyPinTable[] = {
KEY | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE,
PIN_TERMINATE
};

keyPinHandle = PIN_open(&keyPinState, keyPinTable);

if (keyPinHandle != 0)
{
PIN_registerIntCb(keyPinHandle, &keyCallbackFxn);
}

然后再一个大循环中每睡眠5秒后进行一次RF发送

while(1)

{

RF_TxPacket txPacket = {0};
/* Create packet with incrementing sequence number and random payload */
txPacket.payload[0] = (uint8_t)(seqNumber >> 8);
txPacket.payload[1] = (uint8_t)(seqNumber++);
txPacket.payload[2] = battMeasure();
uint8_t i;
for (i = 3; i < PAYLOAD_LENGTH; i++)
{
txPacket.payload[i] = i;//rand();
}
txPacket.len = PAYLOAD_LENGTH;
txPacket.dstAddr[0] = 0xaa;
txPacket.dstAddr[1] = 0x55;

txPacket.absTime = 0;/*RF_getCurrentTime() + RF_ms_To_RadioTime(1000);*/

LED_Set(Led_Red,1);   //红灯亮
RF_transmit(rfHandle, &txPacket);
LED_Set(Led_Red,0);  //红灯灭

Task_sleep(5000000 / Clock_tickPeriod);
}

在按键中断函数中让蓝灯反转

void keyCallbackFxn(PIN_Handle handle, PIN_Id pinId)
{
LED_Set(Led_Blue, !PIN_getOutputValue(LED_BLUE));
}

结果的现象是:我在进入待机时,按下按键,蓝色灯反转,说明进入中断,但红色灯不会亮即不发送RF,需等待机5秒后才发送RF

LaoSheng Lin,

你这样按键也不会唤醒task呀,你按键中断跟这个task没任何关系,中断归中断,task还在5秒中睡着呢,所以肯定是每隔5秒醒来一次调用RF_transmit(),所以就是你看到的现象。

正确的做法你应该用semaphore,while(1) 之后等待semaphore, 这个时候这个task就是在sleep的, 然后按键中断的处理函数发送semaphore去唤醒task,不要用sleep函数。

如果你同时想要每隔5秒RF_transmit一下,那么你就要结合timer来做,用的也不是sleep。在上面我说的方法的基础上,设置个timer,每隔5秒用semaphore唤醒task,给task一个event, 在这个event中重新设置timer。如果收到按键中断, 也给个event给task,task在这个event下面停止timer,然后重启5秒的timer。

谢谢Y的指点,我明白了,也就是说TI-RTOS自动会进入待机模式的吧,难怪我以前测试待机电流时,使用Task_Sleep和不使用时的功耗都差不多,都小于1uA

LaoSheng Lin ,

是的.

只要没有关闭standby模式,TI-RTOS会自动进入standby模式。

您好!我用例程pinStandby测试电流,发现跟手册描述相差很大,进入Task_sleep之后,电流在770uA左右,硬件和软件都检查了,没发现问题在哪里。

请问,我应该从哪些方面入手检查这个问题呢?谢谢!

我发现问题了,是我的32.768KHz晶体没有起振,导致休眠电流变大,现在已经解决了。进入Task_sleep之后电流只有0.3uA左右。

是否能提供例程参考参考!因为对TI的库函数还是不太熟悉!

0.3uA左右的电流,最大会不会超过资料上说的0.7uA?

standby模式下,电流会超过资料上说的0.7uA吗?

请问你是如何设置在standby模式下 电流消耗只有0.3uA呢?我测试总是在几个uA降不下去,能指导下吗?

hi, Meng Zhang4 

您好,你的standby模式下的例程是否可以给我参考一下,谢谢你啦!

best regards ,

fenglin

SDK里的empty和pinStandby都可以作为standby模式的例程。

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

网站地图

Top