女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

Cortex-M 內(nèi)核中斷/異常系統(tǒng)、中斷優(yōu)先級(jí)/嵌套 詳解

jf_pJlTbmA9 ? 來(lái)源:cathy ? 作者:cathy ? 2023-09-27 15:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

問(wèn)題

最近在使用 STM32F3 芯片的時(shí)候,遇到這樣一個(gè)問(wèn)題:如果外部中斷來(lái)的頻率足夠快,上一個(gè)中斷沒(méi)有處理完成,新來(lái)的中斷如何處理? 在調(diào)試時(shí),發(fā)現(xiàn)有中斷有 掛起、激活、失能等狀態(tài),考慮這些狀態(tài)都是干啥用的呢!他們是 Cortex-M 核所共有的,因此,這里不針對(duì)與具體用的 STM32 MCU,直接上升到 Cortex-M 內(nèi)核來(lái)了解一下!

簡(jiǎn)介

中斷(也稱(chēng)為“異?!保┦俏?a target="_blank">控制器一個(gè)很常見(jiàn)的特性。中斷一般是由硬件(例如外設(shè)、外部引腳)產(chǎn)生,當(dāng)中斷產(chǎn)生以后 CPU 就會(huì)中斷當(dāng)前的程序執(zhí)行流程轉(zhuǎn)而去處理中斷服務(wù)中指定的操作。

所有的 Cortex-M 內(nèi)核都會(huì)包含一個(gè)用于中斷處理的組件:NVIC(Nested Vectored Interrupt Controller,嵌套向量中斷控制器)。它處理處理中斷,還處理其他需要服務(wù)的事件(例如 SVC 指令),通常稱(chēng)為異常(按照 ARM 的說(shuō)法,中斷也是一種異常)。

1.png

Cortex-M3 和 Cotex-M4 的 NVIC 最多支持 240 個(gè) IRQ(中斷請(qǐng)求)、1 個(gè)不可屏蔽中斷(NMI)、1 個(gè) Systick(滴答定時(shí)器)定時(shí)器中斷和多個(gè)系統(tǒng)異常。而 Cortex-M0 最多支持 32 個(gè) IRQ、1 個(gè)不可屏蔽中斷(NMI)、1 個(gè) Systick(滴答定時(shí)器)定時(shí)器中斷和多個(gè)系統(tǒng)異常。

  • IRQ: 多數(shù)由定時(shí)器、IO 端口、通信接口等外設(shè)產(chǎn)生

  • NMI: 通常由看門(mén)狗定時(shí)器或者掉電檢測(cè)器等外設(shè)產(chǎn)生

  • 其他: 主要來(lái)自系統(tǒng)內(nèi)核

注意,本文所說(shuō)的 Cortex-M 主要指定是 Cotex-M3 和 Cotex-M4。

2.png

Cortex-M0、Cortex-M0+、Cortex-M1 基于 ARMv6-M。與 Cotex-M3 和 Cotex-M4 相比,他們的指令集較小。而且,Cortex-M1 是專(zhuān)門(mén)為FPGA 應(yīng)用設(shè)計(jì)的,沒(méi)有獨(dú)立 MCU。

異常類(lèi)型

Cortex-M 處理器的異常中,編號(hào) 1~15 的為系統(tǒng)異常,16 及以上的則為中斷輸入。所有中斷級(jí)別的異常都具有可編程的優(yōu)先級(jí)。部分系統(tǒng)異常具有固定優(yōu)先級(jí)。ARM 給出了以下一張表:

未標(biāo)題-1.jpg

針對(duì) Cortex-M 系列的內(nèi)核,ARM 提供了一套叫做 CMSIS 的東西。目前,所有的 MCU 均使用 CMSIS 作為編程基礎(chǔ)。在 CMSIS-Core 中,中斷標(biāo)識(shí)有中斷枚舉實(shí)現(xiàn),從數(shù)值 0 開(kāi)始(代表中斷 #0)。其中,系統(tǒng)異常的編號(hào)為負(fù)數(shù)。具體如下:

3.png

CMSIS-Core 之所以使用另外一種編號(hào)系統(tǒng),是因?yàn)檫@樣可以稍微提高部分 API 的效率。中斷的編號(hào)和枚舉定義是同設(shè)備相關(guān)的,他們位于微控制器供應(yīng)商提供的頭文件中,在一個(gè)名為 IRQn 的 typedef 段中。

中斷處理(異常處理)

當(dāng)某種內(nèi)部或外部事件發(fā)生時(shí),MCU 的中斷系統(tǒng)將迫使 CPU 暫停正在執(zhí)行的程序,轉(zhuǎn)而去進(jìn)行中斷事件的處理,中斷處理完畢后,又返回被中斷的程序處,繼續(xù)執(zhí)行下去。

主程序正在執(zhí)行,當(dāng)遇到中斷請(qǐng)求(Interrupt Request)時(shí),暫停主程序的執(zhí)行轉(zhuǎn)而去執(zhí)行中斷服務(wù)例程(Interrupt Service Routine,ISR),稱(chēng)為響應(yīng),中斷服務(wù)例程執(zhí)行完畢后返回到主程序斷點(diǎn)處并繼續(xù)執(zhí)行主程序。多個(gè)中斷是可以進(jìn)行嵌套的。正在執(zhí)行的較低優(yōu)先級(jí)中斷可以被較高優(yōu)先級(jí)的中斷所打斷,在執(zhí)行完高級(jí)中斷后返回到低級(jí)中斷里繼續(xù)執(zhí)行。

4.png

中斷管理

管理中斷所使用的大部分寄存器都位于 NVIC(Nested Vectored Interrupt Controller,嵌套向量中斷控制器)和 SCB(System Control Block,系統(tǒng)控制塊)中。實(shí)際上,SCB 是作為 NVIC 的一部分來(lái)實(shí)現(xiàn)的,不過(guò)在 CMSIS-Core 中,將其定義在了獨(dú)立的結(jié)構(gòu)體中。除此之外,處理器內(nèi)核中還有用于中斷屏蔽寄存器:PRIMASK、FAULTMASK、BASEPRI。

NVIC 和 SCB 位于系統(tǒng)控制空間,地址從 0xE000E00 開(kāi)始,大小 4KB。SCB 中還有 SysTick 定時(shí)器,存儲(chǔ)器保護(hù)單元等。

優(yōu)先級(jí)

這部分暫且不說(shuō)!

中斷輸入和掛起

在 Cortex-M 內(nèi)核中,每個(gè)中斷都具有多個(gè)屬性:

  • 每個(gè)中斷都可以被禁止(默認(rèn))或者使能

  • 每個(gè)中斷都可以別掛起或者解除掛起

  • 每個(gè)中斷都可以處于活躍或者非活躍

這些狀態(tài)屬性具有多種可能的組合。例如,在處理中斷時(shí),可以將其禁止,若在中斷退出前產(chǎn)生了同一個(gè)中斷的新請(qǐng)求,由于該活躍中斷被禁止了,那就會(huì)處于掛起狀態(tài)。

NVIC 在設(shè)計(jì)上既支持產(chǎn)生 脈沖中斷請(qǐng)求 的外設(shè),也支持產(chǎn)生 高電平中斷請(qǐng)求 的外設(shè)。無(wú)需配置任何一個(gè) NVIC 寄存器以選擇其中一種中斷類(lèi)型。對(duì)于脈沖中斷請(qǐng)求,脈沖寬度至少要為一個(gè)時(shí)鐘周期;而對(duì)于電平觸發(fā)的請(qǐng)求,在 ISR 中的操作清除請(qǐng)求之前,請(qǐng)求服務(wù)的外設(shè)要一直保持電平信號(hào)(如寫(xiě)入寄存器以清除中斷請(qǐng)求) 。盡管外部中斷請(qǐng)求在 I/O 引腳上的電平可能是低電平有效,但是 NVIC 收到的請(qǐng)求信號(hào)為高有效!

中斷的掛起狀態(tài)被存儲(chǔ)在 NVIC 的可編程寄存器中,當(dāng) NVIC 的中斷輸入被確認(rèn)后,它就會(huì)引發(fā)該中斷的掛狀態(tài)。即便中斷請(qǐng)求被取消,掛起狀態(tài)仍會(huì)為高。這樣,NVIC 就可以處理脈沖中斷請(qǐng)求了。

掛起狀態(tài)的意思是,中斷被置于一種等待處理器處理的狀態(tài)。有些情況下,處理器在中斷掛起時(shí)就會(huì)進(jìn)行處理。不過(guò),若處理器已經(jīng)在處理另外一個(gè)更高或同優(yōu)先級(jí)的中斷,或者中斷被某個(gè)中斷屏蔽寄存器給屏蔽掉了,那么在其他的中斷處理結(jié)束前或者中斷屏蔽被清除前,掛起請(qǐng)求會(huì)一直保持。

在傳統(tǒng) ARM 處理器中,如果外設(shè)產(chǎn)生了中斷,那么它們得到處理前必須一直保持中斷請(qǐng)求信號(hào)。

當(dāng)中斷開(kāi)始處理中斷請(qǐng)求時(shí),中斷的請(qǐng)求信號(hào)會(huì)被自動(dòng)清除。當(dāng)中斷正在被處理時(shí),它就會(huì)處于活躍狀態(tài)。

5.png

當(dāng)中斷處于活躍狀態(tài)時(shí),處理器無(wú)法再中斷完成和異常返回前再次處理同一個(gè)中斷請(qǐng)求。

中斷的掛起狀態(tài)位于中斷掛起狀態(tài)寄存器中,軟件可以復(fù)位這些寄存器。因此,可以手動(dòng)清除或者設(shè)置中斷的掛起狀態(tài)。若中斷請(qǐng)求產(chǎn)生時(shí)處理器正在處理另一個(gè)具有更高優(yōu)先級(jí)的中斷,而在處理器對(duì)該中斷請(qǐng)求做出響應(yīng)之前,掛起狀態(tài)被清除掉了,則該中斷會(huì)被取消且不會(huì)再得到處理。

6.png

若持續(xù)保持某個(gè)中斷請(qǐng)求,那么及時(shí)軟件嘗試清除該掛起狀態(tài),掛起狀態(tài)還是會(huì)再次被置位的。

7.png

若中斷已經(jīng)得到了處理,中斷源仍然在繼續(xù)保持中斷請(qǐng)求,那么這個(gè)中斷就會(huì)再一次進(jìn)入掛起狀態(tài)且再次得到處理

8.png

對(duì)于脈沖中斷請(qǐng)求,若在處理器開(kāi)始處理前,中斷請(qǐng)求信號(hào)產(chǎn)生了多次,他們會(huì)被當(dāng)做一次中斷請(qǐng)求處理

9.png

中斷掛起狀態(tài)可以在其正在被處理時(shí)再次置位。之前的中斷請(qǐng)求正在被處理時(shí)產(chǎn)生了新的請(qǐng)求,這樣機(jī)會(huì)引發(fā)新的掛起狀態(tài)。處理器在前一個(gè) ISR 結(jié)束后需要再次處理這個(gè)中斷。

10.png

即使中斷被禁止了,他的掛起狀態(tài)仍然可置位。 這種情況下,若中斷稍后被使能了,它仍然可以被觸發(fā)并被得到處理。這種情況可能不是我們需要的,因此需要在使能 NVIC 中斷前手動(dòng)清除掛起狀態(tài)。

總結(jié)

NVIC 中對(duì)于每個(gè)中斷需要設(shè)置 搶占優(yōu)先級(jí) 和 響應(yīng)優(yōu)先級(jí)(又稱(chēng)子優(yōu)先級(jí))。多個(gè)中斷會(huì)先比較 搶占優(yōu)先級(jí),搶占優(yōu)先級(jí)相同的比較響應(yīng)優(yōu)先級(jí)。高搶占優(yōu)先級(jí)能夠打斷低搶占優(yōu)先級(jí)的,但是相同搶占優(yōu)先級(jí)的高響應(yīng)優(yōu)先級(jí)不能打斷低響應(yīng)優(yōu)先級(jí)。

  1. 高優(yōu)先級(jí)的搶占優(yōu)先級(jí)是可以打斷正在進(jìn)行的低搶占優(yōu)先級(jí)中斷的。

  2. 搶占優(yōu)先級(jí)相同的中斷,高響應(yīng)優(yōu)先級(jí)不可以打斷低響應(yīng)優(yōu)先級(jí)的中斷。

  3. 搶占優(yōu)先級(jí)相同的中斷,當(dāng)兩個(gè)中斷同時(shí)發(fā)生的情況下,哪個(gè)響應(yīng)優(yōu)先級(jí)高,哪個(gè)先執(zhí)行。

  4. 如果兩個(gè)中斷的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都是一樣的話,則看哪個(gè)中斷先發(fā)生就先執(zhí)行。

參考

  1. The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors, 3rd Edition

  2. The De?nitive Guide to the Cortex-M0

————————————————

版權(quán)聲明:本文為CSDN博主「ZC·Shou」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系小編進(jìn)行處理

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7953

    瀏覽量

    155091
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17984

    瀏覽量

    367006
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    905

    瀏覽量

    42808
  • Cortex-M
    +關(guān)注

    關(guān)注

    2

    文章

    231

    瀏覽量

    30387
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【技術(shù)分享】分解ARM Cortex-M系列優(yōu)先級(jí)設(shè)置問(wèn)題

    仍然是以我們最熟悉的Cortex-M系列為例,而M系列我就說(shuō)說(shuō)Freescale目前兩大當(dāng)家的——M0+和M4的優(yōu)先級(jí)設(shè)置問(wèn)題。我們知道AR
    發(fā)表于 01-19 14:22

    Cortex-M內(nèi)核來(lái)詳細(xì)講講中斷優(yōu)先級(jí)嵌套!

    應(yīng)用設(shè)計(jì)的,沒(méi)有獨(dú)立MCU。異常類(lèi)型??Cortex-M 處理器的異常中,編號(hào) 1~15 的為系統(tǒng)異常,16及以上的則為
    發(fā)表于 08-27 17:40

    淺析stm32的中斷嵌套優(yōu)先級(jí)

    stm32的中斷嵌套優(yōu)先級(jí)stm32NVIC優(yōu)先級(jí)分組中斷優(yōu)先級(jí)配置寄存器NVIC_IPRx描述
    發(fā)表于 08-13 09:45

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

    優(yōu)先級(jí)范圍從0x00~0xFF), 是絕大多數(shù)微控制器制造商只是使用其中的一部分優(yōu)先級(jí)NXP 1062 使用了其中的高4bits,所以中斷優(yōu)先級(jí)在0-15,共16個(gè)在
    發(fā)表于 12-16 07:08

    51單片機(jī)的中斷優(yōu)先級(jí)中斷嵌套的詳細(xì)資料概述

    基本型80C51系列單片機(jī)有5個(gè)中斷源,2個(gè)優(yōu)先級(jí),每個(gè)中斷源可通過(guò)軟件設(shè)置為高優(yōu)先級(jí)或低優(yōu)先級(jí)中斷
    發(fā)表于 09-03 17:28 ?5次下載
    51單片機(jī)的<b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b>和<b class='flag-5'>中斷</b><b class='flag-5'>嵌套</b>的詳細(xì)資料概述

    為什么51單片機(jī)的默認(rèn)中斷優(yōu)先級(jí)都是低級(jí)及中斷嵌套

    51單片機(jī)(80C51系列)有5個(gè)中斷源,2個(gè)優(yōu)先級(jí),可以實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套?,F(xiàn)在很多擴(kuò)展的51單片機(jī)已經(jīng)有4個(gè)
    發(fā)表于 07-23 17:37 ?1次下載
    為什么51單片機(jī)的默認(rèn)<b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b>都是低級(jí)及<b class='flag-5'>中斷</b><b class='flag-5'>嵌套</b>

    STM32單片機(jī)中搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的表達(dá)方式解析

    Cortex支行中斷嵌套, 允許高優(yōu)先級(jí)中斷搶占低優(yōu)先級(jí)
    發(fā)表于 10-14 16:31 ?1.2w次閱讀
    STM32單片機(jī)中搶占<b class='flag-5'>優(yōu)先級(jí)</b>和響應(yīng)<b class='flag-5'>優(yōu)先級(jí)</b>的表達(dá)方式解析

    msp430的中斷優(yōu)先級(jí)中斷嵌套(及容易理解錯(cuò)誤的說(shuō)明)

    msp430的中斷優(yōu)先級(jí)中斷嵌套 MSP430的中斷優(yōu)先級(jí)按所在的向量的大小排列,
    發(fā)表于 11-19 19:06 ?11次下載
    msp430的<b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b>和<b class='flag-5'>中斷</b><b class='flag-5'>嵌套</b>(及容易理解錯(cuò)誤的說(shuō)明)

    cortex M內(nèi)核優(yōu)先級(jí)設(shè)置

    Cortex M內(nèi)核中每個(gè)中斷都有一個(gè)8位的優(yōu)先級(jí)設(shè)置寄存器這個(gè)8位的寄存器可以分為搶占優(yōu)先級(jí)
    發(fā)表于 12-01 11:51 ?4次下載
    <b class='flag-5'>cortex</b> <b class='flag-5'>M</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>優(yōu)先級(jí)</b>設(shè)置

    Cortex-M及STM32中斷筆記

    6.Cortex-M系列中斷(1)Coretx-M內(nèi)核都具有NVCI(嵌套向量中斷控制器)①
    發(fā)表于 12-01 12:36 ?9次下載
    <b class='flag-5'>Cortex-M</b>及STM32<b class='flag-5'>中斷</b>筆記

    [IC]淺談嵌入式MCU軟件開(kāi)發(fā)之中斷優(yōu)先級(jí)中斷嵌套

    [IC]淺談嵌入式MCU軟件開(kāi)發(fā)之中斷優(yōu)先級(jí)中斷嵌套
    發(fā)表于 12-05 10:21 ?11次下載
    [IC]淺談嵌入式MCU軟件開(kāi)發(fā)之<b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b>與<b class='flag-5'>中斷</b><b class='flag-5'>嵌套</b>

    STM32筆記之中斷優(yōu)先級(jí)和開(kāi)關(guān)總中斷

    STM32中斷優(yōu)先級(jí)和開(kāi)關(guān)總中斷一,中斷優(yōu)先級(jí):STM32(Cortex-M3)中的
    發(fā)表于 01-14 15:24 ?13次下載
    STM32筆記之<b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b>和開(kāi)關(guān)總<b class='flag-5'>中斷</b>

    Cortex-M中斷及FreeRTOS中斷優(yōu)先級(jí)配置原理

    下面就來(lái)說(shuō)說(shuō)關(guān)于Cortex-M中斷,及FreeRTOS中斷優(yōu)先級(jí)配置原理。
    發(fā)表于 02-08 15:30 ?3次下載
    <b class='flag-5'>Cortex-M</b><b class='flag-5'>中斷</b>及FreeRTOS<b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b>配置原理

    Cortex-M0處理器內(nèi)核異常中斷簡(jiǎn)介

    CortexM0內(nèi)核上搭載了一個(gè)異常響應(yīng)系統(tǒng),支持眾多的系統(tǒng)
    的頭像 發(fā)表于 06-01 14:41 ?5648次閱讀

    Cortex-M內(nèi)核中斷/異常系統(tǒng)、中斷優(yōu)先級(jí)/嵌套詳解

    最近在使用 STM32F3 芯片的時(shí)候,遇到這樣一個(gè)問(wèn)題:如果外部中斷來(lái)的頻率足夠快,上一個(gè)中斷沒(méi)有處理完成,新來(lái)的中斷如何處理?
    的頭像 發(fā)表于 01-13 09:09 ?2789次閱讀