在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

STM32的中斷使用介紹

科技綠洲 ? 來源:明解嵌入式 ? 作者:明解嵌入式 ? 2023-06-22 09:19 ? 次閱讀

一、前言

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

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

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

圖片

圖1 中斷系統學習框架

二、 基本原理概述

圖片

圖2 基本原理概述

1、中斷的作用

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

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

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

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

2、中斷和異常

ARM公司設計了如Cortex-M3或Cortex-M4內核,這個內核就包含了中斷系統框架,ST公司根據該內核,因地制宜的設計了STM32系列產品

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

ARM Cortex M3內核支持256個中斷,包括16個內核中斷和240個外設中斷,擁有256個中斷優先級別。

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

◆STM32并沒有使用Cortex-M4內核的全部東西,而是只用了它的一部分,中斷數量及中斷優先級也進行裁剪用了一部分。

◆STM32的每個外設都可以產生中斷,如STM32F407系列一共有98個中斷,包括16個內核中斷和82個可屏蔽中斷,具有16級可編程的中斷優先級。

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

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

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

圖片

圖3 異常和中斷編號表

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

Reset( 復位)、NMI( Non Maskable Interrupt,不可屏蔽中斷)、HardFault( 硬件異常)的優先級是固定的,且優先級是負數,也就是最高的(優先級數字越小,優先級越高)。剩下的異常或中斷,都是可以通過修改NVIC的寄存器調整優先級( 但不能設置為負數)。NVIC作為在內核里的外設,也是通過存儲器映射的方式訪問。

3、NVIC中斷控制器

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

它具有以下特征:

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

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

(3)動態改變優先級;

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

帶來的優勢:

(1)響應速度提高;

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

圖片

圖4 NVIC在芯片上的位置

4、中斷的分類

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

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

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

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

三、 中斷管理機制

圖片

圖5 中斷管理機制要素

1、中斷向量

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

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

圖片

圖6 中斷向量執行

(1)STM32復位后,會從地址為0x8000004處取出復位中斷向量的地址,并跳轉執行復位中斷服務程序,如圖6中標號①所示。

(2)復位中斷服務程序執行的最終結果是跳轉至C程序的main函數,如圖6中標號②所示,而main函數應該是一個死循環,是一個永不返回的函數。

(3)在main函數執行的過程中,發生了一個中斷請求,此時STM32的硬件機制會將PC指針強制指回中斷向量表處,如圖6中標號③所示。

(4)根據中斷源進入相應的中斷服務程序,如圖6中標號④所示。

(5)中斷服務程序執行完畢后,程序再度返回至main函數中執行,如圖6中標號⑤所示。

2、中斷優先級

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

圖片

圖7 4位優先級寄存器

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

圖片

圖8 中斷優先級描述

優先級數值越小,優先級越高。

搶占優先級,是指打斷其他中斷的屬性,即因為具有這個屬性會出現嵌套中斷,搶占優先級的概念等同于單片機中的常規中斷。假設有兩中斷先后觸發,已經在執行的中斷搶占優先級如果沒有后觸發的中斷搶占優先級更高,就會先處理搶占優先級高的中斷。也就是說有較高的搶占優先級的中斷可以打斷搶占優先級較低的中斷。

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

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

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

3、中斷嵌套

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

在STM32中,只有搶占優先級才決定了中斷嵌套。

如下圖所示,搶占優先級高的任務出現后,會打斷搶占優先級低的任務,即所謂的中斷嵌套。例如:

圖片

圖9 中斷嵌套示意圖

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

若是搶占優先級為2的中斷正在運行,又有新的搶占優先級為2的中斷產生,則新產生的中斷會等待當前中斷任務完成后,再執行新產生的中斷。

若是搶占優先級相同的任務同時產生,則響應優先級高的中斷先執行。若是搶占優先級,響應優先級均相同的中斷同時產生,則根據該中斷在中斷向量表的順序來執行中斷任務。

四、 中斷處理流程

圖片

圖10 中斷處理流程

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

圖片

圖11 中斷處理示意

進入中斷:

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

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

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

中斷處理:

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

(2)遵循中斷優先級和中斷嵌套的執行規則。

退出中斷:

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

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

五、總結

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

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

    關注

    68

    文章

    10911

    瀏覽量

    213147
  • 計算機
    +關注

    關注

    19

    文章

    7549

    瀏覽量

    88735
  • STM32
    +關注

    關注

    2273

    文章

    10926

    瀏覽量

    357784
