博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32_NVIC寄存器详解
阅读量:5298 次
发布时间:2019-06-14

本文共 943 字,大约阅读时间需要 3 分钟。

在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却不可以相互打断!

转载于:https://www.cnblogs.com/wt88/p/9767506.html

你可能感兴趣的文章
TileMap
查看>>
JS属性大全
查看>>
java复制文件
查看>>
第一册:lesson seventy nine.
查看>>
GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
查看>>
团队作业
查看>>
数据持久化时的小bug
查看>>
mysql中key 、primary key 、unique key 与index区别
查看>>
bzoj2257
查看>>
Linux查看文件编码格式及文件编码转换<转>
查看>>
Leetcode: Find Leaves of Binary Tree
查看>>
Vue 模板解释
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>