07-异常与中断的概念

一、中断的基本概念

这篇文章虽然基本都是文字描述,但是你每读一遍都会有不同的感受。第一遍,你会懵懵懂懂,不知道这东西用来干嘛,第二遍,你会知道,哦,原来中断是这样的............

1、基本定义:

        中断作为计算机体系结构中一个重要的概念,其核心在于CPU在正常执行程序的过程中,能够响应外部(如按键中断、网络通信中断等)或内部(如定时器溢出中断、除零错误中断等)的紧急事件。当这些事件发生时CPU会暂时中止当前程序的执行,转而执行与该事件相关的中断服务程序。待中断服务程序执行完毕,CPU会返回到被中断的程序处,继续执行原来的代码。这一过程确保了系统能够及时处理各种突发事件,从而提高了系统的实时性和响应速度。

        通俗地说,中断就像是在我们忙碌的日常工作中突然插入的紧急任务。它要求我们暂时放下手头的工作,立即转去处理这个紧急事件。一旦处理完毕,我们再回到原来的工作中继续前行。这种“打断-处理-恢复”的过程,在编程中同样存在且至关重要。

2、基本概念

        在探讨中断时,我们不得不提及事件的“偶然”性与“必然”性这一对看似矛盾实则相辅相成的特性。中断的发生,往往带有“偶然”的色彩,它们并不遵循程序的正常执行流程,而是由外部刺激(如用户按键、网络通信请求)或内部状态变化(如定时器到期、异常错误)所触发。这种不确定性使得中断的到来难以预测,给程序的稳定运行带来了一定的挑战。

        然而,从系统设计的宏观视角来看,中断的处理却是“必然”的。为了确保系统在面对各种突发事件时能够保持稳健和高效,开发者必须提前预见并编写相应的中断处理代码。这些代码如同程序的“应急预案”,在中断事件发生时迅速接管CPU的控制权,执行必要的处理操作,以确保系统的正确响应和稳定运行。这种“偶然”触发与“必然”处理的巧妙结合,正是中断机制的核心所在。

3、中断的作用

        中断作为计算机体系结构中的一个重要概念,其“偶然”触发与“必然”处理的结合构成了其核心逻辑。这种机制不仅提升了系统的实时性和响应速度,还为开发者提供了一种灵活高效的事件处理方式。在编程实践中,熟练掌握中断机制的应用将使我们能够设计出更加稳健、高效和用户体验卓越的系统。

4、中断源类型

        中断源指的是能够触发中断的硬件设备或事件。中断源可以是外部设备(如按键、传感器等)或内部设备(如定时器、ADC等)。当这些设备或事件产生某种信号时,它们会通知微控制器发生了特定的事件,从而触发中断。

        外部中断源:

        外部中断源主要指的是那些与微控制器直接相连的硬件设备,它们通过特定的信号线向微控制器发送中断请求。例如,键盘和鼠标作为典型的外部输入设备,当用户进行按键操作或移动鼠标时,它们会生成相应的电信号,并通过中断请求线发送给微控制器。微控制器接收到这些信号后,会立即中断当前正在执行的程序,转而执行预设的中断处理程序来处理这些输入事件。

        除了键盘和鼠标,还有许多其他外部设备可以作为中断源,如触摸屏、网络适配器、串行通信接口等。这些设备在检测到特定事件(如触摸操作、网络数据包到达、串行数据接收等)时,同样会向微控制器发送中断请求。

        内部中断源:

         与外部中断源相对的是内部中断源,它们主要指的是微控制器内部的一些功能模块或定时器(片内外设)。这些内部设备在达到预设条件或状态时,会自动触发中断。定时器是内部中断源中的一个典型例子。开发者可以设置一个或多个定时器,在它们达到预设的计数值时触发中断。这种机制在需要定时执行特定任务(如定时采样、定时检查状态等)时非常有用。

        此外,微控制器内部的ADC(模数转换器)模块也可以在完成模拟信号到数字信号的转换后触发中断。这允许开发者在ADC转换完成后立即处理转换结果,而无需轮询ADC的状态。

5、中断优先级

        系统工作时,我们总希望最紧急的事件优先被处理,以保证系统的实时性。在实际应用中,微控制器可能会同时接收到多个中断请求。为了处理这种情况,微控制器通常支持中断优先级机制。每个中断源都可以被分配一个优先级,当多个中断同时发生时,微控制器会根据优先级的高低来决定先处理哪个中断。

        此外,一些先进的微控制器还支持嵌套中断。这意味着在一个中断处理程序执行过程中,如果发生了另一个更高优先级的中断,微控制器会立即中断当前的中断处理程序,转而执行更高优先级的中断处理程序。待高优先级中断处理完毕后,再回到被中断的中断处理程序中继续执行。这种机制进一步提高了系统的实时性和响应速度。

