MCU的ISR与IRQ

       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发出中断请求,从而实现了对外部或内部事件的快速响应和处理。

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值