在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > STM32中斷優(yōu)先級相關(guān)概念與使用筆記

            STM32中斷優(yōu)先級相關(guān)概念與使用筆記

            作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
            一、基本概念
            1.ARM cortex_m3內(nèi)核支持256個中斷(16個內(nèi)核+240外部)和可編程256級中斷優(yōu)先級的設(shè)置,與其相關(guān)的中斷控制和中斷優(yōu)先級控制寄存器(NVIC、SYSTICK等)也都屬于cortex_m3內(nèi)核的部分。STM32采用了cortex_m3內(nèi)核,所以這部分仍舊保留使用,但STM32并沒有使用cortex_m3內(nèi)核全部的東西(如內(nèi)存保護單元MPU等),因此它的NVIC是cortex_m3內(nèi)核的NVIC的子集。
            2.STM32目前支持的中斷共為84個(16個內(nèi)核+68個外部),和16級可編程中斷優(yōu)先級的設(shè)置(僅使用中斷優(yōu)先級設(shè)置8bit中的高4位,見后面解釋)?!秴⒖甲钚?01xx-107xx STM32 Reference manual, RM0008》。
            3.以下主要對“外部中斷通道”進行說明。
            對于cortex_m3內(nèi)核所支持的240個外部中斷,我在這里使用了“中斷通道”這個概念,因為盡管每個中斷對應一個外圍設(shè)備,但該外圍設(shè)備通常具備若干個可以引起中斷的中斷源或中斷事件。而該設(shè)備的所有的中斷都只能通過該指定的“中斷通道”向內(nèi)核申請中斷。因此,下面關(guān)于中斷優(yōu)先級的概念都是針對“中斷通道”的。當該中斷通道的優(yōu)先級確定后,也就確定了該外圍設(shè)備的中斷優(yōu)先級,并且該設(shè)備所能產(chǎn)生的所有類型的中斷,都享有相同的通道中斷優(yōu)先級。至于該設(shè)備本身產(chǎn)生的多個中斷的執(zhí)行順序,則取決于用戶的中斷服務程序。
            4. STM32可以支持的68個外部中斷通道,已經(jīng)固定的分配給相應的外部設(shè)備。每個中斷通道都具備自己的中斷優(yōu)先級控制字節(jié)PRI_n(8位,但在STM32中只使用4位,高4位有效),每4個通道的8位中斷優(yōu)先級控制字(PRI_n)構(gòu)成一個32位的優(yōu)先級寄存器(Priority Register)。68個通道的優(yōu)先級控制字至少構(gòu)成17個32位的優(yōu)先級寄存器,它們是NVIC寄存器中的一個重要部分。
            5.對于這4bit的中斷優(yōu)先級控制位還必須分成2組看:從高位開始,前面是定義搶先式優(yōu)先級的位,后面用于定義子優(yōu)先級。4bit的分組組合可以有以下幾種形式:
            編 號
            分配情況
            7
            0:4
            無搶先式優(yōu)先級,16個子優(yōu)先級
            6
            1:3
            2個搶先式優(yōu)先級,8個子優(yōu)先級
            5
            2:2
            4個搶先式優(yōu)先級,4個子優(yōu)先級
            4
            3:1
            8個搶先式優(yōu)先級,2個子優(yōu)先級
            3/2/1/0
            4:0
            16個搶先式優(yōu)先級,無子優(yōu)先級
            6.在一個系統(tǒng)中,通常只使用上面5種分配情況的一種,具體采用哪一種,需要在初始化時寫入到一個32位寄存器AIRC(Application Interrupt and Reset Control Register)
            的第[10:8]這3個位中。這3個bit位有專門的稱呼:PRIGROUP(具體寫操作后面介紹)。比如你將0x05(即上表中的編號)寫到AIRC的[10:8]中,那么也就規(guī)定了你的系統(tǒng)中只有4個搶先式優(yōu)先級,相同的搶先式優(yōu)先級下還可以有4個不同級別的子優(yōu)先級。
            7.AIRC中PRIGROUP的值規(guī)定了設(shè)置和確定每個外部中斷通道優(yōu)先級的格式。例如,在上面將0x05寫入了AIRC中PRIGROUP,也就規(guī)定了當前系統(tǒng)中只能有4個搶先式優(yōu)先級,相同的搶先式優(yōu)先級下還可以有4個不同級別的子優(yōu)先級,他們分別為:
            位[7:6]
            位[5:4]
            位[3:0]
            00
            0號搶先優(yōu)先級
            00
            0號子優(yōu)先級
            無效
            01
            1號搶先優(yōu)先級
            01
            1號子優(yōu)先級
            無效
            10
            2號搶先優(yōu)先級
            10
            2號子優(yōu)先級
            無效
            11
            3號搶先優(yōu)先級
            11
            3號子優(yōu)先級
            無效
            8.如果在你的系統(tǒng)中使用了TIME2(中斷通道28)和EXTI0(中斷通道6)兩個中斷,而TIME2中斷必須優(yōu)先響應,而且當系統(tǒng)在執(zhí)行EXIT0中斷服務時也必須打斷(搶先、嵌套),就必須設(shè)置TIME2的搶先優(yōu)先級比EXTI0的搶先優(yōu)先級要高(數(shù)目?。?。假定EXTI0為2號搶先優(yōu)先級,那么TIME2就必須設(shè)置成0或1號搶先優(yōu)先級。這些工作需要在AIRC中的PRIGROUP設(shè)置完成,確定了整個系統(tǒng)所具有的優(yōu)先級個數(shù)后,再分別對每個中斷通道(設(shè)備)進行設(shè)置。
            9.具體優(yōu)先級的確定和嵌套規(guī)則。ARM cortex_m3(STM32)規(guī)定
            a/ 只能高搶先優(yōu)先級的中斷可以打斷低搶先優(yōu)先級的中斷服務,構(gòu)成中斷嵌套。
            b/ 當2(n)個相同搶先優(yōu)先級的中斷出現(xiàn),它們之間不能構(gòu)成中斷嵌套,但STM32首先響應子優(yōu)先級高的中斷。
            c/ 當2(n)個相同搶先優(yōu)先級和相同子優(yōu)先級的中斷出現(xiàn),STM32首先響應中斷通道所對應的中斷向量地址低的那個中斷(見ROM0008,表52)。
            具體一點:
            0號搶先優(yōu)先級的中斷,可以打斷任何中斷搶先優(yōu)先級為非0號的中斷;1號搶先優(yōu)先級的中斷,可以打斷任何中斷搶先優(yōu)先級為2、3、4號的中斷;……;構(gòu)成中斷嵌套。
            如果兩個中斷的搶先優(yōu)先級相同,誰先出現(xiàn),就先響應誰,不構(gòu)成嵌套。如果一起出現(xiàn)(或掛在那里等待),就看它們2個誰的子優(yōu)先級高了,如果子優(yōu)先級也相同,就看它們的中斷向量位置了。
            10.上電Reset后,寄存器AIRC中PRIGROUP[10:8]的值為0(編號0),因此此時系統(tǒng)使用16個搶先優(yōu)先級,無子優(yōu)先級。另外由于所有外部中斷通道的優(yōu)先級控制字PRI_n也都是0,所以根據(jù)上面的定義可以得出,此時68個外部中斷通道的搶先優(yōu)先級都是0號,沒有子優(yōu)先級的區(qū)分。故此時不會發(fā)生任何的中斷嵌套行為,誰也不能打斷當前正在執(zhí)行的中斷服務。當多個中斷出現(xiàn)后,則看它們的中斷向量地址:地址越低,中斷級別越高,STM32優(yōu)先響應。
            注意:此時內(nèi)部中斷的搶先優(yōu)先級也都是0號,由于它們的中斷向量地址比外部中斷向量地址都低,所以它們的優(yōu)先級比外部中斷通道高,但如果此時正在執(zhí)行一個外部中斷服務,它們也必須排隊等待,只是可以插隊,當正在執(zhí)行的中斷完成后,它們可以優(yōu)先得到執(zhí)行。
            了解以上基本概念還是不夠的,還要了解具體中斷的控制有那些途徑,中斷服務程序如何正確的編寫。下面的描述主要以TIME2通道為例。
            二、中斷控制
            1.對于STM32講,外部中斷通道位置28(35號優(yōu)先級)是給外部設(shè)備TIME2的,但TIME2本身能夠引起中斷的中斷源或事件有好多個,比如更新事件(上溢/下溢)、輸入捕獲、輸出匹配、DMA申請等。所有TIME2的中斷事件都是通過一個TIME2的中斷通道向STM32內(nèi)核提出中斷申請,那么STM32中如何處理和控制TIME2和它眾多的、不同的、中斷申請呢?
            (題外話:STM32中的一個通用定時計數(shù)器,就比8位控制器(如AVR,MCS-51就更不必說了)中TIME要復雜多了。學過AVR的,可能對輸入捕獲、輸出匹配等還有概念,但如果你學的標準架構(gòu)的MCS-51,那么上手32位可能困難就更多了。所以我一直推薦學習8位機應該認真的從AVR開始。盡管51有很大的市場,價格也相對便宜,但從長遠的眼光看問題,從后續(xù)掌握32位的使用,考慮到學生的可持續(xù)發(fā)展,AVR應該是比較好的選擇。)
            2.cortex_m3內(nèi)核對于每一個外部中斷通道都有相應的控制字和控制位,用于單獨的和總的控制該中斷通道。它們包括有:


            關(guān)鍵詞: STM32中斷優(yōu)先

            評論


            技術(shù)專區(qū)

            關(guān)閉