一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

詳解STM32的中斷系統(tǒng)

CHANBAEK ? 來源:明解嵌入式 ? 作者:Sharemaker001 ? 2023-04-19 11:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、前言

中斷是什么? 舉個例子來說,當我們正在工作時,突然電話響了,這時你會把手里的工作先停下來,然后去接電話,當接完電話后,電話里的人安排你馬上做一件事,這時你需要立刻去做這件事,當把這件事做完后你會繼續(xù)之前被打斷的工作,這個過程為一次中斷。

在計算機科學中,中斷指計算機CPU獲知某些事,暫停正在執(zhí)行的程序,轉而去執(zhí)行處理該事件的程序,當這段程序執(zhí)行完畢后再繼續(xù)執(zhí)行之前的程序。 整個過程稱為中斷處理,簡稱中斷,而引起這一過程的事件稱為中斷事件。 中斷是計算機實現(xiàn)并發(fā)執(zhí)行的關鍵,也是操作系統(tǒng)工作的根本。 中斷能提高CPU的效率,同時能對突發(fā)事件做出實時處理。 實現(xiàn)程序的并行化,實現(xiàn)嵌入式系統(tǒng)進程之間的切換。

后續(xù)將從以下圖1中所示的幾個方面對STM32的中斷系統(tǒng)進行基本的解析。

wKgaomQ_YSOABwQ5AADBdqJwqBs442.jpg

圖1 中斷系統(tǒng)學習框架

二、 基本原理概述

wKgZomQ_YSOAbTkOAAIjZ371gmg844.jpg

圖2 基本原理概述

1、中斷的作用

(1)速度匹配,提高機器系統(tǒng)效率。 系統(tǒng)中處理機的工作速度遠高于外圍設備的工作速度。 通過中斷可以協(xié)調(diào)它們之間的工作。 當外圍設備需要與處理機交換信息時,由外圍設備向處理機發(fā)出中斷請求,處理機及時響應并作相應處理。 不交換信息時,處理機和外圍設備處于各自獨立的并行工作狀態(tài)。

(2)分時操作,維持系統(tǒng)可靠正常工作。 現(xiàn)代計算機中,程序員不能直接干預和操縱機器,必須通過中斷系統(tǒng)向操作系統(tǒng)發(fā)出請求,由操作系統(tǒng)來實現(xiàn)人為干預。 主存儲器中往往有多道程序和各自的存儲空間。 在程序運行過程中,如出現(xiàn)越界訪問,有可能引起程序混亂或相互破壞信息。 為避免這類事件的發(fā)生,由存儲管理部件進行監(jiān)測,一旦發(fā)生越界訪問,向處理機發(fā)出中斷請求,處理機立即采取保護措施。

(3)實時響應,滿足實時處理要求。 在實時系統(tǒng)中,各種監(jiān)測和控制裝置隨機地向處理機發(fā)出中斷請求,處理機隨時響應并進行處理。

(4)提供故障現(xiàn)場處理手段,可靠性高。 處理機中設有各種故障檢測和錯誤診斷的部件,一旦發(fā)現(xiàn)故障或錯誤,立即發(fā)出中斷請求,進行故障現(xiàn)場記錄和隔離,為進一步處理提供必要的依據(jù)。

2、中斷和異常

ARM公司設計了如Cortex-M3或Cortex-M4內(nèi)核,這個內(nèi)核就包含了中斷系統(tǒng)框架,ST公司根據(jù)該內(nèi)核,因地制宜的設計了STM32系列產(chǎn)品。

CPU內(nèi)核中斷和核外外設中斷,其中內(nèi)核中斷,在官方手冊上,內(nèi)核中斷叫異常(exception)和核外外設中斷才叫中斷(interrupt),其實是一回事。

ARM Cortex M3內(nèi)核支持256個中斷,包括16個內(nèi)核中斷和240個外設中斷,擁有256個中斷優(yōu)先級別。

Cortex-M4內(nèi)核支持256個中斷,其中包含了16個內(nèi)核中斷和240個外部中斷,并且具有256級的可編程中斷設置。

STM32并沒有使用Cortex-M4內(nèi)核的全部東西,而是只用了它的一部分,中斷數(shù)量及中斷優(yōu)先級也進行裁剪用了一部分。

STM32的每個外設都可以產(chǎn)生中斷,如STM32F407系列一共有98個中斷,包括16個內(nèi)核中斷和82個可屏蔽中斷,具有16級可編程的中斷優(yōu)先級。

