0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)里的“中斷”優(yōu)先級(jí)

Q4MP_gh_c472c21 ? 來(lái)源:技術(shù)讓夢(mèng)想更偉大 ? 作者:技術(shù)讓夢(mèng)想更偉大 ? 2022-04-08 09:57 ? 次閱讀

中斷優(yōu)先級(jí)的內(nèi)容,有一般緊急的中斷,有特別緊急的中斷,這取決于具體的系統(tǒng)設(shè)計(jì),這就涉及到中斷優(yōu)先級(jí)和中斷嵌套的概念,今天先簡(jiǎn)單介紹一下相關(guān)寄存器,不做例程說(shuō)明。

中斷的產(chǎn)生背景,實(shí)際生活當(dāng)中還有更復(fù)雜的,比如我正在看電視,這個(gè)時(shí)候來(lái)電話了,我要進(jìn)入接電話的“中斷”程序當(dāng)中去,就在接電話的同時(shí),聽(tīng)到了水開(kāi)的聲音,水開(kāi)的“中斷”也發(fā)生了,我們就必須要放下手上的電話,先把煤氣關(guān)掉,然后再回來(lái)聽(tīng)電話,最后聽(tīng)完了電話再看電視,這里就產(chǎn)生了一個(gè)優(yōu)先級(jí)的問(wèn)題。

還有一種情況,我們?cè)诳措娨暤臅r(shí)候,這個(gè)時(shí)候聽(tīng)到水開(kāi)的聲音,水開(kāi)的“中斷”發(fā)生了,我們要進(jìn)入關(guān)煤氣的“中斷”程序當(dāng)中,而在關(guān)煤氣的同時(shí),電話聲音響了,而這個(gè)時(shí)候,我們的處理方式是先把煤氣關(guān)閉,再去接聽(tīng)電話,最后再看電視。

從這兩個(gè)過(guò)程中,我們可以得到一個(gè)結(jié)論,就是最最緊急的事情,一旦發(fā)生后,我們不管當(dāng)時(shí)處在哪個(gè)“程序”當(dāng)中,我們必須先去處理最最緊急的事情,處理完畢后再去解決其它事情。

在我們的單片機(jī)程序當(dāng)中有時(shí)候也是這樣的,有一般緊急的中斷,有特別緊急的中斷,這取決于具體的系統(tǒng)設(shè)計(jì),這就涉及到中斷優(yōu)先級(jí)和中斷嵌套的概念,今天先簡(jiǎn)單介紹一下相關(guān)寄存器,不做例程說(shuō)明。

中斷優(yōu)先級(jí)有兩種,一種是搶占優(yōu)先級(jí),一種是固有優(yōu)先級(jí),先介紹搶占優(yōu)先級(jí)。來(lái)看表1和表2。

表1:IP——中斷優(yōu)先級(jí)寄存器的位分配(地址0xB8、可位尋址)

9c9d1d68-b6b9-11ec-aa7f-dac502259ad0.png

表2:IP——中斷優(yōu)先級(jí)寄存器的位描述

9ca935d0-b6b9-11ec-aa7f-dac502259ad0.png

IP 這個(gè)寄存器的每一位,表示對(duì)應(yīng)中斷的搶占優(yōu)先級(jí),每一位的復(fù)位值都是 0,當(dāng)我們把某一位設(shè)置為 1 的時(shí)候,這一位的優(yōu)先級(jí)就比其它位的優(yōu)先級(jí)高了。

比如我們?cè)O(shè)置了 PT0位為 1 后,當(dāng)單片機(jī)在主循環(huán)或者任何其它中斷程序中執(zhí)行時(shí),一旦定時(shí)器 T0 發(fā)生中斷,作為更高的優(yōu)先級(jí),程序馬上就會(huì)跑到 T0 的中斷程序中來(lái)執(zhí)行。

反過(guò)來(lái),當(dāng)單片機(jī)正在 T0中斷程序中執(zhí)行時(shí),如果有其它中斷發(fā)生了,還是會(huì)繼續(xù)執(zhí)行 T0 中斷程序,直到把 T0 中的中斷程序執(zhí)行完畢以后,才會(huì)去執(zhí)行其它中斷程序。

當(dāng)進(jìn)入低優(yōu)先級(jí)中斷中執(zhí)行時(shí),如又發(fā)生了高優(yōu)先級(jí)的中斷,則立刻進(jìn)入高優(yōu)先級(jí)中斷執(zhí)行,處理完高優(yōu)先級(jí)級(jí)中斷后,再返回處理低優(yōu)先級(jí)中斷,這個(gè)過(guò)程就叫做中斷嵌套,也稱為搶占。

所以搶占優(yōu)先級(jí)的概念就是,優(yōu)先級(jí)高的中斷可以打斷優(yōu)先級(jí)低的中斷的執(zhí)行,從而形成嵌套。當(dāng)然反過(guò)來(lái),優(yōu)先級(jí)低的中斷是不能打斷優(yōu)先級(jí)高的中斷的。