二、异常与中断

1、异常

        异常是指导致程序流程发生改变的事件。当发生异常时,处理器会暂停当前正在执行的任务,转而执行称为异常处理程序的程序部分。异常处理程序执行完毕后,处理器会恢复正常程序的执行。在ARM架构中,中断是一类异常。中断通常由外围设备或外部输入产生,在某些情况下也可能由软件触发。中断的异常处理程序也被称为中断服务例程(ISR)。

        每个异常源都有一个异常号。异常号从-3到6为系统异常,7号及以后的异常为中断(以STM32F407ZET6)。Cortex-M3和Cortex-M4处理器的NVIC设计可以支持多达240个中断输入。但在实际设计中,实现的中断输入数量通常要少得多,通常在16到100之间。这样可以减小芯片尺寸,从而降低功耗。

嵌套向量中断控制器(NVIC)是Cortex-M处理器的一部分。它是可编程的,其寄存器位于内存映射的系统控制空间(SCS)中。

NVIC负责处理异常和中断配置、优先级设置和中断屏蔽。NVIC具有以下特点:

• 灵活的异常和中断管理

• 嵌套异常/中断支持

• 向量异常/中断入口

• 中断屏蔽

这里有几个英文在中断中比较常见:

priority:优先级

prioritization:优先次序

preempt:抢占

2、异常类型

1、系统异常如下图:

从《Cortex M3与M4权威指南》章节7.2 P232 可知有:

2、中断

 

 3、中断控制

 《Cortex M3与M4权威指南》章节7.3 P235

1.常用函数:(过个眼熟即可)

2.总结:

🔴下面是几个关键原因说明为什么STM32需要中断:

1. 实时响应

  • 外部事件处理:中断机制允许STM32在检测到外部事件(如按键按下、传感器读数变化等)时立即响应,而不是等待主程序轮询检查这些事件。
  • 硬件同步:中断机制可以用于同步硬件操作,如ADC转换完成、定时器溢出等,以确保数据的准确性和及时处理。

2. 提高性能

  • 避免无谓的轮询:如果没有中断机制,程序员可能需要不断地检查某些状态,这会占用大量的CPU资源。使用中断可以避免这种低效的轮询。
  • 降低功耗:中断机制可以让微控制器在等待外部事件时进入低功耗模式,只有当事件发生时才唤醒执行相应的任务,从而节省电能。

3. 任务调度

  • 任务优先级管理:中断机制允许程序员设定不同任务的优先级,使得高优先级的任务可以在低优先级任务执行时被中断并优先处理。
  • 多任务处理:中断机制有助于实现多任务处理,特别是当涉及到实时要求较高的任务时。

4. 简化编程

  • 简化代码结构:通过使用中断,可以将特定的事件处理代码分离出来,形成模块化的中断服务程序,使整个程序更加清晰和易于维护。

5. 提升用户体验

  • 即时反馈:对于用户界面来说,中断机制可以提供更快的响应速度,如按键响应、触摸屏交互等,从而提升用户体验。

🔴STM32中断的特点

  1. 中断优先级:STM32支持可编程的中断优先级,允许用户根据应用需求设置不同中断源的优先级,以决定中断的执行顺序。
  2. 中断向量表:中断向量表包含了所有中断服务程序的入口地址,当某个中断发生时,CPU会跳转到相应的地址开始执行中断服务程序。
  3. 中断屏蔽:可以通过软件配置中断屏蔽寄存器来控制是否接受某个中断请求。
  4. 中断使能:每个中断源都可以单独使能或禁止,从而控制哪些中断可以触发中断服务程序。

🔴STM32中断的应用场景

1. 外部事件检测

  • 按键检测:例如,当按下某个按键时触发中断,执行相应的动作。
  • 传感器数据采集:如温度、光线等传感器的数据变化触发中断,及时更新数据。

2. 通信接口管理

  • UART接收/发送完成:UART接收到新数据或发送完毕后触发中断,以便及时处理接收到的数据或准备新的发送数据。
  • SPI/I2C通信完成:SPI或I2C传输完成后触发中断,用于更新状态或处理传输的数据。

3. 定时器事件

  • 定时器溢出:定时器计数到达预设值时触发中断,可以用于周期性的任务调度。
  • PWM更新:PWM信号更新时触发中断,用于更新输出信号的占空比。

4. 模拟外设事件

  • ADC转换完成:ADC完成一次模数转换后触发中断,以便读取转换结果。
  • DAC输出更新:DAC输出更新时触发中断,用于更新输出波形。

5. 看门狗超时

  • 看门狗超时:如果看门狗没有被定期重置,则会触发中断,通常用于系统复位或错误检测。

 

 这节内容基本都是文字描述,为下一节的外部中断控制作理论的准备,下一节才是重点!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bardb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值