提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、什么是中断
1、中断的定义
中断的定义大家都很熟悉,是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行,如图所示。
2、中断的种类
中断的种类由ARM公司进行设计,不同的芯片之间的中断种类是不一样的,ARM的cortex—M3有256种中断,中断的来源有两种,但两种的表现的效果都是一样的:
- 系统异常:由CPU内部产生的紧急事件,例如:非法指令
- 外部中断:由外设产生的外部的紧急事件,例如:GPIO电平的变化、定时器溢出等
二、中断文件
1、中断向量表
这是STM32F103C8T6的中断向量表,由十种系统异常和六十种外部中断组成,其中:Reset(复位端)、NMI、HardFault(硬件异常)三个的优先级是负数,其他的优先级是正数。
2、在函数中位置
程序里,在startup_stm32f103xb.s文件中有中断向量表,里面有当前芯片所支持的中断。当发生中断时,会找到相应的中断处理函数的位置,执行中断函数。
三、中断优先级
中断优先级由NVIC(Nested Vectored lnterrupt Controller)管理所有的中断,包括系统异常和外部中断,优先级由两者组成,优先级值越小优先级高,负数的不能修改,正数不能变成负数:
- 抢占优先级:中断嵌套
- 子优先级:相应顺序
优先级中的顺序问题:
- 抢占优先级高的中断可以中断抢占优先级低的中断:先比较抢占优先级
- 两个中断的抢占优先级相同,后来中断要等前面的中断处理完:抢占优先级相同,已经在执行的,即使后面的