HAL库的中断处理流程
外部中断的数据类型及接口函数
任务实践
中断概述
处理器和外部设备的数据传输方式
无条件传输:
处理器不必了解外部设备状态,直接进行数据传输,用于指示灯和按键等简单设备
查询方式:
传输前,一方先查询另一方的状态,若已经准备好就传输,否则就继续查询
中断方式:
一方通过申请中断的方式与另一方进行数据传输,收发双方可以并行工作
直接存储器访问:
处理器内部建立片内外设和内存之间的数据传输通道,传输过程不需要处理器参与
中断全过程
中断发生:当CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理
中断处理:CPU暂停当前的工作,转去处理事件B
中断返回:当CPU将事件B处理完毕后,再回到事件A中被暂停的地方继续处理事件A
整个过程称为中断
主程序成为后台程序,中断服务程序成为前台程序,在执行主程序的过程中,如果出现了中断请求,将保存断点地址(当前指令执行完后下一条指令所在的地址),
进入中断服务程序进行中断响应,执行完毕以后进行中断返回继续执行主程序。
中断作用
速度匹配:可以解决快速的CPU与慢速的外部设备之间传送数据的矛盾
分时操作:CPU可以分时为多个外部设备服务,提高计算机的利用率
实时响应:CPU能够及时处理应用系统的随机时间,增强系统的实时性
可靠性高:CPU可以处理设备故障及掉电等突发事件,提高系统可靠性
中断优先级
根据不同的中断的重要性设置不同的优先等级,处理原则是:高级中断可以打断低级中断,低级不能打断高级中断,又可以叫做中断嵌套
中断服务程序:在响应一个特定中断的时候,处理器回执行一个函数,该函数一般称为中断处理程序或者中断服务程序
中断向量和中断向量表:中断服务程序在内存中的入口地址称为中断向量。把系统中所有中断向量集中起来存放到存储器的某一区域内,这个存放中断向量的存储区就叫中断向量表。
查找中断向量的过程
1.编号:计算机系统对每一个中断源进行编号,这个好吗成为中断类型号
2.查表:根据中断类型号,到中断向量表中找到对应的表项
3.执行:去除表项内容,即该中断源对应的中断服务程序地址,进入该程序执行相应操作。
中断响应过程
1.中断源发出中断你请求
2.判断处理器是否允许中断,以及该中断源是否被屏蔽
3.中断优先级排队
4.处理器暂停当前程序,保护断点地址和处理器的当前状态,根据中断类型号,查找中断向量表,转到对应的中断服务程序。
5.执行中断服务程序
6.回复被保护的状态,执行中断返回指令,回到被中断的程序。
STM32微控制器中断系统
中断和异常
中断:中断是由内核外部产生的,一般由硬件引起,比如外设中断和外部中断等
异常:异常通常是内核自身产生的,大多是软件引起的,比如除法出错异常、预取值失败等
嵌套向量中断控制器 NVIC
NVIC属于cortex-M内核的组件,管理所有的中断和异常,为中断源分配中断通道
中断通道
微控制器片内集成了很多外设,对于单个外设而言,它通常具备若干个可以引起中断的中断源,而该外设的所有中断源只能通过指定的中断通道向内核申请中断。
以STM32F411芯片为例,它支持68个中断通道,已经固定分配给相应的片内外设。由于中断源数量较多,而中断通道有限会出现多个中断源共享同一个中断通道的情况。
中断优先级
NVIC中有一个8位中断优先级寄存器NVIC_IPR,理论上可以配置0~255共256级中断
STM32只使用了其中的高4位,并分成抢占优先级和子优先级两组
中断嵌套
多个中断同时提出中断申请时:先比较抢占优先级,抢占优先级高的中断先执行如果抢占优先级相同,则比较子优先级。子优先级高的中断先执行。
二者都相同时,比较中断编号。编号越小,优先级越高,中断编号定义在芯片头文件中。
优先级分组
STM32中断优先级分组
优先级分组 抢占优先级 子优先级
第0组: NVIC PriorityGroup_0 无 4位/16级 (0~15)
第1组: NVIC PriorityGroup_1 1位/2级(0~1) 3位/8级(0~7)
第2组: NVIC_PriorityGroup_2 (0~3)2位/4级 2位/4级(0~3)
第3组: NVIC_PriorityGroup_3 (0~7)3位/8级 1位/2级 (0~1)
第4组: NVIC PriorityGroup 4 4位/16级 (0~15) 无
HAL库初始化函数HAL Init将优先级分组设置为第4组,即有0~15,共16级抢占优先级,没有子优先级。编号越小的优先级越高:0号为最高,15号为最低。
外部中断控制器 EXTI 管理23个外部中断线(EXTILine)
0~15号外部中断线用于由GPIO引脚触发的外部中断
16~22号外部中断线用于RTC闹钟事件、以太网唤醒事件和USB唤醒事件等
当对应GPIO引脚与外部中断线连接后,GPIO引脚才具备外部中断的功能,可以设置外部中断的触发方式
GPIO引脚的外部中断触发方式:上升沿触发,下降沿触发,双边沿触发
引脚分组:
尾号相同的引脚一组,接入1个外部中断线同组引脚只能有一个设置为外部中断功能
中断通道
EXTIO~EXIT4分别具有独立的中断通道EXTI5~EXIT9共享同一个中断通道EXTI10~EXIT15共享同一个中断通道
HAL库中的中断处理流程