前言,本文基于STM32F407VET6.(多图警告)
中断
- 一、概要
- 二、中断概念
- 1.什么是中断?
- 1.1 中断概念
- 1.2 中断的作用
- 1.3 中断执行流程
- 1.4 中断和异常
- 1.5 中断资源
- 2.中断向量和中断向量表
- 4.中断的优先级
- 4.1 中断优先级响应原则
- 4.2 中断优先级分组
- 三、NVIC嵌套向量中断控制器
- 四、外部中断
- 1.系统结构
- 2.外部中断向量表
- 3.外部中断原理
- 3.1 外部中断结构图
- 3.2外部中断信号图
- 4.中断源和中断通道
- 5.1 外部中断控制器结构图
- 5.2 外部中断控制寄存器
- 5.21中断屏蔽寄存器 (EXTI_IMR)
- 5.22事件屏蔽寄存器 (EXTI_EMR)
- 5.23上升沿触发选择寄存器 (EXTI_RTSR)
- 5.24下降沿触发选择寄存器 (EXTI_FTSR)
- 5.25软件中断事件寄存器 (EXTI_SWIER)
- 5.56挂起寄存器 (EXTI_PR)
- 5.57EXTI 寄存器映射
一、概要
二、中断概念
1.什么是中断?
1.1 中断概念
??中断指处理机处理程序运行中出现的紧急事件的整个过程.程序运行过程中,系统外部、系统内部或者现行程序本身若出现紧急事件,处理机立即中止现行程序的运行,自动转入相应的处理程序(中断服务程序),待处理完后,再返回原来的程序运行,这整个过程称为程序中断;
1.2 中断的作用
1.速度匹配,提高机器系统效率。 系统中处理机的工作速度远高于外围设备的工作速度。通过中断可以协调它们之间的工作。当外围设备需要与处理机交换信息时,由外围设备向处理机发出中断请求,处理机及时响应并作相应处理。不交换信息时,处理机和外围设备处于各自独立的并行工作状态。
2. 分时操作,维持系统可靠正常工作。现代计算机中,程序员不能直接干预和操纵机器,必须通过中断系统向操作系统发出请求,由操作系统来实现人为干预。主存储器中往往有多道程序和各自的存储空间。在程序运行过程中,如出现越界访问,有可能引起程序混乱或相互破坏信息。为避免这类事件的发生,由存储管理部件进行监测,一旦发生越界访问,向处理机发出中断请求,处理机立即采取保护措施。
3. 实时响应,满足实时处理要求。 在实时系统中,各种监测和控制装置随机地向处理机发出中断请求,处理机随时响应并进行处理。
4. 提供故障现场处理手段,可靠性高。 处理机中设有各种故障检测和错误诊断的部件,一旦发现故障或错误,立即发出中断请求,进行故障现场记录和隔离,为进一步处理提供必要的依据。
1.3 中断执行流程
- 中断源发生中断请求/内核参数异常信号;
- 判断是否允许中断和该中断源是否被屏蔽;
- 优先权排队;
- 保护现场,关闭中断,保护断点;
- 根据中断向量表找到相应中断服务入口地址;
- 执行中断服务函数;
- 恢复现场;
- 打开中断。
1.4 中断和异常
异常: 内核自己产生, 如执行指令或者访问寄存器错误, 与内核同步;
中断: 请求事件来自内核外部(如来自片上或外设), 与内核异步发生。
1.5 中断资源
CM4支持16个异常和240个中断(256个优先级),但是STM32并没有使用CM4的NVIC全部资源。
除了10个内核异常外,STM32F40x还包括82个可屏蔽中断(16个可编程的优先等级)。
2.中断向量和中断向量表
中断向量就是中断处理函数的入口地址,在stm32fxxx.s文件中已经定义好了,所有中断向量在一起就构成了中断向量表。
4.中断的优先级
4.1 中断优先级响应原则
中断优先级:为了及时响应并处理所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断分为若干个级别, 称为中断优先级。
- 抢占优先级(主优先级)—— Preemption Priority
- 响应优先级(子优先级)—— SubPriority
4.2 中断优先级分组
中断优先级有5组选择,其中
- 第0组只有4位用来表示响应优先级,其余三位未使用,因为其只有响应优先级,不能构成中断嵌套。
- 第4组只有4位用来表示抢占优先级,其余三位未使用,此选择为CubeMX库缺省选择。
三、NVIC嵌套向量中断控制器
有如此多的中断信号, CPU如何去控制它呢?
NVIC: Nested Vectored Interrupt Controller 即嵌套向量中断控制器,它与内核有很深的“私交”——与内核是紧耦合的,可以实现低延迟的中断处理和晚到中断的高效处理,它具有以下特征:
- 支持嵌套和向量中断
- 自动保存和恢复处理器状态
- 动态改变优先级
- 简化的和确定的中断时间
四、外部中断
1.系统结构
-
要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置 2 个触发寄存器,同时在
中断屏蔽寄存器的相应位写“1”使能中断请求。当外部中断线上出现选定信号沿时,便会产
生中断请求,对应的挂起位也会置 1。在挂起寄存器的对应位写“1”,将清除该中断请求。 -
要产生事件,必须先配置好并使能事件线。根据需要的边沿检测设置 2 个触发寄存器,同时
在事件屏蔽寄存器的相应位写“1”允许事件请求。当事件线上出现选定信号沿时,便会产
生事件脉冲,对应的挂起位不会置 1。 -
通过在软件中对软件中断/事件寄存器写“1”,也可以产生中断/事件请求。
中断和事件的区别:
事件: 某一信号出现,比如上升沿或者下降沿。
中断: 某一的事件发生,并产生中断,然后跳到相应的中断服务函数中进行相应的处理。
2.外部中断向量表
中断向量表是用由一系列中断向量构成的:
3.外部中断原理
3.1 外部中断结构图
3.2外部中断信号图
4.中断源和中断通道
其中:
5.1 外部中断控制器结构图
中断/事件触发相应你寄存器,再检测相关中断是否被屏蔽,被挂起,然后判断触发类型,最后产生中断响应。