STM32的中断系统详解(嵌入式学习)

1. 基本概念

中断是处理器中的一种机制,用于响应和处理突发事件或紧急事件。当发生中断时,当前正在执行的程序会被暂时中止,处理器会跳转到中断处理程序(也称为中断服务例程),对中断事件进行处理。处理完中断后,处理器再返回到被中断的程序继续执行。

中断可以分为内部中断和外部中断:

  1. 内部中断:由处理器内部的模块或事件引发,例如定时器溢出、串口接收缓冲区非空等。内部中断可以用于定期执行特定任务、检测状态变化等。

  2. 外部中断:由外部设备或外部信号引发,例如按键按下、外部传感器信号变化等。外部中断用于响应外部事件,并及时处理相关任务。

处理器中的中断机制使得处理器能够在执行主程序的同时,对重要事件做出及时响应,提高系统的实时性和灵活性。通过适当配置中断优先级和中断使能,可以对不同的中断进行管理和控制,确保高优先级的中断能够及时被处理。
在这里插入图片描述

在STM32微控制器中,中断系统是用于处理外部事件和优先级的重要机制。它允许微控制器在执行主程序的同时,对发生的特定事件作出及时响应。以下是STM32中断系统的基本概念:

  1. 中断向量表(Interrupt Vector Table):中断向量表是一个存储中断处理程序地址的表格。每个中断都有一个特定的向量,当中断发生时,微控制器会根据中断向量表中相应中断的地址跳转到对应的中断处理程序。

  2. 中断请求(Interrupt Request):也称为中断源或中断事件,是指外部设备或内部模块发出的信号,通知微控制器发生了一个特定的事件,例如按键按下、定时器溢出等。

  3. 中断控制器(Interrupt Controller):中断控制器负责对中断请求进行管理和分配优先级。STM32微控制器通常具有多个中断控制器模块,如NVIC(Nested Vectored Interrupt Controller)。

  4. 中断优先级(Interrupt Priority):每个中断都具有一个优先级,用于确定中断处理程序的执行顺序。较高优先级的中断会打断正在执行的较低优先级中断或主程序。

  5. 中断处理程序(Interrupt Service Routine,ISR):也称为中断服务函数,是一段用于处理特定中断的代码。当中断发生时,微控制器会跳转到相应的中断处理程序执行相关操作,处理完毕后返回主程序。

  6. 中断使能(Interrupt Enable):通过设置相应的中断使能位,可以启用或禁用特定的中断。禁用中断后,即使中断请求发生,微控制器也不会响应。

  7. 中断标志(Interrupt Flag):中断标志用于指示特定中断是否已经发生。在处理完中断后,需要清除相应的中断标志,以便再次触发相同中断。

使用STM32时,您可以通过配置中断向量表、中断优先级和中断使能来管理和处理各种中断请求。中断系统使得微控制器能够及时响应外部事件,提高系统的实时性和并发处理能力。

2. 中断的意义

中断能够对突发事件进行及时处理,实现程序的并行化,进而提高CPU的工作效率。
中断在计算机系统中具有重要的意义,以下是一些中断的重要意义:

  1. 实时响应:中断使得处理器能够及时响应外部事件或紧急事件。通过中断机制,处理器可以立即中止当前的任务,转而处理中断请求,确保对重要事件的实时响应。

  2. 异步处理:中断机制允许处理器异步地处理中断事件,而不需要依赖于主程序的执行。这使得处理器可以在执行主程序的同时,处理并发发生的多个中断事件,提高系统的并发处理能力。

  3. 资源共享:中断机制允许多个设备或模块共享处理器的资源。不同设备或模块可以通过中断机制发出中断请求,处理器根据优先级和配置来处理这些中断,从而实现资源的合理共享和利用。

  4. 降低功耗:在某些情况下,处理器可以进入低功耗模式。通过配置中断唤醒,处理器可以在待机或休眠状态下,仅在特定的中断事件发生时唤醒,从而降低系统的功耗。

  5. 优先级管理:中断机制允许对不同中断请求进行优先级管理。通过设置中断优先级,处理器可以确保高优先级的中断得到及时处理,从而提高系统的实时性和响应能力。

  6. 系统可靠性:中断机制有助于提高系统的可靠性和容错性。通过合理的中断处理程序设计和错误处理机制,可以在出现异常或错误情况时,及时响应并采取适当措施,从而保证系统的稳定性和可靠性。

