TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1310: CC1310 nortos裸机如何实现standby模式休眠和唤醒

Part Number:CC1310

请问CC1310 nortos裸机如何实现standby模式休眠?并可以用IO外部中断随时立刻唤醒,从唤醒后的程序点开始恢复执行(不复位)。

我已经设置了一个IO口(IOID_4)作为外部中断,如下代码:

然后按照这个链接 (www.ti.com.cn/…/swra486a.pdf) 的低功耗设置说明,试了很久都没法实现(程序如下图片),进入休眠就唤醒不了了

Galaxy Yue:

您好,进入standby

https://dev.ti.com/tirex/content/simplelink_cc13x0_sdk_2_40_00_20/docs/simplelink_mcu_sdk/Users_Guide.html#nortos-power-management

可以看一下这个

,

Galaxy Yue:

唤醒可以看一下这个

https://e2echina.ti.com/support/machine-translation/mt-sub-1-ghz/f/mt-sub-1-ghz-forum/238023/cc1310-i-o

,

zhang wei:

试了一下,我的程序里面如果只用Power_idleFunc()这个休眠函数,是可以用IO外部中断唤醒的,但是我们想要实现的应用的是(如下面代码所示):前期有一段确定的休眠时间,所以使用SDK里面的usleep函数,中期会工作一段时间,而后期的休眠时间不确定,由外部中断什么时候来决定,所以使用Power_idleFunc()函数,然后测试发现这样组合用了两个休眠函数后,程序跑到后期Power_idleFunc()函数那里就无法唤醒了,这是什么原因呢?

,

Galaxy Yue:

如果你只使用usleep(5000);可以唤醒吗?

 可能是两个组合起来,对外部中断难以响应

,

zhang wei:

1、只使用usleep(5000)可以唤醒,只是usleep函数,中途唤醒的话,仍然要等待5000us超时,程序才能往下运行;

2、组合之后,外部中断难以响应的问题怎么解决?

,

Galaxy Yue:

usleep是一个阻塞函数,会阻塞当前线程的进行

建议把usleep()函数改成使用定时器

,

wei zhang:

怎么样改?

,

Galaxy Yue:

不用usleep  改用定时器 

,

wei zhang:

standby休眠就只用Power_idleFunc()函数吗,然后用定时器唤醒?Power_idleFunc休眠的电流是否与usleep休眠的电流是一样的呢?

,

Galaxy Yue:

1.

wei zhang 说:standby休眠就只用Power_idleFunc()函数吗,然后用定时器唤醒

用定时器实现类似usleep的功能,这个我再想一下

2.

电流测量需要你根据你的项目去测

nortos可以参考SDK中的例程C:\ti\simplelink_cc13x0_sdk_4_20_01_03\examples\nortos\CC1310_LAUNCHXL\drivers\pinStandby测量

它已经设置好了电源策略,会在休眠期间自动进入standby模式,测量时注意断开调试器,仅使用外部的VDD和GND供电

3.

你再调试一下程序,看看程序跑到哪一行 就停止

,

wei zhang:

好的,麻烦帮忙看看定时器怎么样实现usleep,我们的产品对功耗要求比较高,还有一个问题就是Power_idleFunc()是进入idle模式还是standby模式呢,如果开了射频后调用Power_idleFunc(),是不是直接跳过不进入休眠了?

,

Galaxy Yue:

Power_idleFunc()函数描述:

要添加到应用程序空闲循环的电源功能。

应将此函数添加到应用程序空闲循环中。 (执行此操作的方法取决于所使用的操作系统。)此函数将在适当的时候调用配置的电源策略函数。 要调用的特定策略函数在应用程序定义的 Power 配置对象中配置为“policyFxn”。

进入idle模式还是standby模式应该和您使用的电源方式有关

,

wei zhang:

我现在板卡上的CC1310是1.8V供电,LDO模式

,

Galaxy Yue:

前期使用看门狗会比较符合你们的前期需求吗?

,

wei zhang:

进入休眠后,让看门狗超时复位一下?

,

Galaxy Yue:

Power_idleFunc()是进入idle模式

前期这个处理我再想一下

,

Galaxy Yue:

明确一下你们的流程

前期:由正常工作状态进入休眠状态 (确定的休眠时间)

中期:由休眠状态唤醒然后工作一段时间

后期:再进入休眠是可以用IO外部中断唤醒的(休眠时间不确定)

是这样吗

,

wei zhang:

是的,就是这样的流程

,

Galaxy Yue:

前期可以考虑

1.task_sleep() 是让当前任务停止,并未进入低功耗  

task_sleep(n)可以让当前task处于block状态,然后在设定的n时间后,该task变为ready状态。

当所有user task都处于blocking状态时,系统就进入休眠状态。当有task处于ready状态时,系统就退出休眠,继续执行

2.Power_setConstraint和Power_releaseConstraint 不过是在rtos中的

https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_14_03_28/exports/tirtos_full_2_14_03_28/docs/doxygen/html/_power_8h.html

 

提供思路,具体实现还是看你的项目

,

wei zhang:

哦哦,好的,上面的第2点是什么意思?

,

Galaxy Yue:

是两个api  不过是在ti-rtos系统中的api

,

wei zhang:

今天下午试了一下,下面这样的代码操作,也能满足我们的那个流程要求,你看看这样操作有没有什么问题?

,

Galaxy Yue:

这个只有函数调用,看不出来更多信息,您可以运行尝试一下。符合您的流程能正常休眠然后工作就可以

,

wei zhang:

我想问一下Power_idleFunc()进入休眠,可以用普通的定时器唤醒吗

,

Galaxy Yue:

可以的

赞(0)
未经允许不得转载:TI中文支持网 » CC1310: CC1310 nortos裸机如何实现standby模式休眠和唤醒
分享到: 更多 (0)