MCU的ISR与IRQ

ops/2024/10/18 14:26:38/

       ISR(Interrupt Service Routine):中断服务程序
       定义:ISR是计算机系统中用于处理硬件中断的一种特定程序。中断是硬件或软件引起的事件,会暂时打断当前正在运行的任务,以便紧急处理某个事件。ISR的目的是快速响应中断信号,执行所需的操作,并尽快返回继续执行被打断的任务。
       作用:当发生硬件中断时,系统会暂停当前的任务,转而执行ISR来处理中断事件,然后再返回原来的任务继续执行。ISR函数的主要任务是根据中断类型进行相应的处理,如读取键盘输入、接收网络数据等。通过ISR,系统可以及时响应外部事件,提高系统的实时性和可靠性。
实现原理:ISR的实现原理基于中断向量表的机制。中断向量表是一个存储中断处理程序地址的数据结构,由系统内核在系统启动时进行初始化。当发生中断时,硬件会根据中断类型从中断向量表中找到相应的ISR地址,并跳转到该地址执行。ISR执行完毕后,系统会返回到原来的任务继续执行。

      中断要处理的任务通常是放在中断服务例程(ISR, Interrupt Service Routine)里面。当硬件或软件中断发生时,系统会暂停当前正在执行的任务(如果当前正在执行的任务不是另一个中断服务例程),并跳转到与该中断相关联的ISR的起始地址。ISR负责处理中断事件,执行必要的任务,然后返回。这样,系统就可以继续执行被中断的任务或处理其他任务。

       ISR的设计应该尽量简洁和高效,因为它会打断正常的程序流程。在ISR中,通常只执行必要的、紧急的任务,如读取中断源的状态、更新全局变量、发送信号等。如果需要执行更复杂的任务,ISR通常会将这些任务委托给其他函数或任务,并在ISR完成后尽快返回。

      编写ISR时,还需要注意以下几点:

原子操作:在ISR中执行的操作应该是原子的,即不可分割的,以避免在中断处理过程中被其他中断或任务打断。

禁用中断:在某些情况下,为了避免中断嵌套或中断冲突,可能需要在ISR中暂时禁用中断。然而,这种做法应该谨慎使用,因为它可能会导致系统响应性下降。

使用volatile关键字:在ISR中访问的变量应该使用volatile关键字声明,以确保编译器不会对这些变量的访问进行优化,从而确保每次访问都能得到最新的值。

返回指令:ISR必须包含一条返回指令(如reti在8051微控制器中,或iret在x86架构中),以便在中断处理完成后返回到被中断的程序点。

优先级:不同的中断可能有不同的优先级。在编写ISR时,需要考虑中断的优先级,并确保高优先级的中断能够及时得到处理。

        STM32的中断向量表是STM32单片机中断系统中的一个重要组成部分,它用于管理中断请求的优先级和执行相应的中断服务程序(ISR)。以下是对STM32中断向量表的详细解释:

一、中断向量表的基本概念
定义:中断向量表是一个存储ISR地址的表,当中断发生时,处理器会根据中断号在向量表中查找相应的ISR地址,并跳转执行。
作用:中断向量表允许单片机快速响应外部事件(如按键按下、定时器溢出等)或内部事件,从而提高系统的实时性和可靠性。
二、中断向量表的结构
位置:STM32的中断向量表位于存储器空间的低地址区,具体地址可能因不同的STM32系列和启动方式而有所不同。一般来说,它通常从0x0000 0000或类似地址开始。
内容:中断向量表由一系列中断向量组成,每个中断向量对应一个中断源。中断向量是一个32位的地址,指向相应的中断处理函数的入口地址。
三、中断向量表的配置

STM32中断向量表的配置可以通过多种方式实现,包括使用启动文件、汇编代码或库函数等。

启动文件:启动文件(如startup_stm32f4xx.s)定义了中断向量表的布局和中断处理函数的入口地址。这是最常用的配置方式之一。
汇编代码:开发人员可以使用汇编代码直接修改中断向量表,以实现特定的中断处理逻辑。
库函数:STM32标准库提供了库函数来配置中断向量表,如NVIC_SetVector()和NVIC_GetVector()。这些函数允许在C语言环境中方便地配置中断向量表。
四、中断优先级

STM32的中断系统支持中断优先级管理,以提高中断处理的灵活性和效率。中断优先级通常由抢占优先级和响应优先级构成。