通常,把CPU內(nèi)部產(chǎn)生的緊急事件叫做異常。 異常通常是微處理器內(nèi)部發(fā)生的,大多是軟件引起的,比如比如非法指令(除零)、地址訪問越界、特權調(diào)用異常等待。 異常是指由于cpu本身故障、程序故障或者請求服務等引起的錯誤,異常屬于不正常現(xiàn)象。

把來自CPU外部的片上外設產(chǎn)生的緊急事件叫做中斷。 中斷是微處理器外部發(fā)送的,通過中斷通道送入處理器內(nèi)部,一般是硬件引起的,比如GPIO引腳電平變化、定時器溢出、串口接收中斷等。 中斷是指系統(tǒng)停止當前正在運行的程序轉而其他服務,可能是程序接收了比自身高優(yōu)先級的請求,或者是人為設置中斷,中斷是屬于正?,F(xiàn)象。

不管是中斷還是異常,異常與中斷都是硬件支持的,微處理器通常都有相應的中斷/異常服務程序,異常和中斷的效果基本一致,都是暫停當前任務,優(yōu)先執(zhí)行緊急事件。

wKgZomQ_YSOAYxhdAAJJXwE3z-Y717.jpg

圖3 異常和中斷編號表

所有的異常和中斷用一個表管理起來,編號為0~15 的稱為內(nèi)核異常(需要說明的是,16個編號的內(nèi)核中斷,但是STM32本身的內(nèi)核中斷是11個,還有5個是保留的沒用的),而 16 以上的則稱為核外(外部)中斷(相對內(nèi)核而言,對于不同系列的STM32,大致的編號和數(shù)量相同,但是對于高級的,因為片上外設要多一些,所以中斷的數(shù)量也會多一些), 這個表就稱為中斷向量表。 這個中斷向量表,這個中斷向量表,本質(zhì)上可以理解成一個4個字節(jié)類型Int的數(shù)組,每一個元素就是放的是對應編號的中,外部中斷是我們必須學習掌握的知識,包含線中斷,定時器中斷,I2C,SPI等所有的外設中斷,可配置優(yōu)先級。

Reset( 復位)、NMI( Non Maskable Interrupt,不可屏蔽中斷)、HardFault( 硬件異常)的優(yōu)先級是固定的,且優(yōu)先級是負數(shù),也就是最高的(優(yōu)先級數(shù)字越小,優(yōu)先級越高)。 剩下的異?;蛑袛啵际强梢酝ㄟ^修改NVIC的寄存器調(diào)整優(yōu)先級( 但不能設置為負數(shù))。 NVIC作為在內(nèi)核里的外設,也是通過存儲器映射的方式訪問。

3、NVIC中斷控制器

有如此多的中斷信號, CPU如何去控制它呢? 內(nèi)核有一個專門管理中斷的外設NVIC(嵌套向量中斷控制器),可以實現(xiàn)低延遲的中斷處理和晚到中斷的高效處理,通過優(yōu)先級控制中斷的嵌套和調(diào)度來管理; NVIC是一個總的中斷控制器,無論是來在內(nèi)核的異常還是外設的外部中斷, 都由NVIC統(tǒng)一進行管理。 NVIC收到外設的中斷請求,會將其中斷請求發(fā)送給內(nèi)核,內(nèi)核收到NVIC的中斷通知之后,就會去判斷此時哪個中斷發(fā)生,然后查找FLASH中斷向量表去獲取相應的中斷處理函數(shù)。

它具有以下特征:

(1)支持嵌套和向量中斷;

(2)自動保存和恢復處理器狀態(tài);

(3)動態(tài)改變優(yōu)先級;

(4)簡化的和確定的中斷時間。

帶來的優(yōu)勢:

(1)響應速度提高;

(2)標準化,統(tǒng)一管理。

wKgaomQ_YSOAdmZlAAHFqvfWpL0403.jpg

圖4 NVIC在芯片上的位置

4、中斷的分類

中斷按事件來源分類,可以分為外部中斷和內(nèi)部中斷。 中斷事件來自于內(nèi)核外部的被稱為外部中斷,來自于內(nèi)核內(nèi)部的則為內(nèi)部中斷。

進一步細分,外部中斷還可分為可屏蔽中斷(maskable interrupt)和不可屏蔽中斷(non-maskable interrupt)兩種,而內(nèi)部中斷按事件是否正常來劃分可分為軟中斷和異常兩種。