收藏 人收藏

    評論

    相關推薦

    STM32 GPIO的外部中斷設計

    輸入引腳,還可以通過另外一種叫做外部中斷的方式來對引腳的輸入信號進行檢測,本篇首先介紹下EXTI的結構,接著介紹外部中斷的相關概念,對STM32
    發表于 04-14 10:51 ?2231次閱讀
    <b class='flag-5'>STM32</b> GPIO的外部<b class='flag-5'>中斷</b>設計

    利用STM32的USART1實現數據的收/發

    (USART_SR)數據寄存器(USART_DR)串口設置流程1、串口時鐘使能,GPIO使能2、串口復位3、GPIO端口模式設置4、串口參數初始化5、使能串口串口數據的接收與發送stm32 中斷介紹代碼uart.c
    發表于 08-16 06:55

    主要講解STM32的外部中斷以及使用STM32CubeMX編寫中斷程序

    STM32CubeMX教程(二)2021.10.27簡介本次主要講解STM32的外部中斷以及使用STM32CubeMX編寫中斷程序,實現按鍵
    發表于 01-13 08:21

    關于STM32中斷介紹

    中斷STM32里最重要的一環,可以說,如果學不會中斷,你后期寫的操作系統就是個廢物,因為有的異常你根本無法處理,既然中斷這么重要,那我們就先學習一下關于
    發表于 01-19 06:30

    中斷是什么?STM32中斷系統介紹中斷配置步驟資料免費下載

    本文檔的主要內容詳細介紹的是中斷是什么?STM32中斷系統介紹中斷配置步驟資料免費下載。
    發表于 10-11 08:00 ?5次下載
    <b class='flag-5'>中斷</b>是什么?<b class='flag-5'>STM32</b><b class='flag-5'>中斷</b>系統<b class='flag-5'>介紹</b>和<b class='flag-5'>中斷</b>配置步驟資料免費下載

    stm32中斷與外部中斷

    stm32中斷系統對于中斷的基本概念這里就不介紹了,當時學51的時候,看過一篇前輩的博客,講的不錯,暫時找不到了,找到了補上。STM32F
    發表于 11-22 13:06 ?26次下載
    <b class='flag-5'>stm32</b>之<b class='flag-5'>中斷</b>與外部<b class='flag-5'>中斷</b>

    STM32中斷編程步驟

    介紹stm32f10x中斷的概念,已經中斷向量表,還有中斷編程的一下要點,涉及的一下寄存器
    發表于 11-23 17:51 ?30次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>中斷</b>編程步驟

    STM32公用中斷源時的中斷分配

    STM32l0xx為例多外部中斷共用中斷源時,要通過判斷中斷請求狀態來分配中斷stm32l0x
    發表于 11-24 16:51 ?4次下載
    <b class='flag-5'>STM32</b>公用<b class='flag-5'>中斷</b>源時的<b class='flag-5'>中斷</b>分配

    STM32外部中斷實驗-EXTI

    STM32 外部中斷簡介STM32 的每個 IO 都可以作為外部中斷中斷輸入口,這點也是 STM32
    發表于 11-29 16:06 ?9次下載
    <b class='flag-5'>STM32</b>外部<b class='flag-5'>中斷</b>實驗-EXTI

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

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

    STM32中斷原理

    目錄一、中斷介紹1.1 什么是中斷1.2 中斷的作用1.3 中斷的約束二、STM32CubeMX
    發表于 12-24 19:11 ?17次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>中斷</b>原理

    STM32串口收/發程序--庫函數編程

    (USART_SR)數據寄存器(USART_DR)串口設置流程1、串口時鐘使能,GPIO使能2、串口復位3、GPIO端口模式設置4、串口參數初始化5、使能串口串口數據的接收與發送stm32 中斷介紹代碼uart.c
    發表于 12-28 19:07 ?5次下載
    <b class='flag-5'>STM32</b>串口收/發程序--庫函數編程

    STM32串口中斷應用實例

    本文將介紹如何使用STM32F4的串口接收中斷,通過串口助手模擬上位機發送指令、STM32F4串口中斷接收到指令后根據指令選擇開關LED小燈
    的頭像 發表于 04-20 11:45 ?2451次閱讀
    <b class='flag-5'>STM32</b>串口<b class='flag-5'>中斷</b>應用實例

    STM32如何配置外部中斷STM32外部中斷配置步驟

    STM32如何配置外部中斷STM32外部中斷配置步驟? 作為一款現代化的微控制器,STM32系列芯片在各種應用場合中廣泛應用。其中最常見的
    的頭像 發表于 10-26 17:47 ?3877次閱讀

    stm32中斷怎么處理的

    STM32是一款非常強大的微控制器系列,具有豐富的外設和功能。中斷STM32中非常重要的部分,能夠幫助我們提高系統的響應速度和效率。本文將詳細介紹
    的頭像 發表于 01-02 17:35 ?2728次閱讀
    主站蜘蛛池模板: 在线观看886影院成人影院 | 农村苗族一级特黄a大片 | 成年人看的毛片 | 亚洲免费视频播放 | 六月丁香深爱六月综合激情 | 天天干夜夜夜 | 亚洲伦理中文字幕一区 | 四虎影院免费网址 | aaaaaaa欧美黄色大片 | 亚欧色视频在线观看免费 | 乱码精品一区二区三区 | 天天操天天干天天拍 | 成年大片免费播放视频人 | 三级完整在线观看高清视频 | 成人综合在线视频 | 亚洲欧美v视色一区二区 | 午夜黄色 | 欧美一级特黄aaa大片 | 护士巨好爽好大乳 | 高清色本在线www | 久久福利免费视频 | 亚洲伊人网站 | 三级黄色在线视频中文 | 在线观看免费视频国产 | 欧美一区二区三区四区在线观看 | 午夜精品网 | 欧美18性欧美丶黑吊 | 日韩加勒比在线 | 久久久综合久久 | 在线观看一级片 | 国产天美| 特黄特色三级在线观看 | 91久久福利国产成人精品 | 色先锋av资源中文字幕 | 久久色婷婷 | 天天干天天操天天插 | 天天射日日射 | 国产伦精品一区二区三区免费 | 欧美黑人性xxx猛交 欧美黑人性受xxxx精品 | 中文字幕第11页 | 欧美成人猛男性色生活 |