首页 > 其他分享 >M0休眠模式

M0休眠模式

时间:2023-07-05 19:23:11浏览次数:28  
标签:中断 模式 WFE 休眠 M0 寄存器 唤醒 处理器

一、特点

  • 两种休眠模式:普通休眠和深度休眠

  • 进入休眠的休眠方法:WFI 、WFE、利用退出休眠特性

  • 降低休眠时功耗的方法:

    • 停止部分或所有时钟信号
    • 降低MCU某部分时钟频率
    • 降低MCU各部分电压
    • 关掉MCU某部分电源

二、普通休眠和深度休眠模式

进人普通休眠模式还是深度休眠模式,是由SLEEPDEEP控制位决定的。该位位于系统控制块(SCB)区域中的系统控制寄存器(SCR),寄存器中还包括了 Cortex-MO处理器的低功耗特性的控制位。如果使用符合 CMSIS的设备驱动,可以用寄存器的名称“SCB->SCR”来访问系统控制寄存器
image

不同休眠模式及休眠操作的多种组合
image

三、等待事件和等待中断

WFE可以被中断请求以及事件唤醒
WFI则只能被中断请求和调试请求唤醒

3.1 WFE

  • 当使用WFE进人休眠以后,可以通过以下的中断或事件来唤醒;

    • 新挂起的中断(仅当系统控制寄存器中的SEVONPEND置位时有效)
    • 外部事件请求
    • 调试事件
  • Cortex-MO处理器内部有一个事件寄存器,并且只有一位有效。可以通过以下任何事件来置位事件寄存器:

    • 产生了需要服务的中断请求;
    • 异常进人和异常退出;
    • 不管中断是否允许,有新的挂起中断(仅当系统控制寄存器中的SEVONPEND置位时有效);
    • 发送事件(SEV)指令执行
    • 调试事件
  • 处理器唤醒后发生的多个事件会被当成一个事件

  • 处于WFE状态的处理器被事件唤醒后,寄存器就会被清零。如果在执行WFE指令时事件寄存器已经置位,则事件寄存器会被清零,WFE指令也会马上结束,并且处理器不会进人休眠。如果执行WFE指令时事件寄存器没有置位,则处理器会进人休眠,下一个事件将唤醒处理器,并且事件寄存器会保持清零状态。
    image

  • 在轮询循环中,通过WFE指令降低功耗(左边是没有加入WFE情况,右边是加入WFE指令情况)
    image

  • SCR中的SEVONPEND置位,任何挂起的中断都会产生事件并且唤醒处理器,如果执行WFE时中断已经处于挂起状态,则同一中断的新的请求不会产生事件,并且处理器也不会被唤醒

3.2 WFI

  • WFI指令唤醒:调试请求,或者比当前优先级高的中断请求
    image
  • 在WFI休眠期间,如果PRIMASK屏蔽了某中断,并且该中断的优先级大于当前优先级,那么该中断仍然可以唤醒处理器,只是在PRIMASK清除之前、处理器不会执行该中断处理。这种特性就可以关闭微控制器的某些部分(如外设总线时钟),而在唤醒后执行中断服务程序之前再打开。

为什么在 PRIMASK置位时,处理器不能执行中断服务程序却可以被唤醒?

根据这种设定,处理器可以在执行中断服务程序前进行系统管理任务(例如,恢复外设的时钟)
image

3.3 退出休眠特性(sleep-on-exit)

  • 当使能时,如果处理器从异常处理中退出时没有其他的异常等待执行,则自动进入等待中断的休眠模式。
    image
    image

  • 退出休眠特性减少了处理器的活动周期数,也降低了两次中断之间压栈和出栈过程所带来的功耗。每当完成一次中断服务程序并进入休眠后,由于下次中断请求也会导致这些寄存器的压栈,所以处理器就不必进行出栈操作

  • 退出休眠特性系统控制寄存器中的SLEEPONEXIT位控制,在中断驱动程序中对该位的置位操作一般由初始化操作的最后一步完成。否则,如果在初始化期间产生了中断则处理器可能此时就会进人休眠

四、唤醒条件

  • 当处理器利用退出休眠(sleep-on-exit)特性或者执行WFI指令休眠后,处理器会停止指令执行,当发生了中断请求(更高优先级)并且需要处理时,处理器就会被唤醒。如果处理器在异常处理中进入了休眠,并且新产生的中断的优先级与当前相等或者更低,那么处理器将不会被唤醒,并且保持在挂起状态

  • 执行WFE指令时,处理器的动作取决于事件锁存的当前状态:

    • 如果事件锁存置位,那么WFE指令完成.它将会被清零,并且处理器不会进人休眠;
    • 如果事件锁存清零,那么处理器会在事件发生前保持在休眠状态。
  • 事件可以是以下任何一个:

    • 待处理的中断请求;
    • 进人或退出中断处理;
    • 暂停调试请求;
    • 片上硬件的外部信号(设备相关)
    • SEVONPEND置位并且产生了新的挂起中断:
    • 执行了SRV(发送事件)指今
  • 处理器内的事件锁存可以保持过去发生的事件的状态,以前的事件也可以将处理器从WFE指令唤醒

  • WFE被中断请求唤醒

    • 该中断的优先级大于当前优先级
    • SEVONPEND置位且此时产生了新的挂起中断请求。利用SEVONPEND特性来从WFE休眠中唤醒处理,即使最新挂起中断的优先级跟当前的相同或者更低,在这种情况下,处理器不会进行中断处理,只会继续执行WFE之后的指令