总之,中断机制在计算机系统中起着至关重要的作用,它能够提高系统的实时性、并发处理能力、资源共享能力,并为系统的可靠性和可维护性提供支持。

3. 中断处理过程

处理过程

在这里插入图片描述
进入中断

  • 处理器自动保存现场到堆栈里
  • {PC, xPSR, R0-R3, R12, LR}
  • 一旦入栈结束,ISR便可开始执行

退出中断

  • 中断前的现场被自动从堆栈中恢复
  • 一旦出栈完成,继续执行被中断打断的指令
  • 出栈的过程也可被打断,使得随时可以响应新的中断而不再进行现场保存
    R0 - R12
    R13 栈指针 SP : 指向栈顶地址
    R14 链接寄存器 LR :存放返回地址
    R15 程序计数器 PC :保存要执行的指令地址

过程详述

  1. 中断请求触发:外部设备或内部模块发出中断请求,通知处理器发生了一个特定的事件。

  2. 中断检测和响应:处理器在适当的时间检测中断请求,并根据中断控制器的设置确定是否响应中断。如果中断被允许并且具有较高优先级,则处理器会中止当前的任务,转而处理中断事件。

  3. 保存上下文:在处理中断之前,处理器需要保存当前任务的上下文信息,以便在中断处理完毕后能够正确恢复到被中断的任务继续执行。上下文信息包括程序计数器(PC)、寄存器内容等。

  4. 中断向量查找:处理器使用中断向量表(或中断向量地址表)确定中断处理程序的地址。中断向量表是一个存储中断处理程序地址的数据结构,根据中断号或中断源的标识找到相应的中断处理程序地址。

  5. 中断处理程序执行:处理器跳转到中断处理程序的地址开始执行中断处理代码。中断处理程序负责处理特定中断的操作,例如读取外部设备的数据、更新状态、触发其他任务等。

  6. 中断处理完毕:当中断处理程序完成相关操作后,处理器会执行相应的清理工作,包括清除中断标志、恢复保存的上下文信息等。

  7. 恢复上下文:处理器使用之前保存的上下文信息来恢复被中断的任务的状态。这包括还原程序计数器、寄存器值等,以确保任务能够从中断被中止的地方继续执行。

  8. 重新开始执行:恢复了被中断任务的上下文后,处理器重新开始执行被中断的任务,继续之前被中断的代码流程。

需要注意的是,具体的中断处理过程可能会因处理器架构、操作系统和应用程序的不同而有所差异。上述步骤提供了一般性的中断处理过程的基本流程。

4. 中断体系结构

在这里插入图片描述

5. NVIC

概念

嵌套向量中断控制器(Nested Vectored Interrupt Controller)

