news 2026/8/9 22:57:30

中断很难?看完这篇就懂了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
中断很难?看完这篇就懂了

1.内核,总线,外设

这三个概念是理解中断的必要前提,一个芯片具有内核、总线、外设这三个结构

内核:芯片里的内核有很多架构,如ARM架构内核,它包含了许多核心部件,是整个芯片的大脑

总线:是连接内核与外设,外设与外设之间的通道

外设:通过总线与内核,用于实现芯片的功能,如GPIO输出高低电平,ADC采集电压,串口发送数据

2.NVIC

它是专门负责管理中断的控制器,处于芯片的内核中,响应速度很快

它可以接收外设的中断请求,然后给CPU发送信号,执行中断

3.中断与异常

异常:发生在CPU内部,CPU的运行流被打断,可能是某些致命错误,也有可能是中断引起的

中断:被外部事件打断,如按键检测、定时器触发,然后NVIC接收到中断信号,再给CPU发送信号,触发CPU异常,执行中断函数

4.中断向量表

中断向量表是一段存储所有中断的地址表,当中断发生时,CPU会根据中断编号,在向量表中找到对应的地址,直接跳转到该地址执行函数。

如定时器完成了自动重装载值的刷新,CPU就会检测并判断是定时器发生的中断,然后就会通过中断向量表找到中断回调函数的地址,并执行中断回调函数。

5.中断悬起和中断延迟(产生单一一次中断的中断处理过程)

中断悬起:当外设触发中断条件时,会通过总线向NVIC发送一个中断悬起的信号,而NVIC中有很多悬起寄存器和解悬寄存器,信号传输到NVIC后,就会根据是哪个外设的中断将某个悬起寄存器的某个比特位置1,等待着CPU的响应

中断延迟:从外设触发中断条件向NVIC发送中断悬起信号到CPU开始执行中断回调函数的时间间隔。里面包含了信号在总线的传输过程,CPU还在执行更高优先级任务或当前指令未完成时悬起寄存器保持高的时候。

最后补充一点,在开始执行中断回调函数时,悬起寄存器那个被置1的比特位就会被置回0。

6.产生持续中断的中断处理过程

举个例子,将GPIO设置成低电平触发中断,然后我们把按键设置成上拉模式并按下,那中断请求就会不断从外设通过总线向NVIC发送,接着悬起寄存器就会置1,然后过了中断延迟后就会开始执行中断回调函数,此时比特位就从1变成了0,即使中断悬起信号在不断被传输进NVIC但比特位不会重新置1了,直到中断回调函数执行完比特位才会置1,此时处理器模式又还是处于Handler模式,所以会极快又进行终端回调函数。

7.产生多次中断悬起信号的中断处理过程

1)多个中断请求产生于寄存器的比特位已经置1的情况,简单来说就是有个外设发出了中断悬起信号,然后将寄存器的某个比特位置1,然后再中断延迟期间,即中断回调函数还没执行,那个外设又传来很多个信号,但是其作用还是将那个比特位置1,并不能记住他的次数,所以到最后中断回调函数还是只会执行一次

2)第二种特殊情况就是前面和单一一次中断的中断处理过程一样,不同的是当在执行中断回调函数的过程中时,此时属于那个外设的寄存器的比特位是0,然后这时来了个中断悬起信号,把它重新置1了,然后当中断回调函数结束时,没有多余的出栈入栈操作,就直接连着执行中断回调函数了。

8.异常流程(压栈)

由于异常其实就是中断的一个流程,所以异常流程是可以套用在中断中的。

压栈就是指CPU检测到异常时,自动将当前程序的“上下文信息”保存到栈内存的过程,这里的上下文指的有xPSR、PC、LR、R12、R3、R2、R1、R0等寄存器。

其主要作用就是保存并保护主程序。

谢谢您的驻足浏览!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:31:55

PyTorch保姆级安装教程

PyTorch保姆级安装教程 文章目录PyTorch保姆级安装教程一、准备环境1 安装 Python 环境(推荐 Anaconda)2 安装 VSCode二、创建 PyTorch 环境(推荐)激活环境三、安装 PyTorch四、验证 PyTorch 是否安装成功五、VSCode 配置 PyTorch…

作者头像 李华
网站建设 2026/7/14 15:32:11

FX5U PLC数据类型详解

本文详细整理了三菱FX5U系列PLC的各类数据类型定义、取值范围、存储方式及位操作方法。---1. Bool(位)类型| 属性 | 说明 ||------|------|| **数据位** | Bool只可能是 **0 / 1** || **数据大小** | 1位 || **X、Y点** | 8进制 |输入/输出区定义- **输入…

作者头像 李华
网站建设 2026/7/14 15:31:54

SEW 31C450-503-4-00移动变频器

SEW 31C450-503-4-00 移动变频器是 SEW-EURODRIVE 生产的一款工业驱动控制设备,属于 MOVITRAC 31C 系列。该变频器用于调节交流电机的转速和扭矩,通过改变输出频率和电压实现电机平稳启动、运行及调速控制,广泛应用于工业传动、自动化设备和移…

作者头像 李华
网站建设 2026/7/14 15:31:55

3分钟教你如何使用国产AI编程神器Trae的SOLO模式+Agent Skills+DeepSeek,零代码开发了一个超实用的爆款app(小白也能上手)

大家好,我是一个完全不懂桌面应用开发的小白。但我用3分钟时间,在Trae这个AI编程工具里,通过SOLO模式Agent Skills DeepSeek,搞出了一个桌面应用。这篇文章我就手把手教你,如何用AI编程工具,让AI帮你写代码…

作者头像 李华
网站建设 2026/7/14 15:32:11

基于Spring Boot的课程学习平台

一、项目背景与目标 随着在线教育需求的增长,传统课程学习平台存在功能单一、互动性差、扩展性不足等问题。基于Spring Boot的课程学习平台旨在通过模块化设计、前后端分离架构和智能化功能,打造一个高效、易用、可扩展的在线学习生态系统,满…

作者头像 李华
网站建设 2026/7/14 15:31:56

一维线性插值算法C++详细实现

算法概述&#xff1a;算法实现&#xff1a;下面提供一套健壮的一维线性插值 C 实现&#xff0c;重点考虑了数据预处理、边界处理、重复点合并及浮点容差等鲁棒性细节。#include <vector> #include <algorithm> #include <stdexcept> #include <cmath> …

作者头像 李华