中断 NVIC的概念和原理

2023-11-10 10:14
文章标签 概念 原理 中断 nvic

本文主要是介绍中断 NVIC的概念和原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.什么是中断

中断: 由于中断源的触发,常规程序被打断, CPU转
而运行中断响应函数,而后又回到常规程序的执行,
这一过程叫做中断。
中断优先级的概念
在这里插入图片描述

在这里插入图片描述
中断的意义和作用在这里插入图片描述
中断处理的过程和术语
在这里插入图片描述

STM32 GPIO外部中断简图在这里插入图片描述
从反向介绍

2.NVIC基本概念

内核中NVIC的位置 核心外设!!!在内核内部
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
ST公司裁剪了 中断优先级在这里插入图片描述
NVIC的内部结构
在这里插入图片描述
由NVIC控制所有中断源 可屏蔽和接受中断源 0 1 2 3… 然后进入中断仲裁 (每一个中断源的中断优先级都存储在图片上的四个bit位中)中断优先级分组详细内容在下面

NVIC寄存器介绍
在这里插入图片描述
中断使能寄存器 一共256个位 其中240个位是对应外部中断 寄存器写1就是使能(16个位保留)
中断除能寄存器 和使能寄存器的功能相反 寄存器位数一样
应用程序中断及复位控制寄存器 只有一个寄存器 一共32位 但是我们只使用位10到位8
中断优先寄存器 对应240个外部中断 一个寄存器对应的是8个位 但是stm32只使用四个位
NVIC工作原理
在这里插入图片描述
外部中断(240个里的四个) 进入内核中的NVIC 进入使能和除能寄存器 如果使能就进入IPR寄存器 除能就无法进入 再经过IPR寄存器和AIRCR寄存器的中断优先级控制
排列出中断的优先级进入CPU进行处理
而内部中断则是直接进入SHPR 寄存器(地位和IPR一样) 在进入CPU处理

中断向量表

中断向量表的概念在这里插入图片描述
就是每一个中断函数都有一个地址储存在flash的目录 当中断函数对应的中断源产生请求中断 那么系统就会去flash的目录找到对应的中断函数的地址跳转到中断函数执行 (这个目录会根据中断优先级排列各自中断函数的地址 0 1 2 3…)
在参考手册中查看中断向量表
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
其中main的等级最低 任何中断函数都可抢夺CPU使用权

stm32中断优先级基本概念

在这里插入图片描述
抢占优先级可以打断 响应优先级不可以被打断 (就比如1和2的相应优先级一样 1正在执行 2无法打断1的执行来执行 同理 1也不可以打断2正在执行的程序来执行)
如果要同时处理两个响应优先级相同的中断 就要看自然优先级
比如优先级为0就大于优先级为1 以此类推(负数比0更优先执行)

stm32中断优先级分组

STM32中断优先级分组 本来是NVIC有8个分组的 但是由于IPR只使用四个位 所以分组减少了3组 总共为5个组
在这里插入图片描述
第0组有0个抢占优先级 有16个响应优先级 第一组有2个抢占优先级 8个响应优先级
第二组有4个抢占优先级以此类推
中断优先级举例
在这里插入图片描述
如RTC和EXTI1的抢占优先级一样 响应优先级高的先执行(数字越小越先执行)
Systick和EXTI0的抢占优先级和响应优先级一样 就看自然优先级 谁小谁先执行
再举一个列子
在这里插入图片描述
第一幅图
第一条虚线是常规程序 main函数 然后收到了A的中断请求 执行A的中断函数 然后在执行A的中断函数中又收到了B的中断请求 因为B的抢占优先级高于A所以会进行中断嵌套就是在执行A的中断函数的过程中执行B的中断函数(跳转到B的中断函数) 待中断A B完成后再回到main函数中执行常规操作
第二幅图
在执行常规程序时 收到了A的中断请求 执行A的中断函数 又收到了BC的中断请求因为C的抢占优先级比B高(数字越小越高)所以先执行C的在执行B的
第三幅图
同第二幅图一样 只不过C是因为子优先级0小于1 C的子优先级更高

脉冲型中断源和电平型中断源

在这里插入图片描述
脉冲中断源不需要手动清除中断源 而电平型中断源需要手动清除
中断的四种状态
在这里插入图片描述
第三个图就是活动且挂起 就是在执行中断A的函数中 A的中断请求又一次发起在挂起状态
第四个图是A在活动 B也在活动(在B的中断函数执行的过程当中)

中断协作模型

在这里插入图片描述
由片上外设产生中断源

如何使用NVIC

标准库在这里插入图片描述
第一个函数是用来调整中断的优先级的(虚线的位置 给几个位给抢占优先级给几个位给子优先级)
第二个函数是用来选择中断源的或者屏蔽中断源的
这个函数NVIC_PriorityGroupConfig
在这里插入图片描述调用这个函数传入相应的宏定义 就可以划分抢占优先级和子优先级 在图片中划分了两个抢占优先级和两个子优先级 (如果不想发生中断嵌套就把抢占优先级划分为0)
NVIC初始化函数
在这里插入图片描述
就是声明一个结构体 然后往结构体内写值 这个值可以直接为数字也可以为宏定义 这个结构体的第一个成员就是中断源的名称 (去IRQn_Typq寻找)第二个成员是抢占优先级的值 第三个成员是子优先级的值 (比如抢占优先级的值为0 就前两个二进制位位00 然后子优先级为2 对应的二进制位为10 那四个位就为0010 中断优先级)第四个成员就是开关 使能中断

在这里插入图片描述

这篇关于中断 NVIC的概念和原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382016

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数