中断 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

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

MySQL的隐式锁(Implicit Lock)原理实现

《MySQL的隐式锁(ImplicitLock)原理实现》MySQL的InnoDB存储引擎中隐式锁是一种自动管理的锁,用于保证事务在行级别操作时的数据一致性和安全性,本文主要介绍了MySQL的隐式锁... 目录1. 背景:什么是隐式锁?2. 隐式锁的工作原理3. 隐式锁的类型4. 隐式锁的实现与源代码分析4

MySQL中Next-Key Lock底层原理实现

《MySQL中Next-KeyLock底层原理实现》Next-KeyLock是MySQLInnoDB存储引擎中的一种锁机制,结合记录锁和间隙锁,用于高效并发控制并避免幻读,本文主要介绍了MySQL中... 目录一、Next-Key Lock 的定义与作用二、底层原理三、源代码解析四、总结Next-Key L

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制