外部中斷的中斷事件來源于內(nèi)核外部,必然是某個硬件產(chǎn)生的,所以外部中斷又被稱為硬件中斷(hardware interrupt)。 計算機的外部設備,如網(wǎng)卡、聲卡、顯卡等都能產(chǎn)生中斷。 外部設備的中斷信號是通過兩根信號線通知CPU的,一根是IRQ,另一根是NMI。 CPU從IRQ收到的中斷信號都是不影響系統(tǒng)運行的,CPU可以選擇屏蔽(通過設置中斷屏蔽寄存器中的IF位),而從NMI中收到的中斷信號則是影響系統(tǒng)運行的嚴重錯誤,不可屏蔽,因為屏蔽的意義不大,系統(tǒng)已經(jīng)無法運行。

內(nèi)部中斷來自于內(nèi)核內(nèi)部,其中軟中斷是由軟件主動發(fā)起的中斷,常被用于系統(tǒng)調(diào)用(system call),任務切換(PendSV)等; 而異常則是指令執(zhí)行期間CPU內(nèi)部產(chǎn)生的錯誤引起的。 異常也和不可屏蔽中斷區(qū)別在于不可屏蔽中斷發(fā)生的事件會導致處理器無法運行(如斷電、電源故障等),而異常則是影響系統(tǒng)正常運行的中斷(如除0、越界訪問等)。

三、 中斷管理機制

wKgaomQ_YSOAXwwUAAJMXW--DwI458.jpg

圖5 中斷管理機制要素

1、中斷向量

由于CPU隨時都可能檢測到中斷信息,也就是說,CPU 隨時都可能執(zhí)行中斷處理程序,所以中斷處理程序必須一直存儲在內(nèi)存某段空間之中。 中斷處理程序在內(nèi)存中的入口地址稱為中斷向量; 而要確定中斷處理程序的入口地址,處理器利用了一種向量表機制:即中斷向量,必須存儲在對應的中斷向量表表項中。 采用向量表處理中斷,處理器會從存儲器的向量表中,自動定位中斷的程序入口。 從發(fā)生中斷到中斷的處理中間的時間被縮減。

STM32的內(nèi)部閃存地址起始于0x8000000,一般情況下,程序文件就從此地址開始寫入。 此外STM32其內(nèi)部通過“中斷向量表”來響應中斷,程序啟動后,將首先從“中斷向量表”取出復位中斷向量執(zhí)行復位中斷程序完成啟動。 而這張“中斷向量表”的起始地址是0x8000004,當中斷來臨,STM32的內(nèi)部硬件機制亦會自動將PC指針定位到“中斷向量表”處,并根據(jù)中斷源取出對應的中斷向量執(zhí)行中斷服務程序。

wKgZomQ_YSOAVL7JAAL8Hxf5GCg924.jpg

圖6 中斷向量執(zhí)行

(1)STM32復位后,會從地址為0x8000004處取出復位中斷向量的地址,并跳轉執(zhí)行復位中斷服務程序,如圖6中標號①所示。
(2)復位中斷服務程序執(zhí)行的最終結果是跳轉至C程序的main函數(shù),如圖6中標號②所示,而main函數(shù)應該是一個死循環(huán),是一個永不返回的函數(shù)。
(3)在main函數(shù)執(zhí)行的過程中,發(fā)生了一個中斷請求,此時STM32的硬件機制會將PC指針強制指回中斷向量表處,如圖6中標號③所示。
(4)根據(jù)中斷源進入相應的中斷服務程序,如圖6中標號④所示。
(5)中斷服務程序執(zhí)行完畢后,程序再度返回至main函數(shù)中執(zhí)行,如圖6中標號⑤所示。

2、中斷優(yōu)先級

中斷優(yōu)先級通過優(yōu)先級配置寄存器進行配置,本寄存器寬度為8位,原則上每個中斷可配置編程的優(yōu)先級為0~255,實際上可編程優(yōu)先級的實際數(shù)量由芯片設計商決定,多數(shù)Cortex-M3或Cortex-M4芯片支持的優(yōu)先級較少,這是因為大量的優(yōu)先級會增加NVIC的復雜度,而且會增加功耗降低速度,多數(shù)情況下,應用程序只需要少量的編程優(yōu)先級,因此芯片廠商需要基于目標應用的優(yōu)先級數(shù)量設計處理器優(yōu)先級,優(yōu)先級的減少是通過去除優(yōu)先級配置寄存器的低位實現(xiàn),STM32只用到了中斷優(yōu)先級寄存器的的高4位。如圖,使用到了bit7到bit4,最多可以配置0~16個中斷優(yōu)先級:

wKgaomQ_YSOASJAPAAByDcUi4pc056.jpg

圖7 4位優(yōu)先級寄存器