NVIC(Nested Vectored Interrupt Controller)是一种中断控制器,用于管理中断系统和中断请求在ARM Cortex-M处理器中的操作。以下是与NVIC相关的几个概念:

  1. 中断优先级(Interrupt Priority):NVIC允许为不同的中断设置优先级。优先级决定了中断的相对顺序,当多个中断同时发生时,具有较高优先级的中断将先被处理。NVIC通常支持多级优先级,可以进一步细化中断的优先级设置。

  2. 中断向量表(Interrupt Vector Table):中断向量表是一个存储中断处理程序地址的表格。NVIC负责管理中断向量表,并在中断发生时根据中断号找到相应的中断处理程序地址。每个中断在中断向量表中占据一个位置,该位置存储了相应中断处理程序的地址。

  3. 中断使能(Interrupt Enable):NVIC允许通过设置中断使能位来启用或禁用特定的中断。启用中断后,中断请求才能被识别和处理。禁用中断后,即使中断请求发生,处理器也不会响应。

  4. 中断挂起(Interrupt Pending):NVIC具有中断挂起功能,用于标识正在等待处理的中断请求。当中断请求发生时,如果该中断已被挂起,它将等待处理器处理。这使得处理器可以按照优先级顺序处理挂起的中断。

  5. 中断嵌套(Interrupt Nesting):NVIC支持中断嵌套功能,即当一个中断正在处理时,如果更高优先级的中断请求发生,处理器可以中断当前中断的处理,转而处理更高优先级的中断。这种中断嵌套机制允许处理多个并发的中断事件,并确保较高优先级的中断得到及时处理。

  6. 中断处理程序(Interrupt Service Routine,ISR):中断处理程序是与特定中断相关联的代码块。当中断请求被响应时,NVIC会跳转到相应中断处理程序的地址,执行其中断处理代码。中断处理程序负责处理中断事件,并在处理完毕后返回到原来的执行点。

通过使用NVIC,可以对中断系统进行灵活配置和管理,调整中断优先级、使能或禁用中断,并实现中断处理程序的跳转和嵌套。这样能够使处理器能够高效地响应和处理中断请求,提高系统的实时性和并发处理能力。

主要功能

NVIC(Nested Vectored Interrupt Controller)是STM32系列微控制器中的中断控制器模块,其主要功能如下:

  1. 中断优先级管理:NVIC用于管理不同中断的优先级。它允许对中断请求进行优先级分配,确保高优先级的中断能够及时被处理。NVIC支持多级中断优先级,可以细化不同中断的优先级设置。

  2. 中断使能和禁止:NVIC提供了使能和禁止中断的功能。通过设置相应的中断使能位,可以启用或禁用特定的中断。禁用中断后,即使中断请求发生,处理器也不会响应。这对于在特定情况下临时屏蔽某些中断是很有用的。

  3. 中断嵌套:NVIC支持中断的嵌套。当一个中断正在处理时,如果发生了更高优先级的中断请求,NVIC可以中断当前中断的处理,转而处理更高优先级的中断。这种嵌套中断机制使得处理器可以有效地管理多个并发的中断事件。 不同优先级的中断同时发生,优先处理优先级编号较小的那个,同样优先级的中断同时发生,中断向量号较小的那个优先响应

  4. 中断状态控制:NVIC提供了一些功能来控制中断的状态。它可以查询中断是否处于挂起状态、中断是否正在处理中,以及中断是否已经完成处理。这些状态信息对于实时系统的调度和管理非常有用。

  5. 中断向量表管理:NVIC用于管理中断向量表。中断向量表是一个存储中断处理程序地址的表格。NVIC允许在运行时修改中断向量表的地址,以实现中断处理程序的动态配置和切换。在这里插入图片描述

总的来说,NVIC作为STM32微控制器的中断控制器模块,提供了对中断优先级、中断使能和禁止、中断嵌套、中断状态以及中断向量表的管理功能。它在中断系统的配置和管理中起着关键作用,确保中断能够按照优先级顺序得到及时响应和处理。

6. EXTI

概念

EXTI(External Interrupt)是STM32微控制器中的 外部中断控制器 ,用于处理外部引脚的中断请求。EXTI模块与NVIC紧密合作,使得处理器能够响应外部事件并执行相应的中断处理程序。

