中断优先级

中断优先级有两种,一种是抢占优先级,一种是固有优先级,先介绍抢占优先级。中断抢占优先级:


IP 这个寄存器的每一位,表示对应中断的抢占优先级,每一位的复位值都是 0,当我们把某一位设置为 1 的时候,这一位的优先级就比其它位的优先级高了。比如我们设置了 PT0位为 1 后,当单片机在主循环或者任何其它中断程序中执行时,一旦定时器 T0 发生中断,作为更高的优先级,程序马上就会跑到 T0 的中断程序中来执行。 反过来,当单片机正在 T0中断程序中执行时, 如果有其它中断发生了,还是会继续执行 T0 中断程序,直到把 T0 中的中断程序执行完毕以后, 才会去执行其它中断程序。 当进入低优先级中断中执行时, 如又发生了高优先级的中断, 则立刻进入高优先级中断执行,处理完高优先级级中断后, 再返回处理低优先级中断, 这个过程就叫做中断嵌套,也称为抢占。 所以抢占优先级的概念就是, 优先级高的中断可以打断优先级低的中断的执行,从而形成嵌套。 当然反过来,优先级低的中断是不能打断优先级高的中断的。


固有优先级:
那么既然有抢占优先级,自然就也有非抢占优先级了,也称为固有优先级。在表1.3 中的最后一列给出的就是固有优先级,请注意,在中断优先级的编号中,一般都是数字越小优先级越高。 从表中可以看到一共有 1~6 共 6 级的优先级,这里的优先级与抢占优先级的一个不同点就是,它不具有抢占的特性,也就是说即使在低优先级中断执行过程中又发生了高优先级的中断,那么这个高优先级的中断也只能等到低优先级中断执行完后才能得到响应。

既然不能抢占,那么这个优先级有什么用呢?
答案是多个中断同时存在时的仲裁。比如说有多个中断同时发生了,当然实际上发生这种情况的概率很低,但另外一种情况就常见的多了,那就是出于某种原因我们暂时关闭了总中断,即 EA=0,执行完一段代码后又重新使能了总中断,即 EA=1,那么在这段时间里就很可能有多个中断都发生了,但因为总中断是关闭的,所以它们当时都得不到响应,而当总中断再次使能后,它们就会在同时请求响应了,很明显,这时也必需有个先后顺序才行,这就是非抢占优先级的作用了——如表1.3中,谁优先级最高先响应谁,然后按编号排队,依次得到响应.


摘自宋雪松老师《手把手教你学单片机--C语言版》,作为笔记之用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值