单片机中断优先级及中断嵌套,以STC8G为例。

以STC8G单片机为例,存在4个中断优先级,最高优先级(3)>较高优先级(2)>较低优先级(1)>最低优先级(0)。

4个中断优先级则代表着STC8G可以实现4级中断嵌套。

例如:设置外部中断0为优先级3,定时器0为优先级2,串口1为优先级1,定时器1为优先级0

则当中断同时到来时,以最高优先级排序依此进入中断服务函数中。

当定时器1中断到来,进入中断服务函数之后,串口1中断来了,则会从当前的中断服务函数跳转到串口1的中断服务函数中,只有当串口1的中断服务函数执行完成后,才会再次返回定时器1中断服务函数,定时器1中断服务函数执行完成后返回主循环。

在该优先级设置下,外部中断0可打断定时器0,定时器0可打断串口1,串口1可打断定时器1;此时即为4级中断嵌套。

但如果中断同级时怎么办?

此时需要引入一个中断查询优先级的概念,查看MCU手册,可以看到中断号。

中断号就对应着中断查询优先级。

如:

中断查询优先级可以理解为所有中断优先级同级的情况下,存在排序。

所有中断优先级同级的情况下,中断同时到来时,必定依次先执行中断号靠前的中断服务函数。

且低查询优先级的中断服务函数也不会被高查询优先级的中断服务函数打断,必须等低查询优先级的中断服务函数执行完成后才执行高查询优先级的中断服务函数。(因为此时大家的中断优先级是同级,无法打断别人的中断服务函数,无法进行中断嵌套)。

猜你喜欢

转载自blog.csdn.net/weixin_39457767/article/details/130520778