抢占优先级:用于决定在同一个抢占级别的中断之间的优先级顺序。高优先级的抢占优先级可以打断正在进行的低抢占优先级中断。
响应优先级:用于决定同一抢占级别中的多个中断请求进行响应的顺序。当两个中断的抢占优先级相同时,响应优先级高的中断将先被响应。
五、注意事项
中断向量表的内容在复位后由启动文件或固件库自动配置,但在某些情况下,开发人员可能需要手动修改中断向量表以满足特定需求。
配置中断优先级时,应谨慎选择优先级分组和具体的优先级值,以避免中断处理过程中的冲突和不确定性。
中断服务程序应尽可能简短和高效,以避免对系统性能产生不利影响。

       STM32中的IRQ,全称是Interrupt Request(中断请求),是微控制器(MCU)中的一种重要机制,用于处理外部或内部事件引发的中断。在STM32这样的基于ARM Cortex-M内核的微控制器中,IRQ是中断系统的一个重要组成部分,它允许设备在发生特定事件时,向CPU发出中断请求,从而暂时中断当前正在执行的程序,转而执行相应的中断服务程序(ISR)来处理这些事件。

 IRQ的作用与特点
中断处理:当外设(如按键、定时器、串口等)或内部事件(如异常)发生时,它们会向CPU发出IRQ信号,请求CPU暂停当前任务,转而处理这些中断事件。
优先级管理:STM32的中断系统支持优先级管理,包括抢占优先级和响应优先级,以确保高优先级的中断能够优先得到处理。
高效响应:通过IRQ机制,STM32能够迅速响应外部或内部事件,从而提高了系统的实时性和响应速度。
IRQ的配置与使用

在STM32中,IRQ的配置通常涉及以下几个步骤:

       初始化外设:首先需要对引发中断的外设进行初始化配置,包括设置其工作模式、参数等。
       使能中断:通过配置相应的寄存器或调用库函数,使能外设的中断功能。
       配置NVIC:NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)是STM32中断系统的核心部件,负责中断的优先级管理和中断向量的分配。在NVIC中,需要为外设的中断设置优先级,并配置中断向量表以指向相应的ISR。
       编写ISR:根据外设的特性和中断处理需求,编写相应的中断服务程序(ISR)。在ISR中,需要编写处理中断事件的代码,并在处理完毕后清除中断标志位以避免重复中断。
       注意事项:在配置IRQ时,需要注意避免中断冲突和优先级倒置等问题。ISR应尽量简短高效,避免执行复杂的操作或占用过多资源。
      在处理中断时,需要确保系统的稳定性和可靠性,避免由于中断处理不当而导致系统崩溃或数据丢失等问题。STM32中的IRQ是一种重要的中断请求机制,它允许设备在发生特定事件时向CPU发出中断请求,从而实现了对外部或内部事件的快速响应和处理。

                


http://www.ppmy.cn/ops/99141.html

相关文章

uniapp重新编译在微信开发者工具跳转指定页面

uniapp重新编译在微信开发者工具跳转指定页面 步骤 选择编译模式添加编译模式设置启动页面

PHP农场扶农系统智慧认养智慧乡村系统农场系统小程序源码

🌱科技赋能田园梦 —— 探索“农场扶农系统”与“智慧认养智慧乡村”新篇章🚀 🌈【开篇:田园新风尚,科技引领未来】 在快节奏的都市生活中,你是否曾梦想过拥有一片属于自己的绿色天地?现在&am…

数学建模笔记(四):熵权

背景&基本思想介绍 在实际的评价类问题中,在前面所说的层次分析法以及Topsis法中,指标权重的确定往往是通过主观的评价得来的,如果在没有专家的情况下,我们自己的权重分配往往可能带有一定的主观性,有没有一种可以…

blender--二维平面图标变为三维网格

有时候我们希望把一些二维图片能变成三维网格,本案例我们就针对这一场景进行实现。 首先我们可以先去找一张需要的图片(注意,本例需要图片是svg格式),我们可以在阿里巴巴矢量图标库等平台进行搜索,如图所示,找到需要的…

会话技术:Cookie、Session、JWT的优缺点分析与实践

登录认证 会话技术方案一:Cookie方案二:Session方案三:令牌技术JWT令牌介绍生成和校验登录下发令牌案例 会话技术 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接&…

【数据结构4】树的实例-模拟文件系统、二叉树的遍历(先序遍历、中序遍历、后序遍历、层次遍历)

1 树和二叉树 2 树的实例-模拟文件系统 3 二叉树 3.1 二叉树的遍历 二叉树的先序遍历 二叉树的中序遍历 二叉树的后序遍历 二叉树的层次遍历 1 树 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构树是由n个节点组成的集合:如果n0,那这是一棵空树;如…

STM32MP157_uboot_简介

STM32MP157_uboot_简介 前言; uboot 的全称是 Universal Boot Loader,uboot 是一个遵循 GPL 协议的开源软件,uboot 是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。uboot 官网为…

ARM程序的组成和执行过程

ARM程序的组成: 此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。一个ARM程序包含3部分:RO,RW和ZI RO是程序中的指令和常量 RW是程…