一文读懂单片机里面的“中断”优先级
内容提要
中断优先级和中断嵌套对系统设计很重要。中断分为一般紧急和特别紧急,根据需求区分。最紧急的事情发生时,必须先处理最紧急的事情,再解决其他事情。单片机程序中也有一般紧急和特别紧急中断,涉及中断优先级和中断嵌套。抢占优先级可以打断低优先级中断,固有优先级不能打断高优先级中断。固有优先级用于多个中断同时存在时的仲裁。抢占和非抢占优先级协同工作,使中断系统有序工作。
延伸解读
抢占优先级:决定能否打断当前中断
文章指出,抢占优先级由IP寄存器对应位控制,置1后该中断优先级高于其他位为0的中断。高抢占优先级中断可以打断低优先级中断的执行,形成中断嵌套;反之低优先级不能打断高优先级。这意味系统设计时,需把对实时性要求最高的任务设为高抢占优先级,确保其能及时响应。
固有优先级:不抢占,只用于同时请求时的仲裁
固有优先级(非抢占优先级)不具备打断能力,即使高固有优先级中断发生,也要等当前低优先级中断执行完才响应。它的作用在于多个中断同时请求时决定响应顺序,例如总中断关闭期间多个中断挂起,重新使能后按固有优先级编号排队响应。编号越小优先级越高。
两种优先级协同:兼顾紧急响应与有序性
抢占优先级保证紧急任务能打断当前程序,避免延误;固有优先级则在多个中断同时待处理时提供仲裁顺序,防止混乱。两者配合使中断系统既不会无休止嵌套,又能让必要任务优先处理。实际设计中需根据任务紧急程度合理分配两种优先级,而非随意设置。
Q&A
单片机中断优先级有哪两种类型?它们有什么区别?
中断优先级分为抢占优先级和固有优先级(非抢占优先级)。抢占优先级高的中断可以打断正在执行的低优先级中断,形成中断嵌套;而固有优先级不具备抢占特性,高优先级中断不能打断正在执行的低优先级中断,只能等待其执行完毕。
什么是中断嵌套?它是如何发生的?
中断嵌套是指当单片机正在执行低优先级中断服务程序时,如果发生高优先级中断,则立即暂停当前低优先级中断,转去执行高优先级中断,待高优先级中断处理完毕后再返回继续执行低优先级中断的过程。这种嵌套由抢占优先级实现。
固有优先级(非抢占优先级)有什么作用?
固有优先级主要用于多个中断同时请求时的仲裁。例如,当总中断被暂时关闭(EA=0)期间有多个中断发生,重新使能总中断(EA=1)后,这些中断会同时请求响应,此时根据固有优先级的编号决定响应顺序,编号越小优先级越高,依次响应。
中断优先级的编号与优先级高低有什么关系?
在中断优先级的编号中,通常数字越小表示优先级越高。例如,固有优先级编号为1的中断优先级最高,编号为6的优先级最低。
抢占优先级和固有优先级如何协同工作?
抢占优先级允许高优先级中断打断低优先级中断,实现紧急任务的及时处理;固有优先级则在多个中断同时请求时提供仲裁顺序,避免无休止的嵌套。两者协同使中断系统既有序又高效。
在单片机中,如何设置某个中断的抢占优先级?
通过中断优先级寄存器IP进行设置。IP寄存器的每一位对应一个中断的抢占优先级,复位值均为0。将某一位设置为1,则该中断的抢占优先级高于其他位为0的中断。例如,设置PT0位为1,则定时器T0中断具有更高的抢占优先级。