Cortex-M内核指令WFI和WFI
2024-09-08 18:44:24
背景
今天阅读Nordic SDK里的example时发现里面功耗管理使用的power_manage()函数主要就是调用了一个__WFE()函数。查阅资料了解到WFE是一条汇编指令,它可以让CPU内核进入idle模式,与其相应的还有另外一条汇编指令WFI。
/**@brief Sleep until an event is received. */
static void power_manage(void)
{
#ifdef SOFTDEVICE_PRESENT
(void) sd_app_evt_wait();
#else
__WFE();
#endif
}
WFI与WFE
WFI和WFE都是cortex内核进入低功耗模式的指令,WFI指的是wait for interrupt,WFE指的是wait for event。从字面上理解,WFI是等待中断,WFE是等待事件。等待中断很好明白,中断是嵌入式编程常用的硬件机制,大家都很熟。但是等待事件到底是等待什么,事件和中断一样吗?那肯定是不一样的,不然就不会区分WFI和WFE了。
二者区别:
WFE
WFE实际上是受控于一个1bit event register。当CPU执行WFE指令时,如果event register没有被置位(0),则当前CPU就会进入低功耗模式;如果event register被置位(1)了,则会将事件寄存器对应当前CPU的位复位(0),然后返回继续执行接下来的指令,不会进入低功耗模式。
WFE进入低功耗模式后的唤醒条件:
- 发生了未被屏蔽的IRQ中断
- 发生了未被屏蔽的FIQ中断
- CPU对应的event register被置位(1)。如果通过这种方式唤醒,CPU会在唤醒后立即将event register复位(0)
WFI
WFI指令执行后CPU立即进入低功耗状态。
WFI进入低功耗模式后的唤醒条件:
- 发生了未被屏蔽的IRQ中断
- 发生了未被屏蔽的FIQ中断
最新文章
- 运行错误:error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or
- oracle--知识点汇总2---laobai
- Mybatis Generator生成工具配置文件详解
- 计算bean的和(java)
- java线程池初步理解
- 让计算机崩溃的python代码,求共同分析
- 【转载】Linux系统,设置Oracle开机启动,待整理
- jQuery中ajax调用当前页面方法
- JavaPersistenceWithHibernate第二版笔记Getting started with ORM-002Domain层详解及M etaModel
- [DLL] Dynamic link library (dll) 的编写和使用教程
- qt实现头像上传功能(写了4个类,朝十晚八的博客,非常好)
- [2017-07-18]ELK安装笔记
- C++——函数的调用
- H5_ 表单及其他新增和改良元素
- go的net/rpc用法
- python测试开发django-46.xadmin添加action动作
- python基础之循环语句,格式化输出以及编码
- pyhton字符串
- 【未通过】LintCode #366 斐波纳契数列
- sublime text怎样安装ctags来定位函数