以下是EXTI的主要特点和功能:

  1. 外部中断线:EXTI模块与微控制器的外部引脚相连,通过配置外部中断线,可以将特定的外部引脚与EXTI关联起来,以便监测其状态变化并触发中断请求。

  2. 中断触发方式:EXTI支持多种中断触发方式,包括上升沿触发、下降沿触发、双边沿触发等。可以根据需求配置中断触发方式,以适应不同的外部事件。

  3. 中断屏蔽和使能:EXTI允许对不同的外部中断进行屏蔽和使能。通过配置相应的屏蔽位,可以控制特定中断是否允许触发中断请求。这对于临时屏蔽某些中断或动态调整中断使能状态很有用。

  4. 中断线映射:STM32微控制器通常具有多个外部中断线和多个GPIO引脚。EXTI允许将不同的外部中断线映射到特定的GPIO引脚,从而实现外部中断与引脚之间的关联。

  5. 中断优先级:与NVIC配合使用,EXTI允许为不同的外部中断设置优先级。优先级决定了中断的相对顺序,当多个中断同时触发时,具有较高优先级的中断将先被处理。

  6. 中断处理回调函数:通过配置EXTI的中断处理回调函数,可以在中断触发时执行特定的代码。这样,当外部事件发生时,可以自动跳转到预定义的中断处理回调函数,执行相应的操作。

EXTI模块提供了一种方便的方式来处理外部事件的中断请求,它与GPIO引脚相连,允许监测外部引脚状态的变化,并通过中断机制触发相应的中断请求。这使得处理器能够及时响应外部事件,并执行相应的中断处理程序。

主要功能

一个功能是产生中断,另一个功能就是产生事件。
产生中断的目的,是将信号送入NVIC,进而运行中断服务程序,实现对应功能,是软件级。
产生事件的目的,是将采集到的一个脉冲信号送到某个外设,进而驱动某些设备做出动作,是电路级别的传输,是硬件级的。

结构框图

在这里插入图片描述
在这里插入图片描述

编号1是信号输入线,EXTI支持产生多达28个外部事件/中断请求。

编号2是边沿检测电路,用于监测上升沿或下降沿信号。
它会根据上升沿触发选择寄存(EXTI_RTSR)和下降沿触发选择寄存器(EXTI_FTSR)对应位的设置来控制信号触发。
边沿检测电路以输入线作为信号输入端,监测是否有边沿跳变,检测到有边沿跳变输出有效信号 1 给编号 3 电路,否则输出无效信号0。

编号3是一个或门电路,信号来源是外部事件或者软件中断/事件寄存器产生。
允许我们通过程序控制EXTI_SWIER就可以启动中断/事件线

编号4是一个与门电路,信号来源是编号3送来的信号和中断屏蔽寄存器的值,
如果中断屏蔽寄存器为0,也不会将信号送到NVIC,
只有编号3送来了中断信号且中断屏蔽寄存器允许产生中断,才会将中断信号送入NVIC.

红色虚线指示的电路流程。它是一个产生事件的线路,最终输出一个脉冲信号。
产生事件线路是在编号3电路之后与中断线路有所不同,之前电路都是共用的。

编号5是一个与门电路,信号来源是编号3送来的信号和事件屏蔽寄存器的值,
如果事件屏蔽寄存器为0,不会将信号送到脉冲发生器,
只有编号3送来了信号且事件屏蔽寄存器允许产生事件,才会将信号送入脉冲发生器(编号6), 进而产生脉冲来控制外部设备做出动作。	
这样我们可以简单的控制 EXTI_EMR 来实现是否要产生事件的目的

中断和事件的区别

中断和事件是两个相关但不完全相同的概念,它们有以下区别:

  1. 触发方式:中断是由硬件触发的,通常是外部设备或内部模块向处理器发送中断请求,表示发生了一个紧急事件,需要立即处理。而事件是由软件或系统内部逻辑触发的,通常是特定条件满足或特定操作完成时发生,可以是预定的操作、状态改变或用户交互等。

  2. 响应时间:中断具有实时性要求,处理器需要尽快响应中断请求并执行中断处理程序,以处理紧急事件。事件通常没有严格的实时性要求,可以在系统的下一个时间片或任务调度中被处理。

  3. 优先级:中断通常具有优先级,不同的中断可以根据优先级进行排序,优先级高的中断会先得到处理。事件通常没有优先级,它们在触发时按照先来先服务的顺序被处理。

  4. 中断处理程序:中断通常需要编写专门的中断处理程序(ISR,Interrupt Service Routine),用于处理中断事件。中断处理程序是一段特定的代码,负责响应中断、执行特定操作并返回。事件的处理通常是通过调用适当的函数、方法或执行特定的代码块来完成。

  5. 上下文切换:中断的发生会导致处理器从当前任务或上下文切换到中断处理程序的上下文,处理完中断后再返回原来的上下文。事件的处理通常不需要上下文切换,系统可以直接在当前任务的上下文中处理事件。

