之前对Kinetis的低功耗系统进行学习的过程中,大体上了解NVIC是主管同步唤醒事件,而AWIC是主管异步唤醒事件,同步和异步主要指的是是否与CPU的时钟保持同步。NVIC是在CPU醒着的时候(有时钟供应)的情况下接受中断请求,处于ARM核心内部,需要CPU的时钟供应以维持工作。AWIC可以在CPU休眠时(在Deep Stop模式中)通过异步机制继续响应来自存活外设的中断请求以唤醒CPU。但是在之前的理解中,AWIC和NVIC是相互独立工作,分别接入CPU中的。这也导致了我在理解例如LLWU等从特殊低功耗模式下唤醒的执行序列时仍存在诸多疑惑(唤醒后到底是先复位还是先执行中断服务程序?)。

今天详读一份Kinetis的datasheet时,注意到如下一段关于AWIC说明:

此处的意思是“AWIC在异步模式下(包括CPU的系统时钟停止供应)捕获到事件,AWIC恢复系统时钟(包括CPU时钟)。系统时钟恢复后,NVIC恢复工作,监测到中断事件发生,然后执行常规的基于NVIC的中断服务处理程序”。这就说明AWIC和NVIC有交接工作的关系:AWIC从一些Deep Sleep模式中恢复系统时钟,它的工作内容就结束了。系统时钟恢复后,NVIC自动接替事件的响应过程,启动中断服务程序处理相应的中断事件。

再拿文中提到的一个案例进行分析:

由此可以解释,当使用LLWU(隶属于AWIC的范畴)这类超低功耗掉电模式的唤醒事件监控模块时,会先唤醒系统,然后通过NVIC的引导开始执行中断服务程序,当系统从中断服务程序的高优先级的特权状态中回归到常规优先级的普通状态时,开始启动复位操作序列(此时的复位操作序列感觉像是一个最低优先级的中断服务程序,同LLWU的中断服务组成“咬尾中断”,也就是说指令序列从来都没有回到过main函数)(当然也有另一种可能的解释,就是LLWU的中断服务最后面由硬件自动添加了一段复位操作序列,用户看不到,也不可编程,此时指令序列也没有回到main函数)。总之,结论是“先执行中断服务程序再复位”,那么在这种情况下,LLWU的中断服务程序一般可以用来在时钟完备的情况下保存一下复位前的现场信息。这样在复位之后,在新一轮的生命周期中,使用上一个生存周期末尾保存的现场信息执行一些对应的处理工作。

关于ARM Kinetis MCU唤醒源NVIC和AWIC的工作过程解惑相关推荐

  1. 【Android休眠】之PowerKey唤醒源实现【转】

    转自:https://blog.csdn.net/u013686019/article/details/53677531 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  2. 【Android休眠】之PowerKey唤醒源实现

    版本信息: Linux:3.10 Android: 4.4 http://blog.csdn.net/u013686019/article/details/53677531 一.唤醒源 设备休眠后,通 ...

  3. 一文讲解单片机、ARM、MCU、DSP、FPGA、嵌入式错综复杂的关系

    一文讲解单片机.ARM.MCU.DSP.FPGA.嵌入式错综复杂的关系 首先,"嵌入式"这是个概念,准确的定义没有,各个书上都有各自的定义.但是主要思想是一样的,就是相比较PC机这 ...

  4. 手机功耗之唤醒源详解

    和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一.手机功耗问题浅析博文 二.Sleep .suspend 三.SPM (System Power Ma ...

  5. Arm Cortex-M23 MCU,Arm Cortex-M33 MCU与RISC-V MCU技术

    Arm Cortex-M23 MCU,Arm Cortex-M33 MCU与RISC-V MCU技术 本文介绍以下技术 Arm Cortex-M23 MCU Arm Cortex-M33 MCU RI ...

  6. S32K3xx低功耗获取唤醒源

    S32K3xx低功耗获取唤醒源 目录 S32K3xx低功耗获取唤醒源 一.获取复位原因 二.获取唤醒源 1.思路分析 2.程序分析 在上一篇学习总结中知道S32K3xx只有两种运行模式:RUN和Sta ...

  7. 电源管理-配置唤醒源

    由上一次的分析可知,在suspend_ops->enter(state);中会进行唤醒源的配置.下面分析平台代码: //位于linux-3.18\arch\arm\plat-samsung\pm ...

  8. MTK平台唤醒源分类

    SPM R12寄存器记录MCU的唤醒源,MCU被唤醒时log中会将具体唤醒源打印: #define R12_PCM_TIMER_EVENT (1U << 0) ----> SPM 定 ...

  9. linux内核唤醒源,从挂起到实现,你知道内核是如何实现的?

    导读 Linux 内核提供了多种睡眠状态目前总共有四种睡眠状态,分别是:挂起到空闲加电待机.挂起到内存和挂起到磁盘.这些状态分别对应 ACPI 的 4 种状态:S0,S1,S3 和 S4.挂起到空闲是 ...

最新文章

  1. 对《软件工程》第四章的理解
  2. 柳传志:联想又遇新坎儿 要做斯巴达克方针
  3. MYSQL中删除重复记录
  4. Google Guava Cache 移除监听器
  5. 【哲学探讨】娱乐至死
  6. PageRank算法简介及Map-Reduce实现
  7. fhq treap ------ luogu P3369 【模板】普通平衡树(Treap/SBT)
  8. MVC + LigerUI 做后台管理还真是清爽
  9. Qt工作笔记-Qt文档笔记-QPainter::drawText写文本并且居中
  10. According to the overall view of the patent
  11. MySQL学习十四创建和操纵表
  12. GetStyle,ModifyStyle,GetExStyle,ModifyStyleEx
  13. 稳居商用车ADAS前装第一梯队,这家中国本土供应商靠什么?
  14. 第1课:郭盛华课程_零基础学Linux操作系统
  15. Python高级编程第2版_张亮 阿信(译)_人民邮电出版社_2017-10_v2_完整版
  16. IDEA环境下模块的右下角蓝色小方块缺失的解决方法
  17. HTML网页入门练习——淘宝抢购模块设计
  18. SpringBoot Mybatis 读写分离配置
  19. 新加坡国立大学Xinchao Wang老师招收图神经网络方向博士/博后
  20. capacitor 安卓插件版本兼容问题

热门文章

  1. 滴水逆向作业——指针04
  2. 奥塔在线:基于token认证的基础知识详解
  3. 【已解决】No module named “win32com“ win32com 无法导入
  4. WiFi信号覆盖面积小?如何扩大Wifi信号覆盖范围?
  5. (翻译)自我监督模式(Self-Monitoring)
  6. CobaltStrike脚本
  7. 仿QQ空间的一款APP(二)
  8. 迅雷5单磁极 v5.9.99.999【单文件-下磁力】解除敏感资源限制
  9. SpringBoot从入门到精通教程(七):集成Redis
  10. 《深入浅出SQL》问答录