一、中断系统

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库中的中断处理流程