這個4 位數(shù)字的位數(shù)分可以配成搶占優(yōu)先級部分和響應優(yōu)先級部分,因此可以有5組配置選擇:

wKgZomQ_YSOAXHjBAAJOVoFGABs786.jpg

圖8 中斷優(yōu)先級描述

優(yōu)先級數(shù)值越小,優(yōu)先級越高。
搶占優(yōu)先級,是指打斷其他中斷的屬性,即因為具有這個屬性會出現(xiàn)嵌套中斷,搶占優(yōu)先級的概念等同于單片機中的常規(guī)中斷。 假設有兩中斷先后觸發(fā),已經(jīng)在執(zhí)行的中斷搶占優(yōu)先級如果沒有后觸發(fā)的中斷搶占優(yōu)先級更高,就會先處理搶占優(yōu)先級高的中斷。 也就是說有較高的搶占優(yōu)先級的中斷可以打斷搶占優(yōu)先級較低的中斷。

響應優(yōu)先級也叫做亞優(yōu)先級或者子優(yōu)先級, 響應屬性則應用在搶占屬性相同的情況下,當兩個中斷向量的搶占優(yōu)先級相同時,如果兩個中斷同時到達,則先處理響應優(yōu)先級高的中斷。

回到優(yōu)先級上來。 具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中斷處理過程中被響應,即中斷嵌套,或者說高搶占式優(yōu)先級的中斷可以嵌套在低搶占式優(yōu)先級的中斷中。 當兩個中斷源的搶占式優(yōu)先級相同時,這兩個中斷將沒有嵌套關系,當一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才能被處理。 如果這兩個中斷同時到達,則中斷控制器根據(jù)他們的響應優(yōu)先級高低來決定先處理哪一個; 如果他們的搶占式優(yōu)先級和響應優(yōu)先級都相等,則根據(jù)他們在中斷向量表中的排位順序決定先處理哪一個,中斷向量表排在前面的中斷優(yōu)先級高。

看了上面的介紹后,相信大家都明白了這里面的關系了,總結下就是:搶占式優(yōu)先級>響應優(yōu)先級>中斷表中的排位順序。

3、中斷嵌套

中斷嵌套是指中斷系統(tǒng)正在執(zhí)行一個中斷服務時,有另一個優(yōu)先級更高的中斷提出中斷請求,這時會暫時終止當前正在執(zhí)行的級別較低的中斷源的服務程序,去處理級別更高的中斷源,待處理完畢,再返回到被中斷了的中斷服務程序繼續(xù)執(zhí)行的過程。

在STM32中,只有搶占優(yōu)先級才決定了中斷嵌套。

如下圖所示,搶占優(yōu)先級高的任務出現(xiàn)后,會打斷搶占優(yōu)先級低的任務,即所謂的中斷嵌套。 例如:

wKgZomQ_YSOAPlNkAAEdOmXAnE0950.jpg

圖9 中斷嵌套示意圖

搶占優(yōu)先級為N的中斷任務正在運行,此時,搶占優(yōu)先級為2的中斷產(chǎn)生,則MCU會將搶占優(yōu)先級為N的任務暫時停止,先響應執(zhí)行中斷優(yōu)先級為2的任務,待該任務完成后,再來完成搶占優(yōu)先級為N的任務。

若是搶占優(yōu)先級為2的中斷正在運行,又有新的搶占優(yōu)先級為2的中斷產(chǎn)生,則新產(chǎn)生的中斷會等待當前中斷任務完成后,再執(zhí)行新產(chǎn)生的中斷。

若是搶占優(yōu)先級相同的任務同時產(chǎn)生,則響應優(yōu)先級高的中斷先執(zhí)行。 若是搶占優(yōu)先級,響應優(yōu)先級均相同的中斷同時產(chǎn)生,則根據(jù)該中斷在中斷向量表的順序來執(zhí)行中斷任務。

四、 中斷處理流程

wKgaomQ_YSKAK1v0AAExdU1VoqM109.jpg

圖10 中斷處理流程

下圖為中斷處理流程示意圖,可以概括性的將處理流程分為:進入中斷、中斷處理和退出中斷。

wKgZomQ_YSOAaZkhAAJCLpQ1hvo194.jpg

圖11 中斷處理示意

進入中斷:

(1)中斷源發(fā)出請求,硬件判斷處理器是否允許中斷及該中斷是否被屏蔽,若允許中斷則當前運行的程序被打斷;

(2)處理器將各寄存器的內(nèi)容壓入堆棧保存,主要是PC, xPSR, R0-R3, R12, LR寄存器;

