5、中断(上)
1 中断
1.1 什么是中断
中断指的是打断CPU正在执行的程序,转而去处理其他紧急的程序,在处理完毕后返回到原来被打断而暂停的程序继续的过程。
1.2 中断的作用与意义
中断具有以下的作用:
1、实时控制:用以在确定的时间内对相应的事件作出响应
2、紧急处理:检测到紧急的事件第一时间进行完成
3、数据传输:数据传输具有不确定性,不知道何时数据会进行传输
中断的意义在于高效地处理紧急的程序而不会一直占用CPU资源
1.3 中断过程
GPIO的外部中断过程路径为:GPIO引脚->AFIO(F1)/SYSCFG(F4/F7/H7)->EXTI控制器->NVIC控制器->CPU。各控制器含义如下:
AFIO:复用功能输入/输出
EXTI:外部中断/事件控制器
NVIC:嵌套向量中断控制器
外部信号从CPIO引脚进入时,首先经过AFIO模块,该模块将决定信号接下来进入哪条EXTI线;EXTI模块负责监测该信号,判定其是否有效触发了中断,当判定为真时,信号会继续进入NVIC,NVIC会判定该中断当前是否能被响应,当判定为真时,NVIC发出信号令CPU处理该中断。
2 NVIC
2.1 NVIC基本概念
Nested Vectored Interrupt Controller(NVIC),即嵌套向量中断控制器
2.2 NVIC相关寄存器
寄存器名称 | 位数 | 寄存器个数 | 备注 |
中断使能寄存器(ISER) | 32 | 8 | 每个位控制一个中断 |
中断除能寄存器(ICER) | 32 | 8 | 每个位控制一个中断 |
应用程序中断及复位控制寄存器(AIRCR) | 32 | 1 | 位8到位10控制优先级分组 |
中断优先级寄存器(IPR) | 8 | 240 | 8个位对应一个中断,在STM32中只使用高4位 |
2.3 NVIC配置过程
一、设置中断分组:确定NVIC如何分配优先级位,优先级可分为抢占优先级、响应优先级和自然优先级。其中自然优先级为硬件固定不可更改,而抢占优先级和响应优先级可被定义,各优先级重要度为:
抢占优先级>响应优先级>自然优先级
在STM32中,IPR的4个比特位被抢占优先级和响应优先级共用,设置中断分组就是设置这4个比特位的分配情况,中断分组函数原型为:
void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);
参数PriorityGroup用于指定优先级分组方式,可选值如下:
NVIC_PRIORITYGROUP_0 ~ NVIC_PRIORITYGROUP_4表示抢占优先级的位数从0到4,响应优先级的位数则为4到0。
二、设置中断优先级:确定抢占优先级和响应优先级的具体数值,数值越低代表优先级越高,函数原型为:
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);
其中参数IRQn为EXTI中断通道号,PreemptPriority为抢占优先级,SubPriority为响应优先级。
三、使能中断:使能一个指定的中断通道,函数原型为:
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn);
其中参数IRQn为EXTI中断通道号。

浙公网安备 33010602011771号