1.中断的概念
计算机运行过程中,出现某些意外情况需主机干预时,机器停止程序的运行,去执行新情况的程序,处理完成后又返回原先被暂停的程序继续运行。(相当于你正在敲代码,然后突然你想上厕所,急急急!然后你就去上厕所了,上完厕所你就回来继续敲代码)
2.STM32异常和中断介绍
1. 对于STM32来说,异常和中断是由芯片内的Cortex-M内核提供的,ST公司是在内核上进行拓展和修改。
2.异常(系统异常):内核活动产生的(执行指令出错)
3.中断(外设中断):连接到内核的外部器件产生(外设产生中断)
4.异常和中断的处理方式相同。
5.Cortex-M3和M4的NVIC最多支持240个IRQ(中断请求)、1个不可屏蔽中断(NMI)、1个Systick(滴答定时器)定时器中断和多个系统异常。
6.与中断相关的寄存器都在NVIC和SCB中。
3.中断优先级
1.分为两种:可编程和不可编程
2.小值优先原则,越小优先级越高
4.中断的优先级分组
1.STM32只使用M3内核8bit中的高4bit,也就是支持2的4次方,16个优先级。
2.组成5组优先级分组,这5组中每组分为一个抢占组、1个子优先组。
优先级分组 | 抢占优先级 | 子优先级 | 描述 |
NVIC_PriorityGroup_0 | 0 | 0-15 | 主-0bit,子-4bit |
NVIC_PriorityGroup_1 | 0-1 | 0-7 | 主-1bit,子-3bit |
NVIC_PriorityGroup_2 | 0-3 | 0-3 | 主-2bit,子-2bit |
NVIC_PriorityGroup_3 | 0-7 | 0-1 | 主-3bit,子-1bit |
NVIC_PriorityGroup_4 | 0-15 | 0 | 主-4bit,子-0bit |
通过优先级分组,可以管理中断的响应顺序。
只有抢占优先级才有抢占中断权限,发生中断嵌套。
中断抢占优先级相同,不发生抢占行为。
多个挂起的中断具有相同的抢占优先级,则子优先级高的先行,子优先级相同,IRQ编号小的先行。抢占优先级>子优先级>IRQ编号
通过NVIC实现。
5.嵌套向量中断控制器(NVIC)功能
NVIC库函数 | 描述 |
void NVIC_EnableIRQ(IRQn_Type IRQn) | 使能中断 |
void NVIC_DisableIRQ(IRQn_Type IRQn) | 使能中断 |
void NVIC_SetPendingIRQ(IRQn_Type IRQn) | 设置中断悬起位 |
void NVIC_ClearPendingIRQ(IRQn_Type IRQn) | 清除中断悬起位 |
uint_32 NVIC_GetPendingIRQ(IRQn_Type IRQn) | 获取悬起中断编号 |
void NVIC_SetPriority(IRQn_Type IRQn, uint_32 priority) | 设置中断优先级 |
uint_32 NVIC_GetPriority(IRQn_Type IRQn) | 获取中断优先级 |
void NVIC_SystemReset(void) | 系统复位 |