在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体:  
typedef struct  
{     
   vu32   ISER[2];    //2个32位中断使能寄存器分别对应到60个可屏蔽中断   
   u32     RESERVED0[30];           
   vu32   ICER[2];   //2个32位中断除能寄存器分别对应到60个可屏蔽中断   
   u32    RSERVED1[30];    
   vu32   ISPR[2];   //2个32位中断挂起寄存器分别对应到60个可屏蔽中断,可挂起正在执行的中断   
   u32     RESERVED2[30];    
   vu32   ICPR[2];   //2个32位中断解挂寄存器分别对应到60个可屏蔽中断,可解除被挂起的中断    
   u32     RESERVED3[30];    
   vu32   IABR[2];    //2个32位中断激活标志寄存器,可读取该寄存器判断当前执行的中断是哪个,中断执行完硬件清零,只读    
   u32     RESERVED4[62];    
   vu32   IPR[15];    //15个32位中断优先级分组寄存器,每个中断分配8个bit,对应到4*15=60个中断 
} NVIC_TypeDef;

IPR[15]    
15个32位中断优先级分组寄存器,每个中断分配8个bit,对应到4*15=60个中断。但是并不是8个bit都被使用了,而是仅仅只用到了高四位,这样就可以得到5组16级的中断优先级。

高位的4个bit又分为抢占优先级和子优先级,抢占优先级在前,子优先级在后。两种类型优先级占用的位数又可以通过SCB->AIRCR寄存器的bit[10:8]来配置。

数字越小优先级越高,高优先级的中断可以中断低优先级的中断,但是抢占优先级相同时子优先级高的无法中断子优先级低的中断。

结合实例说明一下:假定设置中断优先级组为2,然后设置中断28(Tim2中断)的抢占优先级为3,响应优先级为2。中断6(外部中断0)的抢占优先级为4,响应优先级为0。中断7(外部中断1)的抢占优先级为3,响应优先级为0。那么这3个中断的优先级顺序为:中断7>中断28>中断6。

上面例子中的中断28和中断7都可以打断中断6的中断。而中断7和中断28却不可以相互打断!

STM32_NVIC寄存器详解的更多相关文章

  1. [转载]ARM协处理器CP15寄存器详解

    用于系统存储管理的协处理器CP15  原地址:http://blog.csdn.net/gameit/article/details/13169405 MCR{cond}     coproc,opc ...

  2. 2.3 ARM寄存器详解

    一共有37个寄存器 1. 31个通用寄存器 2. 6个状态寄存器 R13作为堆栈指针 R14链接寄存器 1.保存函数返回地址 2. 异常返回地址 R15程序计数器(PC指针) 程序状态寄存器 只有在异 ...

  3. 022 ARM寄存器详解

    R13:堆栈指针寄存器 SP R14:链接寄存器 LR R15:程序计数器 PC指针 CPSR:当前程序状态寄存器 SPSR:备份程序状态寄存器

  4. 大脸猫讲逆向之ARM汇编中PC寄存器详解

    i春秋作家:v4ever 近日,在研究一些开源native层hook方案的实现方式,并据此对ARM汇编层中容易出问题的一些地方做了整理,以便后来人能有从中有所收获并应用于现实问题中.当然,文中许多介绍 ...

  5. C51寄存器详解(Reg51.h)

    Reg51.h 这个头文件将C程序中能用到的寄存器名或寄存器中某位的名称与硬件地址值做了对应,在程序中直接写出这些名称,集成开发环境就能识别,并最终转换成机器代码,实现对单片机各硬件资源的准确操控. ...

  6. Part2_lesson3---ARM寄存器详解

    进入到ARM Architecture Reference Manual这个文档里面的A2.3 Registers R13在程序中通常用于充当SP堆栈指针的!! R14在程序当中通常用于充当LR(链接 ...

  7. ARM协处理器CP15寄存器详解【转】

    本文转载i自;https://blog.csdn.net/gameit/article/details/13169405 用于系统存储管理的协处理器CP15   MCR{cond}     copro ...

  8. 80X86寄存器详解<转载>

    引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些基础知识, 自然,还是得从最基础的开始,那就从汇编语言开刀吧, 从汇编语言开刀的话,我们必须还先要了解一些其他东西, 像  CPU ...

  9. x86—EFLAGS寄存器详解(转载)

    鉴于EFLAGS寄存器的重要性,所以将这一部分内容从处理器体系结构及寻址模式一文中单独抽出另成一文,这部分内容主要来自Intel Developer Mannual,在后续的内核系列中遇到的许多和EF ...

随机推荐

  1. [luogu_U15116]珈百璃堕落的开始

    https://www.zybuluo.com/ysner/note/1239458 题面 给定\(n\)个二元组\((x,y)\),问有多少种方案,使得选出其中几个后,\(\sum x=\sum y ...

  2. PCB Genesis 无需启动Xmanager图形窗口运行脚本 实现方法

    从事PCB工程行业的都知道,启动Genesis需2个exe程序(Xmanager.exe与get.exe)需一起启动才可以打开我们熟悉的软件, 而Xmanager是图形窗口是给用户UI交互使用的,如果 ...

  3. Linux扩展正则表达式

    1. 扩展正则表达式 1.1 +(加号) + 表示前一个字符出现1次或1次以上 1.1.1 理解+ 要求:取出文件内容连续出现的小写字母 [root@oldboyedu50-lnb /oldboy]# ...

  4. Linux系统下vim常用快捷键及功能

    1. 什么是vim Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在vi的基础上改进和增加了很多特性. vim编辑器是Linux系统下标准的编辑器,作用相当于windows系统中的记 ...

  5. es6 import 与 export

    1.export 命令 export 命令用于规定模块的对外接口. 一个模块就是一个独立的文件.该文件内部所有的变量,外部无法获取.要想外部能够读取模块内部的某个变量,就必须使用 export 关键字 ...

  6. vue中时间控件绑定多个输入框

    首先去下载laydate时间控件,引入到相应的模板中 <input type="text" val-required="" value="&qu ...

  7. NOI2015 软件包管理器(树链剖分+线段树)

    P2146 软件包管理器 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决 ...

  8. [App Store Connect帮助]三、管理 App 和版本(4)创建新版本

    当您准备分发 App 的新版本时,您创建的新版本使用您为原始版本创建的 App 记录.该新版本将对购买过先前版本的顾客免费可用. 各版本使用的 Apple ID(App 标识符).SKU 和套装 ID ...

  9. Appium + python - weixin公众号操作

    from appium import webdriverfrom time import sleep desired_caps = { "platformName":"A ...

  10. 【Kafka】《Kafka权威指南》——从Kafka读取数据

    应用程序使用 KafkaConsumer向 Kafka 订阅主题,并从订阅的主题上接收消息 . 从 Kafka 读取数据不同于从其他悄息系统读取数据,它涉及一些独特的概念和想法.如果不先理解 这些概念 ...