虽然中断和事件有一些区别,但它们在实际系统中通常是紧密结合的。中断通常用于响应实时事件和外部设备的紧急情况,而事件用于处理软件内部逻辑、状态变化和用户交互等非紧急情况。通过合理使用中断和事件,可以实现系统的高效响应和处理能力。

7. 总结

STM32微控制器的中断系统是其重要的功能之一,它允许处理器在运行过程中响应外部事件和紧急情况。:

  1. 中断向量表(Interrupt Vector Table):中断向量表是一个存储中断处理程序地址的表格。对于每个中断,中断向量表中都有一个相应的入口,存储了对应中断处理程序的地址。当中断请求发生时,处理器会根据中断号查找中断向量表,并跳转到相应的中断处理程序执行。

  2. NVIC(Nested Vectored Interrupt Controller):NVIC是STM32微控制器中的中断控制器,负责管理和控制中断。NVIC允许为每个中断设置优先级,配置中断触发方式,并提供中断使能和禁止功能。它还支持中断嵌套,即在处理一个中断时能够中断当前中断处理程序处理更高优先级的中断。

  3. 中断优先级:STM32中断系统支持多级中断优先级。通过配置中断优先级,可以确定中断的相对顺序。具有较高优先级的中断会优先被处理,以确保对紧急事件的及时响应。

  4. 中断触发方式:STM32支持多种中断触发方式,包括上升沿触发、下降沿触发、双边沿触发等。可以根据外部事件的特性和需求配置相应的中断触发方式。

  5. 中断处理程序(Interrupt Service Routine,ISR):中断处理程序是与特定中断相关联的代码块。当中断请求被触发时,处理器会跳转到对应的中断处理程序执行相应的操作。中断处理程序负责处理中断事件,可以执行必要的操作、读取和写入相关寄存器等。

  6. 中断优先级分组:STM32中断系统支持将中断优先级分组,以提供更灵活的优先级管理。中断优先级分组可以分为几个组,并在每个组中设置优先级位数。这样可以在更精细的层面上配置中断优先级,以适应不同中断之间的优先级关系。

  7. 中断标志和清除:STM32中断系统提供中断标志和清除机制。当一个中断请求发生时,相应的中断标志位会被设置。在处理完中断后,需要手动清除中断标志位,以便重新使能该中断。

  8. 中断控制器和外设的配合:STM32微控制器的外设通常具有自己的中断控制器和中断请求。外设通过中断请求线将外设通过中断请求线将中断信号发送给中断控制器。中断控制器负责接收和处理外设的中断请求,并将其映射到相应的中断向量表中的中断号。处理器通过NVIC与中断控制器协作,根据中断号找到对应的中断处理程序,并执行相应的操作。

  9. 嵌套中断和优先级:STM32中断系统支持嵌套中断,即在处理一个中断时能够中断当前中断处理程序处理更高优先级的中断。这允许处理多个并发的中断事件,并确保较高优先级的中断能够及时得到处理。通过配置中断优先级和优先级分组,可以管理中断的相对顺序和优先级关系。

  10. 异常中断:除了外部中断,STM32还支持处理器异常(如硬件故障、指令执行错误等)引发的异常中断。这些异常中断在处理器内部产生,可以与外部中断一起管理和处理。

中断系统是STM32微控制器实现实时响应和处理外部事件的关键机制。通过合理配置中断优先级、中断触发方式和中断处理程序,可以有效地处理各种外部事件和紧急情况,提高系统的可靠性和实时性。

猜你喜欢

转载自blog.csdn.net/m0_56694518/article/details/131260526