image

五、唤醒中断控制器(WIC)

  • WIC是一个很小的中断探测逻辑,并且能够反映 NVIC的中断屏蔽功能。
  • WIC通过停止处理器的所有时钟信号来进一步降低功耗,甚至可以将处理器置于一种保持状态
  • 检测到一个中断时,WIC向微控制器中的电源管理单元(PMU)发送请求,以恢复处理器的电源和时钟信号,处理器就会被唤醒,进而处理该中断请求
  • WIC本身不包含任何的可编程寄存器,它的接口被耦合至Cortex-MO的 NVIC,这样处理器的中断屏蔽信息在休眠期间就会被自动地传送到WIC,而且WIC也只能在深度休眠期间被激活(SLEEPDEEP置位)
  • 使能 WIC深度休眠模式,需要设置电源管理单元中的控制寄存器
  • WIC使用状态保持功率门(SRPG)技术降低了Cortex—M0的待机功耗。
    image
  • 使用WIC时,Cortex-MO处理器应用了SRPG技术,可以在休眠期间关掉它的电源,从而减小微控制器的漏电流。在WIC模式深度休眠期间,WIC能够得到中断探测的结果。由于处理器的状态被保存在振荡器中,所以处理器在唤醒后基本上可以立即继续之前的操作
  • 在WIC模式深度休眠时,SysTick定时器将会停止,如果应用需要嵌人式OS并且OS还要持续工作,就需要使用其他的外设定时器来周期唤醒处理器。没有使用OS,需要WIC模式深度休眠时,使用外设定时器代替Systick定时器,产生周期性中断。
    image

标签:中断,模式,WFE,休眠,M0,寄存器,唤醒,处理器
From: https://www.cnblogs.com/lj15941314/p/arm_CortexM0LowPower.html

相关文章

  • 大连人工智能计算平台——华为昇腾AI平台——高性能计算HPC的异构计算——CPU和GPU的
    好消息,居然有经费了,账号可以接着用了,可以接着玩超算了。   ==========================================================......
  • WPF 在MVVM模式下应用动画
    一个简单的需求:当程序发生异常时候,在界面上动画显示异常信息。这个需求看似简单,只需要try……catch到异常,然后把异常的信息写入界面就OK了。但在MVVM时,就不是这么简单了。MVVM模式下,追求前后端的分离。然后catch到的异常,也只能在后台代码中。如果传递到前台呢?这自然就想到了Bin......
  • JAVA设计模式之建造者模式
    设计模式设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、......
  • 【操作教程】EasyCVR视频融合平台鉴权模式的两种配置方式
    EasyCVR平台可以实现海量资源的接入、汇聚、计算、存储、处理等,平台具备轻量化接入能力,可支持多协议方式接入,包括主流标准协议GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。今天我们来详细介绍一下EasyCVR平台的鉴权功能与配置方法......
  • PlayWright(十二)- PO模式
    1、PO模式是什么?PO,即PageObject,直译为页面对象,代表Web应用程序的一部分 具体什么意思呢,通俗来讲,一个页面有输入、点击、搜索功能,而且有很多页面,这时候我们就采用每个页面作为一个单独的page对象来维护编写,避免重复代码,层级也清晰,便于维护 2、以百度首页搜索为实例我们......
  • .Net下验证MongoDB 的 Linq 模式联合查询是否可用
    MongoDB.Driver类库提供了Linq查询的支持。然而,在使用Linq进行联合查询时,是否能够正确转换为MongoDB底层的查询语句还有待验证。今天,我将进行实验来验证一下。输出查询语句首先,通过订阅MongoClientSettings的功能,将查询语句输出。varsettings=MongoCli......
  • Python中对open读取文件内容时的mode模式解析
    1.Python可以使用open函数来实现文件的打开,关闭,读写操作;Python3中的open函数定义为:open(file,mode='r',buffering=None,encoding=None,errors=None,newline=None,closefd=True)其中mode列表为:'r'#openforreading(default)'w'#openforwriting,truncatin......
  • DDD领域设计模式
    微服务设计为什么要选择DDD?其实最近几年微服务架构的思想越来越普及,很多企业已经或者尝试从单体架构向微服务架构转型。微服务也成为很多中大型企业实施中台战略的不二之选。但是在微服务实施过程中有很多问题,单体应用到底应该如何去拆分微服务?边界到底怎么划分?微服务这个微字到......
  • 大连人工智能计算平台——华为昇腾AI平台——高性能计算HPC的单任务task的多CPU运行模
    超算是离我们平时生活比较远的一个事情,即使是对于一个计算机专业方向的学生来说,正好实验室得到了华为的超算平台的使用账号,于是就摸索了一下,不得不承认这个东西确实不是普通人能搞的明白的。 基本概念:一个工作Job可以开多个副本,每个副本都是mpirun-N所开出的,每个副本又被叫......
  • 数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘。
    数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘。图算法,搜索算法等算法码源见文末1.算法目录18大DM算法包名目录名算法名AssociationAnalysisDataMining_AprioriApriori-关联规则挖掘算法AssociationAnalysisDataMining_FP......