打印
[应用方案]

单片机中断的优先级

[复制链接]
3537|80
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
usysm|  楼主 | 2023-12-23 12:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
中断优先级的内容,大家先通过我的介绍大概了解一下即可,后边实际应用的时候我们再详细理解。
在讲中断产生背景的时候,我们仅仅讲了看电视和烧水的例子,但是实际生活当中还有更复杂的,比如我正在看电视,这个时候来电话了,我要进入接电话的“中断”程序当中去,就在接电话的同时,听到了水开的声音,水开的“中断”也发生了,我们就必须要放下手上的电话,先把煤气关掉,然后再回来听电话,最后听完了电话再看电视,这里就产生了一个优先级的问题。
还有一种情况,我们在看电视的时候,这个时候听到水开的声音,水开的“中断”发生了,我们要进入关煤气的“中断”程序当中,而在关煤气的同时,电话声音响了,而这个时候,我们的处理方式是先把煤气关闭,再去接听电话,最后再看电视。
从这两个过程中,我们可以得到一个结论,就是最最紧急的事情,一旦发生后,我们不管当时处在哪个“程序”当中,我们必须先去处理最最紧急的事情,处理完毕后再去解决其它事情。
在我们的单片机程序当中有时候也是这样的,有一般紧急的中断,有特别紧急的中断,这取决于具体的系统设计,这就涉及到中断优先级和中断嵌套的概念,在本章节我们先简单介绍一下相关寄存器,不做例程说明。
中断优先级有两种,一种是抢占优先级,一种是固有优先级,先介绍抢占优先级。来看表6-4和表6-5。
表6-4 IP——中断优先级寄存器的位分配(地址 0xB8、可位寻址)
7
6
5
4
3
2
1
0
符号----PT2PSPT1PX1PT0PX0
复位值----000000
表6-5 IP——中断优先级寄存器的位描述
符号
描述
7--保留
6--保留
5PT2定时器2中断优先级控制位
4PS串口中断优先级控制位
3PT1定时器1中断优先级控制位
2PX1外部中断1中断优先级控制位
1PT0定时器0中断优先级控制位
0PX0外部中断0中断优先级控制位
IP 这个寄存器的每一位,表示对应中断的抢占优先级,每一位的复位值都是0,当我们把某一位设置为1的时候,这一位的优先级就比其它位的优先级高了。比如我们设置了 PT0 位为1后,当单片机在主循环或者任何其它中断程序中执行时,一旦定时器 T0 发生中断,作为更高的优先级,程序马上就会跑到 T0 的中断程序中来执行。反过来,当单片机正在 T0中断程序中执行时,如果有其它中断发生了,还是会继续执行 T0 中断程序,直到把 T0 中的中断程序执行完毕以后,才会去执行其它中断程序。
当进入低优先级中断中执行时,如又发生了高优先级的中断,则立刻进入高优先级中断执行,处理完高优先级级中断后,再返回处理低优先级中断,这个过程就叫做中断嵌套,也称为抢占。所以抢占优先级的概念就是,优先级高的中断可以打断优先级低的中断的执行,从而形成嵌套。当然反过来,优先级低的中断是不能打断优先级高的中断的。
那么既然有抢占优先级,自然就也有非抢占优先级了,也称为固有优先级。
在表6-3中的最后一列给出的就是固有优先级,请注意,在中断优先级的编号中,一般都是数字越小优先级越高。
从表中可以看到一共有1~6共6级的优先级,这里的优先级与抢占优先级的一个不同点就是,它不具有抢占的特性,也就是说即使在低优先级中断执行过程中又发生了高优先级的中断,那么这个高优先级的中断也只能等到低优先级中断执行完后才能得到响应。既然不能抢占,那么这个优先级有什么用呢?
答案是多个中断同时存在时的仲裁。比如说有多个中断同时发生了,当然实际上发生这种情况的概率很低,但另外一种情况就常见的多了,那就是出于某种原因我们暂时关闭了总中断,即 EA=0,执行完一段代码后又重新使能了总中断,即 EA=1,那么在这段时间里就很可能有多个中断都发生了,但因为总中断是关闭的,所以它们当时都得不到响应,而当总中断再次使能后,它们就会在同时请求响应了,很明显,这时也必需有个先后顺序才行,这就是非抢占优先级的作用了——如表6-3中,谁优先级最高先响应谁,然后按编号排队,依次得到响应。
抢占优先级和非抢占优先级的协同,可以使单片机中断系统有条不紊的工作,既不会无休止的嵌套,又可以保证必要时紧急任务得到优先处理。

