转发于 stupidx
1. 什么是中断?
当CPU执行程序时,由于发生了某种随机的事件(内部或外部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),处理完后又返回到被中断的程序继续执行,这一过程称为中断。
例如:在看电视时,突然妈妈让我去买瓶酱油,于是我先将电视关闭,跑下楼去买了瓶酱油,拿回来交给妈妈,然后回到原位置将电视打开,继续看电视。
在这个例子中,妈妈的指令就相当于是中断机制中的中断请求,而买酱油则相当于是中断服务程序,将酱油买回并交给妈妈便是处理完这一事件,继续看电视相当于返回原程序继续执行。
1.1 为什么要使用中断(中断的特点)
为什么要使用中断,这个问题就不得不先了解一下单片机另一种处理方式轮询。
轮询是指在单片机中每隔一段时间,对某一事件进行一次检查。就比如我在等快递,于是我每隔5分钟开门查看一次,而这样的行为实际是十分浪费时间和精力的。
而中断只需在特定的情况下执行。也就是说我无需每隔5分钟就开一次门去等待快递,只需等待快递小哥敲门,我再去开门拿快递即可。如此就不会耗费大量的时间和精力。
1.2 什么是中断源?
可以触发中断发生的事件,称为中断源。
1.2.1中断源有哪些
中断源可分为可屏蔽中断源和不可屏蔽中断源。而存在这两种分类的原因是因为有着中断允许控制位的存在,当将中断允许控制位I设定为**“中断禁止”时,CPU将不再响应**可屏蔽中断,但仍然会响应不可屏蔽中断。
可屏蔽中断源:
-
内部中断源:定时器中断、串行通信中断等
-
外部中断源:外部引脚IRQ0 - IRQ7
不可屏蔽中断:
- 内部中断源:振荡器中断,WDT中断等
- 外部中断源:外部引脚NMI
- 软件中断源:利用软件指令,产生中断请求。
2. 中断机制的流程
中断流程:
(1)发生中断请求
(2)保护现场:将PC、PSW寄存器压入栈中【入栈操作】
(3)获取中断服务程序起始地址,放入到PC寄存器中
(4)执行程序
(5)恢复现场:将PC、PSW等数据出栈,继续执行被打断的程序
3. 中断优先级
3.1 多个中断同时发生
在多个中断同时发生时,有两种情况
1、 相同中断优先级情况下,优先处理中断号小的中断服务程序
2、中断优先级高的优先执行
3.2 中断嵌套
中断嵌套是指当中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出了中断请求,这时会暂时中止当前正在执行的级别较低的中断源的中断服务程序,去处理更高级别的中断源,待处理完毕后,再返回到被中断的中断服务程序中继续执行。
也可以简单的理解为更高一级中断的“加塞”。如同普通加急与紧急加急之间的关系。