(3)根據(jù)中斷向量號,到中斷向量表中找到中斷服務程序的入口地址跳轉執(zhí)行。

中斷處理:

(1)執(zhí)行中斷服務程序;

(2)遵循中斷優(yōu)先級和中斷嵌套的執(zhí)行規(guī)則。

退出中斷:

(1)將保存在堆棧中的現(xiàn)場信息彈出到原來的寄存器中;

(2)返回被原先被中斷的程序處繼續(xù)執(zhí)行。

五、總結

本篇主要是針對STM32的中斷系統(tǒng),目前從基本原理,中斷管理機制,中斷處理流程這幾個方面對中斷的基本特性和概念進行了較為詳細的概述,目的是為了在以后STM32的中斷使用中對中斷的理解有較好的幫助,也可以看出NVIC在STM32中起到的作用。 在下一篇將繼續(xù)介紹中斷系統(tǒng)基礎知識之寄存器功能原理。

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

    關注

    134

    文章

    9353

    瀏覽量

    377739
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11082

    瀏覽量

    217164
  • 計算機
    +關注

    關注

    19

    文章

    7665

    瀏覽量

    90839
  • STM32
    +關注

    關注

    2293

    文章

    11032

    瀏覽量

    365175
  • 中斷系統(tǒng)

    關注

    1

    文章

    96

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STM32中斷系統(tǒng)詳解 - 第1節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬
    發(fā)布于 :2023年09月01日 16:20:34

    STM32中斷系統(tǒng)詳解 - 第2節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬
    發(fā)布于 :2023年09月01日 16:21:24

    STM32中斷系統(tǒng)詳解 - 第3節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬
    發(fā)布于 :2023年09月01日 16:22:14

    STM32中斷系統(tǒng)詳解 - 第4節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬
    發(fā)布于 :2023年09月01日 16:23:05

    STM32中斷系統(tǒng)詳解 - 第5節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬
    發(fā)布于 :2023年09月01日 16:23:55

    STM32中斷系統(tǒng)詳解 - 第6節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬
    發(fā)布于 :2023年09月01日 16:24:45

    STM32中斷系統(tǒng)詳解 - 第7節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬
    發(fā)布于 :2023年09月01日 16:25:35

    STM32中斷系統(tǒng)詳解 - 第8節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬
    發(fā)布于 :2023年09月01日 16:26:25

    STM32中斷系統(tǒng)詳解 - 第9節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬
    發(fā)布于 :2023年09月01日 16:27:16

    STM32中斷系統(tǒng)詳解 - 第10節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬
    發(fā)布于 :2023年09月01日 16:28:06

    STM32中斷過程詳解

    對于 STM32 講(還是以Timer2例),外部中斷通道位置 28(35 號優(yōu)先級)是給外部設備 TIME2 的,但 TIME2本身能夠引起中斷中斷源或事件有好多個,比如更新事件(
    發(fā)表于 06-01 09:48 ?2w次閱讀

    STM32系統(tǒng)時鐘RCC詳解

    STM32系統(tǒng)時鐘RCC詳解(超詳細,超全面) 原創(chuàng)
    發(fā)表于 11-30 12:21 ?14次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>系統(tǒng)</b>時鐘RCC<b class='flag-5'>詳解</b>

    STM32(六)-------中斷(外部中斷

    STM32中斷應用中斷知識介紹STM32 中斷應用概覽異常NVIC優(yōu)先級定義中斷知識介紹
    發(fā)表于 12-04 17:21 ?9次下載
    <b class='flag-5'>STM32</b>(六)-------<b class='flag-5'>中斷</b>(外部<b class='flag-5'>中斷</b>)

    STM32學習筆記--中斷系統(tǒng)

    目錄:一、STM32中斷系統(tǒng)二、NVIC中斷管理三、中斷配置相關函數(shù)一、STM32
    發(fā)表于 12-04 18:36 ?4次下載
    <b class='flag-5'>STM32</b>學習筆記--<b class='flag-5'>中斷</b><b class='flag-5'>系統(tǒng)</b>

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

    Cortex-M 內(nèi)核中斷/異常系統(tǒng)、中斷優(yōu)先級/嵌套 詳解
    的頭像 發(fā)表于 09-27 15:29 ?3173次閱讀
    Cortex-M 內(nèi)核<b class='flag-5'>中斷</b>/異常<b class='flag-5'>系統(tǒng)</b>、<b class='flag-5'>中斷</b>優(yōu)先級/嵌套 <b class='flag-5'>詳解</b>