中断类型

一、中断类型

中断包括软件中断(不可屏蔽)和硬件中断。
软中断为内核触发机制引起,模拟硬件中断。
硬件中断又分为外部中断(可屏蔽)和内部中断(不可屏蔽)
外部中断为一般外设请求;内部中断包括硬件出错(掉电,校验,传输)和运算出错(非法数据,地址,越界,溢出)

 

二、

中断定义:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。

硬件中断是由与系统相连的外设(比如网卡 硬盘 键盘等)自动产生的. 每个设备或设备集都有他自己的IRQ(中断请求), 基于IRQ, CPU可以将相应的请求分发到相应的硬件驱动上(注: 硬件驱动通常是内核中的一个子程序, 而不是一个独立的进程).处理中断的驱动是需要运行在CPU上的, 因此, 当中断产生时, CPU会暂时停止当前程序的程序转而执行中断请求.

软中断不会直接中断CPU, 也只有当前正在运行的代码(或进程)才会产生软中断. 软中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求.

硬件中断和软中断的区别

硬件中断是由外设引发的, 软中断是执行中断指令产生的.
硬件中断的中断号是由中断控制器提供的, 软中断的中断号由指令直接指出, 无需使用中断控制器.
硬件中断是可屏蔽的, 软中断不可屏蔽.
硬件中断处理程序要确保它能快速地完成任务, 这样程序执行时才不会等待较长时间, 称为上半部.
软中断处理硬中断未完成的工作, 是一种推后执行的机制, 属于下半部.
 

### STM32中断类型及分类 STM32微控制器中的中断系统是一个非常重要的功能模块,它允许设备对外部事件或内部状态变化做出快速反应。以下是关于STM32中断类型的详细介绍: #### 1. 中断系统的组成 STM32的中断系统由嵌套向量中断控制器(NVIC, Nested Vectored Interrupt Controller)管理。NVIC负责处理所有的中断请求并按照优先级调度执行相应的中断服务程序[^1]。 #### 2. 中断类型分类 根据来源的不同,STM32的中断可以分为两大类:外部中断和内部中断。 ##### (1) 外部中断 外部中断是由外部信号触发的中断,通常通过GPIO引脚输入到处理器中。具体来说,STM32支持以下几种形式的外部中断: - **EXTI(External Interrupt/Event lines)** EXTI线是用于检测外部事件的主要机制。每个GPIO端口都可以映射到对应的EXTI线上,从而实现外部中断的功能。例如,当某个GPIO引脚上的电平发生变化时,会产生一个中断请求[^2]。 - **按键中断** 这是一种常见的应用场景,比如按下按钮时触发特定的操作逻辑。这种情况下,可以通过配置GPIO作为输入模式,并将其连接至EXTI线路来完成中断设置[^3]。 ##### (2) 内部中断 内部中断来源于片内的外设活动,主要包括但不限于以下几个方面: - **定时器中断** 定时器产生的溢出或者捕获比较匹配等事件都会引发相应类型的中断。这类资源广泛应用于延时操作、PWM波形生成等领域之中[^1]。 - **USART/SPI/I²C通信接口相关中断** 当串行通讯协议收发缓冲区满载或是错误发生等情况之下也会激活关联性的异常通知消息传递给CPU以便及时采取措施加以解决这些问题状况下的数据传输效率以及稳定性至关重要因此需要合理规划其优先级别安排确保重要事务能够得到优先处置权利[^2]。 - **ADC转换结束中断** 数字模拟混合电路部分里边涉及到A/D变换完成后自动唤醒主机去做进一步数据分析计算工作流程当中不可或缺的一环就是利用此类特殊用途设计出来的硬件辅助工具所提供的便利条件达成目的效果最佳化表现形式之一即为此处所提及的内容项下所属范围之内。 - **DMA通道传输完成中断** 数据直接存取技术(DMA)能够在不占用过多主控单元时间开销前提条件下高效批量搬运大量资料进出不同存储区域之间位置关系调整过程中一旦整个过程顺利完成则立即发出反馈告知对方知晓当前最新动态进展程度如何等等细节方面的信息提示作用明显增强用户体验质量水平层次提升显著可见一斑[^3]。 --- ### 示例代码展示 下面提供一段简单的基于HAL库实现的外部中断初始化示例代码供参考学习之用: ```c // 初始化 GPIO 和 EXTI 配置 void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用 GPIOA 时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* 配置 PA0 为浮空输入 */ GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; // 上升沿触发中断 GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* 设置 NVIC 对应中断优先级 */ HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); // 开启 EXTI0 中断 } // 中断服务函数 void EXTI0_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); // 调用 HAL 库通用中断处理方法 } ``` 此段代码展示了如何针对单个IO管脚启用上升沿敏感型别的异步信号捕捉动作序列步骤说明清晰明了便于初学者理解掌握基本原理概念要点所在之处。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值