表3:中斷查詢序列

9cba992e-b6b9-11ec-aa7f-dac502259ad0.png

那么既然有搶占優(yōu)先級(jí),自然就也有非搶占優(yōu)先級(jí)了,也稱為固有優(yōu)先級(jí)。在表3中的最后一列給出的就是固有優(yōu)先級(jí),請(qǐng)注意,在中斷優(yōu)先級(jí)的編號(hào)中,一般都是數(shù)字越小優(yōu)先級(jí)越高。

從表3中可以看到一共有 1~6 共 6 級(jí)的優(yōu)先級(jí),這里的優(yōu)先級(jí)與搶占優(yōu)先級(jí)的一個(gè)不同點(diǎn)就是,它不具有搶占的特性,也就是說(shuō)即使在低優(yōu)先級(jí)中斷執(zhí)行過(guò)程中又發(fā)生了高優(yōu)先級(jí)的中斷,那么這個(gè)高優(yōu)先級(jí)的中斷也只能等到低優(yōu)先級(jí)中斷執(zhí)行完后才能得到響應(yīng)。既然不能搶占,那么這個(gè)優(yōu)先級(jí)有什么用呢?

答案是多個(gè)中斷同時(shí)存在時(shí)的仲裁。比如說(shuō)有多個(gè)中斷同時(shí)發(fā)生了,當(dāng)然實(shí)際上發(fā)生這種情況的概率很低,但另外一種情況就常見(jiàn)的多了,那就是出于某種原因我們暫時(shí)關(guān)閉了總中斷,即 EA=0,執(zhí)行完一段代碼后又重新使能了總中斷,即 EA=1,那么在這段時(shí)間里就很可能有多個(gè)中斷都發(fā)生了,但因?yàn)榭傊袛嗍顷P(guān)閉的,所以它們當(dāng)時(shí)都得不到響應(yīng),而當(dāng)總中斷再次使能后,它們就會(huì)在同時(shí)請(qǐng)求響應(yīng)了。

很明顯,這時(shí)也必需有個(gè)先后順序才行,這就是非搶占優(yōu)先級(jí)的作用了——如表3中,誰(shuí)優(yōu)先級(jí)最高先響應(yīng)誰(shuí),然后按編號(hào)排隊(duì),依次得到響應(yīng)。

搶占優(yōu)先級(jí)和非搶占優(yōu)先級(jí)的協(xié)同,可以使單片機(jī)中斷系統(tǒng)有條不紊的工作,既不會(huì)無(wú)休止的嵌套,又可以保證必要時(shí)緊急任務(wù)得到優(yōu)先處理。在后續(xù)的學(xué)習(xí)過(guò)程中,中斷系統(tǒng)會(huì)與我們?nèi)缬半S形,處處都有它的身影,隨著學(xué)習(xí)的深入,相信你對(duì)它的理解也會(huì)更加的深入。

END

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631990
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119816