使用特权

评论回复
沙发
mattlincoln| | 2024-1-3 12:24 | 只看该作者
在需要串口通信和低优先级中断同时工作时,需要合理设置串行中断的优先级。

使用特权

评论回复
板凳
hearstnorman323| | 2024-1-3 12:41 | 只看该作者
根据单片机手册进行正确的优先级寄存器配置。这可能涉及单独的优先级寄存器、中断使能寄存器中的优先级位,或者通过特殊的数据结构来设定。

使用特权

评论回复
地板
uiint| | 2024-1-3 13:39 | 只看该作者
中断处理应该尽可能快,以避免对系统性能的影响。
如果中断处理时间过长,可能会影响其他中断的处理。

使用特权

评论回复
5
rosemoore| | 2024-1-3 14:46 | 只看该作者
一些特殊的中断源可能会有特定的优先级设置要求,需要仔细阅读相关文档和参考手册。

使用特权

评论回复
6
gygp| | 2024-1-3 15:04 | 只看该作者
通常情况下,应将响应时间要求严格的中断设置为较高优先级。

使用特权

评论回复
7
yeates333| | 2024-1-3 15:49 | 只看该作者
抢占优先级的特点是,具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。

使用特权

评论回复
8
gygp| | 2024-1-3 16:11 | 只看该作者
在编写中断服务程序时,应尽量缩短中断服务程序的执行时间,避免长时间占用中断资源,影响其他中断的处理。

使用特权

评论回复
9
nomomy| | 2024-1-3 16:38 | 只看该作者
需要根据中断的紧急程度和优先级来设置中断的响应顺序。

使用特权

评论回复
10
elsaflower| | 2024-1-3 17:22 | 只看该作者
在某些情况下,为了防止优先级反转,可能需要临时屏蔽低优先级的中断。

使用特权

评论回复
11
juliestephen| | 2024-1-3 17:34 | 只看该作者
在某些高级单片机中,优先级策略还分为抢占式优先级和子优先级。抢占式优先级决定中断能否打断其他中断;子优先级在同级抢占优先级中断之间进一步划分处理顺序。

使用特权

评论回复
12
usysm|  楼主 | 2024-1-3 17:46 | 只看该作者
避免将所有中断源设置为同一优先级,否则可能导致中断响应延迟。

使用特权

评论回复
13
abotomson| | 2024-1-3 17:55 | 只看该作者
中断优先级还会影响单片机处理中断的时间。优先级较高的中断通常会占用较短的处理时间,而优先级较低的中断则需要等待优先级较高的中断处理完毕后才能被处理,这会导致处理时间较长。

使用特权

评论回复
14
eefas| | 2024-1-3 18:42 | 只看该作者
嵌套中断是指一个中断服务程序在执行过程中可以被另一个更高优先级的中断所打断。
在嵌套中断中,必须确保能够正确地返回到被中断的中断服务程序。

使用特权

评论回复
15
lzbf| | 2024-1-3 19:20 | 只看该作者
它决定了当多个中断同时发生时,哪个中断会被优先处理。一般来说,单片机的中断有两种优先级:抢占优先级和固有优先级。

使用特权

评论回复
16
alvpeg| | 2024-1-3 19:38 | 只看该作者
单片机的中断优先级通常通过硬件寄存器进行设置。不同的单片机型号可能会有不同的寄存器名称和设置方法。

使用特权

评论回复
17
youtome| | 2024-1-4 09:45 | 只看该作者
中断处理程序中不应再次产生同级或更高优先级的中断。否则,可能导致中断处理程序无法退出,系统陷入死循环。

使用特权

评论回复
18
bestwell| | 2024-1-4 10:22 | 只看该作者
固有优先级则没有这种特性,即使在低优先级中断执行过程中又发生了高优先级中断,也不会改变低优先级中断的处理顺序。

使用特权

评论回复
19
linfelix| | 2024-1-4 11:43 | 只看该作者
不同型号的单片机可能有不同的中断优先级设置方法,需要参考单片机的数据手册。

使用特权

评论回复
20
pentruman| | 2024-1-4 13:32 | 只看该作者
有些单片机只提供简单的固定优先级或不可编程优先级,而有些则提供了丰富的可编程优先级机制。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

4047

帖子

3

粉丝