目录
[4.中断向量 :](#4.中断向量 :)
[软件陷阱(Software Trap):](#软件陷阱(Software Trap):)
中断
定义:
中断,即CPU在正常执行程序的过程中,遇到外部(例如常见的按键中断)/内部(例如定时器中断)的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去为中断服务,待服务完毕,再返回到暂停处(断点)继续执行原来的程序。
中断处理的过程:
1.中断申请:
中断源向CPU发出中断请求信号(中断申请一般需要在程序初始化中配置相应的中断寄存器开启中断;---程序员操作
2.中断响应:
CPU检测中断申请,把主程序中断的地址保存到堆栈,转入中断向量入口地址
3.中断处理:
按照中断向量中设定好的地址,转入相应的中断服务程序;---程序员操作
4.中断向量 :
中断服务程序所在的位置
5.中断返回:
中断服务程序执行完毕后,CPU执行中断返回指令,把堆栈中保存的数据从堆栈弹出,根据该信息恢复之前被打断的状态,返回原来程序继续运行。
中断优先级
当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
分类 : 优先级有三种
1.抢占优先级
高优先级可以打断较低的优先级 , 当一个具有高抢占优先级的中断事件发生时,即使 CPU 正在处理一个较低抢占优先级的中断服务程序,它也会暂停当前的处理,转而执行高优先级的中断任务。
2.响应优先级
当多个中断同时请求服务时,CPU 会根据响应优先级来选择先处理哪一个中断。不过,与抢占优先级不同的是,一旦 CPU 开始处理一个中断服务程序,即使有更高响应优先级的中断请求到来,也不会打断当前的中断处理,除非这个新的中断具有更高的抢占优先级。
3.自然优先级
自然优先级是中断源本身所固有的一种优先级顺序,通常是由硬件设计或者系统架构决定的。它是一种默认的优先级设定,在没有人为设置抢占优先级和响应优先级的情况下发挥作用。
中断嵌套
当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回
中断执行流程
中断源
中断源指的是异常的源头(异常发生的根源),中断源分为两类:内核中断 + 外部中断。对于Cortex M4内核而言,一共有256个中断源,分为16个内核中断+240个外部中断,但是STM32F407并没有这么多,有82个可屏蔽中断(可以通过代码控制 外部中断),还有10个不可屏蔽(不可以通过代码控制 内核中断),一共有92个中断源。
在 STM32 的中断向量表中,表中的每一项(名称)实际上是中断服务函数(Interrupt Service Routine,ISR)的入口地址的标号,这些标号通常和函数名紧密相关, 一般在后面加上 xxxx**_IRQHandler** 。当一个中断事件发生时,硬件会根据中断向量表找到对应的中断服务函数的入口地址,然后跳转到该函数去执行相应的中断处理代码。
NVIC
NVIC指的是嵌套向量中断控制器,作用是管理所有的中断(相当于中断的总开关),主要用于管理和处理中断请求,决定中断的优先级、是否响应中断以及处理中断嵌套等复杂情况。
使用中断之前 , 一定要打开中断 , 并且设置好优先级
NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级
抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队
按中断源分类
1.外部中断:
设备触发型外部中断:
由外部设备的物理动作产生,如按键按下或松开、鼠标点击或移动等。例如,在计算机键盘中,当一个按键被按下时,键盘控制器会发送一个中断信号给 CPU,这个信号通过计算机的中断系统触发键盘中断。这种中断使得 CPU 能够及时响应外部设备的操作,从而执行相应的程序来处理按键事件,如在文字处理软件中输入字符。
传感器触发型外部中断:
由外部传感器检测到物理量变化而产生。
通讯接口触发型外部中断:
在通信过程中产生,比如串口通信接收或发送数据完成时触发。
2.内部中断:
定时器/计数器中断:
基于微处理器或单片机内部的定时器和计数器模块产生。
指令异常中断:
包括非法指令中断和除法错误中断等。当处理器执行一条它无法识别或者不允许执行的指令(如错误的操作码、未定义的指令格式)时,会触发非法指令中断。这通常是为了防止程序出现错误或者防止恶意软件的攻击。除法错误中断是在进行除法运算时,如果除数为零,处理器会触发此中断,以防止程序因为错误的运算而出现崩溃或者产生错误的结果。
电源管理中断(对于具有电源管理功能的处理器):
当电源状态发生变化(如电池电量过低、电源适配器插入或拔出)时触发。
DMA(直接内存访问)中断:
DMA 控制器在完成一次数据块的传输任务(如从硬盘读取数据到内存)时,会触发中断。
3.软件中断:
系统调用中断(在操作系统环境下):
应用程序需要请求操作系统提供某些服务(如文件读写、进程创建、内存分配等)时,会通过系统调用指令来触发中断。
软件陷阱(Software Trap):
是一种由程序员故意设置的中断触发机制。在程序开发中,为了调试目的或者处理特殊情况,会在代码中插入特定的指令来触发中断。例如,在一些复杂的嵌入式系统程序中,当程序执行到一个可能出现错误或者需要特殊处理的位置时,程序员会插入一条软件陷阱指令。当 CPU 执行到这条指令时,就会触发中断,跳转到预先编写的中断服务程序进行错误检查、数据记录或者特殊的恢复操作。
外部中断:
外部中断是指由微控制器(MCU)或微处理器外部的信号触发产生的中断。这些外部信号通常来自外部设备,如按键、传感器、通信接口等,用于通知 CPU 外部事件的发生,使得 CPU 能够及时响应并处理这些事件。
中断线:
EXTI0 ~ EXTI15 是中断线
中断线起到传递中断信号的作用,将外部设备产生的中断请求信号传送到中断控制器,以便中断控制器能够根据中断优先级等规则对中断请求进行处理。
PA0~PI0 都挂在EXTI0的中断线上 ...... 依此类推 PA15~PI15挂在EXTI15中断线上
SYSCFG : 用于链接GPIO和中断线的桥梁 , SYSCFG 参与中断线与外部引脚(如 GPIO 引脚)的映射关系。例如,对于外部中断(EXTI),可以通过 SYSCFG 来确定哪些 GPIO 引脚与特定的中断线相连。