原文標(biāo)題:一文讀懂單片機(jī)里的“中斷”優(yōu)先級(jí)

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    freertos中斷優(yōu)先級(jí)在哪設(shè)置

    FreeRTOS是一個(gè)流行的實(shí)時(shí)操作系統(tǒng),它廣泛應(yīng)用于嵌入式系統(tǒng)開(kāi)發(fā)。在FreeRTOS中,中斷優(yōu)先級(jí)是一個(gè)重要的概念,因?yàn)樗鼪Q定了中斷處理的順序和響應(yīng)時(shí)間。 1. 理解中斷
    的頭像 發(fā)表于 09-02 14:17 ?509次閱讀

    ESP32S2如何設(shè)置中斷優(yōu)先級(jí)?

    ESP32S2有六級(jí)中斷, 如何設(shè)置中斷優(yōu)先級(jí)? 比如在GPIO例程 ,這種中斷
    發(fā)表于 06-21 07:59

    請(qǐng)問(wèn)有什么方法降低WIFI中斷優(yōu)先級(jí)?

    因?yàn)轫?xiàng)目對(duì)時(shí)序輸出要求比較嚴(yán)格,WIFI中斷優(yōu)先級(jí)比硬件定時(shí)器中斷優(yōu)先級(jí)要高,在定時(shí)器中斷里面對(duì)GPIO管腳控制被延長(zhǎng)執(zhí)行,請(qǐng)問(wèn)有什么方法降
    發(fā)表于 06-19 07:37

    systick的中斷優(yōu)先級(jí)是否應(yīng)該設(shè)置為最高優(yōu)先級(jí)的嵌套中斷?

    最近在學(xué)習(xí)ucosii有這樣一個(gè)疑問(wèn),關(guān)于stm32的systick作為ucosii的基準(zhǔn)時(shí)鐘,systick的中斷優(yōu)先級(jí)是否應(yīng)該設(shè)置為最高優(yōu)先級(jí)的嵌套中斷。理由是什么?各位大俠求指教
    發(fā)表于 05-16 06:44

    stm32的中斷優(yōu)先級(jí)分組了之后還能改分組嗎?

    如標(biāo)題所示,stm32的中斷優(yōu)先級(jí)分組了之后還能改分組嗎? 比如我要使用外部中斷EXIT2,3,我在配置的時(shí)候配置了優(yōu)先級(jí)分組2組,然后配置了EXIT2,3,如果我下面又想開(kāi)外部
    發(fā)表于 05-13 08:40

    STM8中斷優(yōu)先級(jí)不夠怎么解決?

    STM8L 中,中斷優(yōu)先級(jí)通過(guò)下面函數(shù)設(shè)置,但此處僅 ITC_PriorityLevel_1,ITC_PriorityLevel_2,ITC_PriorityLevel_3總共才3個(gè)中斷優(yōu)先級(jí)
    發(fā)表于 05-06 06:54

    求助,關(guān)于stm32F4中斷優(yōu)先級(jí)0無(wú)法搶占的問(wèn)題求解

    搶占優(yōu)先級(jí)具有最高優(yōu)先級(jí)別。 現(xiàn)在我使用兩個(gè)定時(shí)器: 1)TIM2設(shè)置優(yōu)先級(jí)為0,TIM4設(shè)置優(yōu)先級(jí)為1 2)若先啟動(dòng)TIM4,延時(shí)一下再啟動(dòng)TIM2(為了先觸發(fā)定時(shí)器4
    發(fā)表于 04-23 07:26

    STM32F103的寄存器NVIC_IPRx搶占優(yōu)先級(jí)和子優(yōu)先級(jí)是怎么設(shè)置的?

    STM32F103的寄存器NVIC_IPRx有些不明白,搶占優(yōu)先級(jí)和子優(yōu)先級(jí)是怎么設(shè)置的? 如果,中斷分組2,搶占優(yōu)先級(jí)3,子優(yōu)先級(jí)3
    發(fā)表于 03-27 07:48

    Hightec對(duì)芯片中斷優(yōu)先級(jí)分配時(shí),中斷號(hào)越高中斷優(yōu)先級(jí)越高嗎?

    請(qǐng)問(wèn)大佬,Hightec對(duì)芯片中斷優(yōu)先級(jí)分配時(shí),中斷號(hào)越高中斷優(yōu)先級(jí)越高嗎?看網(wǎng)上的帖子說(shuō)中斷號(hào)
    發(fā)表于 02-27 06:13

    M0516中斷優(yōu)先級(jí)怎么設(shè)置?

    新唐M0516中斷優(yōu)先級(jí)的設(shè)置,有沒(méi)有示例,沒(méi)找到相關(guān)接口,謝謝!
    發(fā)表于 01-16 07:25

    華為和思科默認(rèn)路由優(yōu)先級(jí)

    優(yōu)先級(jí)值不同,則優(yōu)先級(jí)值最小的為最優(yōu)路由(無(wú)論開(kāi)銷值是否相同,另一種理解就是對(duì)不同路由來(lái)源或路由協(xié)議之間的比較)。
    的頭像 發(fā)表于 01-11 10:47 ?1037次閱讀

    GD32如何配置中斷優(yōu)先級(jí)分組以及中斷優(yōu)先級(jí)

    使用GD32 MCU的過(guò)程中,大家可能會(huì)有以下疑問(wèn):中斷優(yōu)先級(jí)如何配置和使用?
    的頭像 發(fā)表于 01-10 10:30 ?2870次閱讀
    GD32如何配置<b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b>分組以及<b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b>

    單片機(jī)中斷筆記

    (總允許)位。 中斷優(yōu)先級(jí)控制——IP 80C51單片機(jī)有兩個(gè)中斷優(yōu)先級(jí),即可實(shí)現(xiàn)二級(jí)
    發(fā)表于 12-04 21:05

    51單片機(jī)中斷學(xué)習(xí)筆記

    。 ——:無(wú)效位 2.中斷優(yōu)先級(jí)寄存器IP PS——串行口中斷優(yōu)先級(jí)控制位 PS=1,串行口中斷定義為高
    發(fā)表于 12-04 19:28

    python中運(yùn)算符的優(yōu)先級(jí)大小

    Python中運(yùn)算符的優(yōu)先級(jí)決定了表達(dá)式中各個(gè)運(yùn)算符的計(jì)算順序。了解運(yùn)算符的優(yōu)先級(jí)對(duì)于正確理解和編寫復(fù)雜的表達(dá)式非常重要。本文將詳細(xì)介紹Python中運(yùn)算符的優(yōu)先級(jí),并給出一些示例來(lái)幫助讀者更好地理
    的頭像 發(fā)表于 11-29 16:21 ?3075次閱讀