一、中断的基本概念
这篇文章虽然基本都是文字描述,但是你每读一遍都会有不同的感受。第一遍,你会懵懵懂懂,不知道这东西用来干嘛,第二遍,你会知道,哦,原来中断是这样的............
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中断的特点
- 中断优先级:STM32支持可编程的中断优先级,允许用户根据应用需求设置不同中断源的优先级,以决定中断的执行顺序。
- 中断向量表:中断向量表包含了所有中断服务程序的入口地址,当某个中断发生时,CPU会跳转到相应的地址开始执行中断服务程序。
- 中断屏蔽:可以通过软件配置中断屏蔽寄存器来控制是否接受某个中断请求。
- 中断使能:每个中断源都可以单独使能或禁止,从而控制哪些中断可以触发中断服务程序。
🔴STM32中断的应用场景
1. 外部事件检测
- 按键检测:例如,当按下某个按键时触发中断,执行相应的动作。
- 传感器数据采集:如温度、光线等传感器的数据变化触发中断,及时更新数据。
2. 通信接口管理
- UART接收/发送完成:UART接收到新数据或发送完毕后触发中断,以便及时处理接收到的数据或准备新的发送数据。
- SPI/I2C通信完成:SPI或I2C传输完成后触发中断,用于更新状态或处理传输的数据。
3. 定时器事件
- 定时器溢出:定时器计数到达预设值时触发中断,可以用于周期性的任务调度。
- PWM更新:PWM信号更新时触发中断,用于更新输出信号的占空比。
4. 模拟外设事件
- ADC转换完成:ADC完成一次模数转换后触发中断,以便读取转换结果。
- DAC输出更新:DAC输出更新时触发中断,用于更新输出波形。
5. 看门狗超时
- 看门狗超时:如果看门狗没有被定期重置,则会触发中断,通常用于系统复位或错误检测。
这节内容基本都是文字描述,为下一节的外部中断控制作理论的准备,下一节才是重点!!!