nvic: nested vectored interrupt controller, 嵌套中断向量控制器。
中断与异常:
所有能打断正常执行流的事件都称为异常。 异常与中断的区别在于, 中断请求是来自于cortex内核外部, 比如各种片上外设, 外部中断请求等, 它们对于内核是”异步”的; 而异常则是由于cortex内核在执行指令或者访问存储等操作时所产生的, 对于cortex内核来说是属于”同步”的(可以参见cortex m3权威指南), 异常和中断一般可以不加区分的使用。
cortex内核可以支持多达240个外部中断, 编号16 – 255. 编号1 – 15的为系统异常, 编号0未被使用。
cortex支行中断嵌套, 允许高优先级的中断抢占低优先级的中断。 cortex m3/m4可支行多达256级的可编程优先级和128级的抢占, 但有3个系统异常优先级固定, 并且优先级为负数, 高于其它任何异常, 这三个异常分依次为 复位, nmi, hard fault.
nmi是non-maskable interrupt(不可屏蔽中断)缩写, 在stm32f4中, nmi被连接到时钟安全系统ccs(clock security system)异常上。
hard fault是总线fault, 存储管理fault, 用法fault所产生的结果, 详细信息可以参考cortex m3权威指南。
优先级寄存器
如上所述, cortex m3/m4支行多达256级的可编程优先级和128级抢占, 每个中断使用一个8位的寄存来配置优先级。 但实际一款芯片会根据情况做适当的精简, 裁剪掉表达优先级的几个低端有效位, 以减少优先级的级数。但是不管使用多少位来表达优先级, 都是以msb对齐的, 这主要是为了避免程序在不同器件之间移植时不会出现优先级顺序的更改。
抢占优先级和响应优先级
响应优先级也叫做 亚优先级 或者 子优先级, 每一个中断都有这两种优先级属性。 当一个低优先级的中断正在执行时, 如果有更高优先级的中断请求, 系统将会响应这个中断, 即发生中断嵌套。
如果两个中断的优先级相同, 则后来的中断要等到先来的中断执行完毕后才会被响应。 但是如果两个中断同时到达(或者都在挂起状态), nvic会根据它们响应优先级的高低来决定响应那一个。
如果它的的响应优先级也相同, 那么nvic会根据它们在中断向量表中的排序先后来决定先响应那一个。
在stm32中使用了4bit来表达抢占优先级和响应优先级, 有以下5种分组方式:
可见stm32一共提供了16级中断优先级.
来源;21ic
苹果公司扩大半导体性能
基于红热像仪实现水泥回转窑检测方案
模拟电路网络课件 第二十节:场效应管放大电路
通用自动驾驶子公司Cruise将新增1000员工和Waymo竞争加剧
小米雷军:明年5G手机将拉动换机潮,小米未来工厂12月正式建成
STM32单片机中抢占优先级和响应优先级的表达方式解析
一周概念股:安防厂商缺芯困境下的真实业态
荣耀Note10体验 平板级大屏幕之外还有均衡旗舰的体验
单片机简谱程序
关于电池极板外化成的知识点介绍
创远仪器发布T5260C系列矢量网络分析仪
比特币等虚拟货币价格大跌 集成电路行业受何影响
翱捷科技Wi-Fi6芯片-ASR595X荣获“2022年度中国IoT创新奖“
基于性别的暴力(GBV)的语言表达如何影响责任认知
中微公司推出新一代等离子刻蚀设备
4G技术在行动宽频设计中的应用
直插大功率电感不知道怎么选就看这里
2018年汽车IC市场的预测增长率为18.5%
一加7真机游戏体验屏幕画面像素惊呼叫绝
青岛FB28故障测距单元—CJ76的功能特点介绍