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

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

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

中斷的基本概念及應(yīng)用

832065824 ? 來源:CSDN技術(shù)社區(qū) ? 2023-01-12 10:21 ? 次閱讀

1. 概述

中斷是指MCU在運(yùn)行過程中,出現(xiàn)某些意外情況需處理時(shí),MCU能自動(dòng)停止正在運(yùn)行的程序并轉(zhuǎn)入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續(xù)運(yùn)行。中斷提供了應(yīng)用程序與現(xiàn)實(shí)世界中發(fā)生的事情之間的接口。例如,我們可以使用中斷來捕獲觸發(fā)的按鈕、看門狗喂狗操作或計(jì)算發(fā)生的時(shí)間等。

當(dāng)中斷發(fā)生時(shí),處理器通常查看內(nèi)存中的一個(gè)預(yù)先定義好的位置,稱為中斷向量。向量通常包含相關(guān)中斷處理程序的地址,而包含應(yīng)用程序中所有向量的內(nèi)存塊稱為中斷向量表。

2. 基本概念

2.1 中斷的分類

中斷可按優(yōu)先級(jí)劃分為單級(jí)中斷與多級(jí)中斷,也可按OS是否參與處理將中斷分為一類與二類中斷:

b5502da4-82ac-11ed-bfe3-dac502259ad0.png

2.1.1 單級(jí)與多級(jí)中斷

單級(jí):即所有的中斷處于同一優(yōu)先級(jí),這也就意味著當(dāng)一個(gè)中斷正在執(zhí)行時(shí),其他中斷必須排隊(duì)等待直到當(dāng)前中斷處理完成。

多級(jí):類似于Task中斷也區(qū)分不同的優(yōu)先級(jí),低優(yōu)先級(jí)的中斷可以被高優(yōu)先級(jí)的中斷搶占。

2.1.2 一類與二類中斷

一類中斷:不與OS進(jìn)行交互,是優(yōu)先級(jí)最高的中斷,需要用戶正確的配置硬件、編寫處理程序并從中斷中返回,用不好的話出錯(cuò)概率高,一般應(yīng)用較少。

二類中斷:一般項(xiàng)目中使用的都是此類中斷,中斷發(fā)生時(shí),RTA-OS執(zhí)行內(nèi)部代碼,然后調(diào)用用戶提供的ISR。中斷執(zhí)行從ISR的指定入口點(diǎn)開始,一直持續(xù)到入口函數(shù)返回。

b57a184e-82ac-11ed-bfe3-dac502259ad0.png

2.2 中斷優(yōu)先級(jí)

在中斷的一般應(yīng)用中,中斷以多級(jí)中斷應(yīng)用為主,按中斷優(yōu)先級(jí)(IPL-Interrupt Priority Level)執(zhí)行,RTA-OS對(duì)IPL進(jìn)行了標(biāo)準(zhǔn)化,其中IPL 0表示用戶級(jí)別,其中所有任務(wù)都執(zhí)行,IPL為1或更多表示中斷級(jí)別。

在單級(jí)平臺(tái)上有兩個(gè)IPL,0和1。IPL 0表示目標(biāo)不被中斷,任務(wù)按優(yōu)先級(jí)順序運(yùn)行。IPL 1表示目標(biāo)正在為中斷提供服務(wù)。由于只有一個(gè)非零IPL,所有中斷(類別1和類別2)都以相同的優(yōu)先級(jí)運(yùn)行。這意味著所有中斷都是序列化的,如下圖(a)。

在多級(jí)平臺(tái)上,高優(yōu)先級(jí)中斷可以搶占低優(yōu)先級(jí)中斷,因此ISRs處理程序可以嵌套,但I(xiàn)SR不能被低優(yōu)先級(jí)任務(wù)搶占,如下圖(b)。

b5a0c660-82ac-11ed-bfe3-dac502259ad0.png

根據(jù)優(yōu)先級(jí)順序,一類中斷優(yōu)先級(jí)更高,其不能被二類中斷搶占,所有的2類中斷都比最低級(jí)的一類中斷低。

也可進(jìn)一步對(duì)中斷的優(yōu)先級(jí)按Task及OS級(jí)別繼續(xù)劃分為User Level和OS Level,此兩種中斷劃分也是宏觀級(jí)別的劃分,具體如下:

2.2.1 User Level

所謂User level,即是用戶可以控制的級(jí)別,即Task級(jí)別,用戶級(jí)別是允許處理所有中斷的最低中斷優(yōu)先級(jí)。所有任務(wù)都從其入口點(diǎn)開始在用戶級(jí)別執(zhí)行。

任務(wù)有時(shí)需要在用戶級(jí)別以上運(yùn)行,例如,它可能需要訪問與ISR共享的數(shù)據(jù)。當(dāng)數(shù)據(jù)被訪問時(shí),必須防止中斷被調(diào)用。實(shí)現(xiàn)這一點(diǎn)的最簡單方法是,可以在任務(wù)在訪問數(shù)據(jù)時(shí)禁用中斷。另一種方法是使用Resource機(jī)制,即當(dāng)Task或2類中斷已經(jīng)獲得資源后,其他任務(wù)或ISR無法獲得該資源,防止任何其他任務(wù)或ISR同時(shí)進(jìn)入同一關(guān)鍵部分,如修改同一處變量導(dǎo)致程序出錯(cuò)。

2.2.2 OS Level

由于二類中斷是需要OS參與,這樣2類ISR的最高優(yōu)先級(jí)定義了OS級(jí)別。如果執(zhí)行發(fā)生在OS級(jí)別或更高級(jí)別(一類中斷),則不會(huì)發(fā)生其他類別2中斷。RTA-OS使用OS Level來防止并發(fā)訪問內(nèi)部操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)。

3. 中斷的應(yīng)用

3.1 中斷常用API

對(duì)于RTA-OS,在StartOS()后默認(rèn)所有中斷都打開,實(shí)際使用中,一般常用API為使能或禁用中斷,掛起、恢復(fù)中斷,可以調(diào)用如下API來啟用或禁用中斷:

DisableAllInterrupts():禁用所有中斷

EnableAllInterrupts():使能所有中斷

SuspendAllInterrupts() :掛起所有中斷

ResumeAllInterrupts():恢復(fù)所有中斷

SuspendOSInterrupts() :掛起OS級(jí)別中斷

ResumeOSInterrupts():恢復(fù)OS級(jí)別中斷

以上API在實(shí)際使用中,需注意:

1) DisableAllInterrupts() and EnableAllInterrupts()在硬件層面啟用或禁用中斷,這兩個(gè)API不能嵌套;

在DisableAllInterrupts()后必須再調(diào)用EnableAllInterrupts();

2) SuspendAllInterrupts() and ResumeAllInterrupts(),掛起及恢復(fù)所有中斷,可以被嵌套;

3) SuspendOSInterrupts() and ResumeOSInterrupts(),可以嵌套使用;

4)Suspend與Resume需要成對(duì)出現(xiàn),Resume不要比Suspend多;

5) 一類中斷在關(guān)閉期間,不可以調(diào)用OS的API;

6) 如果2類ISR將中斷級(jí)別提高到OS級(jí)別以上,并調(diào)用DisableAllInterrupts( ),則它可能不會(huì)進(jìn)行任何其他RTA-OS API調(diào)用,但用于恢復(fù)中斷優(yōu)先級(jí)的EnableAllInterrupts( )調(diào)用除外。執(zhí)行ISR時(shí),不允許將中斷優(yōu)先級(jí)降低到初始級(jí)別以下。

3.2 一/二類中斷的處理

3.2.1一類中斷的處理

用戶必須確保一類ISR輸入功能的名稱與用戶在配置期間為ISR指定的名稱相同。

對(duì)于一類ISR,在定義輸入函數(shù)時(shí),通常必須使用編譯器特定的關(guān)鍵字,RTA-OS提供了一個(gè)名為CAT1_ISR的宏,該宏可擴(kuò)展為編譯器工具鏈的正確指令,用戶應(yīng)使用該指令將函數(shù)標(biāo)記為一類ISR。

3.2.2 二類中斷的處理

二類中斷在RTA-OS控制下執(zhí)行,但不得在2類ISR中放置“中斷返回”命令,中斷返回由RTA-OS處理。當(dāng)二類中斷需要執(zhí)行時(shí),由RTA-OS調(diào)用中斷的入口函數(shù),二類中斷的入口函數(shù)如下:

#include  


ISR(isr_identifier){
/*  Handler  body.  */
}

3.3 中斷解除

當(dāng)硬件檢測到中斷時(shí),它通常會(huì)設(shè)置一個(gè)掛起位,告訴中斷控制器中斷已經(jīng)發(fā)生。然后,中斷控制器將通過中斷向量表跳轉(zhuǎn)到處理程序,掛起位的處理取決于目標(biāo),但有兩個(gè)基本方式:

1)中斷處理后(即中斷處理程序的分支發(fā)生時(shí)),掛起位自動(dòng)清除。當(dāng)處理程序退出時(shí),如果在處理當(dāng)前中斷時(shí)中斷變?yōu)閽炱馉顟B(tài),它將自動(dòng)重新觸發(fā)。

2)掛起位必須由中斷處理程序中的用戶代碼手動(dòng)清除。中斷處理程序的主體,無論是一類還是二類都需要包含清除掛起位的代碼,并向硬件發(fā)送中斷已被處理的信號(hào)。

3.4 中斷實(shí)際配置

RTA-OS使用的是靜態(tài)配置,項(xiàng)目實(shí)際開發(fā)中,需要OS開發(fā)人員在OS模塊開始配置前對(duì)各模塊(Adc、Pwm、Gpt等)的中斷需求進(jìn)行分析,如一類/二類中斷?中斷優(yōu)先級(jí)?回調(diào)函數(shù)名稱?等,OS開發(fā)人員還需要對(duì)中斷優(yōu)先級(jí)進(jìn)行評(píng)估,是否會(huì)影響系統(tǒng)中其他模塊工作。

此外,RTA-OS使用指定的向量為中斷生成向量表?xiàng)l目。與中斷優(yōu)先級(jí)一樣,中斷向量配置也是MCU特有(不同MCU,對(duì)應(yīng)的向量表不同)的,因此在配置中斷向量之前需要特別注意MCU選擇。

3.5 更高效的中斷處理方式

每個(gè)中斷處理程序?qū)⒃诖a執(zhí)行期間阻止所有優(yōu)先級(jí)相同或較低的中斷。在編寫中斷處理程序時(shí),最好將處理程序盡可能短。長時(shí)間運(yùn)行的處理程序會(huì)為低優(yōu)先級(jí)中斷的服務(wù)增加額外的延遲。

使用中如果需要在中斷中處理較多的代碼,可以采用:將代碼寫到Task中,再通過中斷來激活Task,這樣低優(yōu)先級(jí)的任務(wù)可以打斷該Task從而減少延遲,示例代碼如下:

#include
ISR(EfficientHandler){
ActivateTask(Task1);
}


TASK(Task1){
/*Longhandlercode.*/
TerminateTask();
}

審核編輯:湯梓紅

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

    關(guān)注

    68

    文章

    19293

    瀏覽量

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

    關(guān)注

    146

    文章

    17162

    瀏覽量

    351348
  • 看門狗
    +關(guān)注

    關(guān)注

    10

    文章

    565

    瀏覽量

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

    關(guān)注

    5

    文章

    898

    瀏覽量

    41516

原文標(biāo)題:RTA OS系列介紹02-中斷

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    放大電路中反饋的基本概念及判斷方法

      在實(shí)用放大電路中,幾乎都要引入這樣或那樣的反饋,以改善放大電路某些方面的性能。因此,掌握反饋的基本概念及判斷方法是研究實(shí)用電路的基礎(chǔ)。
    發(fā)表于 03-10 11:29 ?5726次閱讀
    放大電路中反饋的<b class='flag-5'>基本概念及</b>判斷方法

    中斷概念及51單片機(jī)的中斷系統(tǒng)

    中斷概念及51單片機(jī)的中斷系統(tǒng)13-1. 演示范例——聲控小車13-2. 中斷概念13-3. P89V51RD2單片
    發(fā)表于 03-29 10:27

    阻抗控制相關(guān)的基本概念

    阻抗控制部分包括兩部分內(nèi)容:基本概念及阻抗匹配。本篇主要介紹阻抗控制相關(guān)的一些基本概念。
    發(fā)表于 02-25 08:11

    USB基本概念及從機(jī)編程方法介紹

    慕課蘇州大學(xué).嵌入式開發(fā)及應(yīng)用.第四章.較復(fù)雜通信模塊.USB基本概念及從機(jī)編程方法0 目錄4 較復(fù)雜通信模塊4.4 USB基本概念及從機(jī)編程方法4.4.1 課堂重點(diǎn)4.4.2 測試與作業(yè)5 下一
    發(fā)表于 11-08 09:14

    單片機(jī)中斷基本概念

    文章目錄一.中斷基本概念二.中斷相關(guān)的寄存器三.中斷的實(shí)際使用四.中斷的優(yōu)點(diǎn):一.中斷
    發(fā)表于 11-25 08:14

    STM32的中斷系統(tǒng)基本概念

    STM32 中斷系統(tǒng)概述筆記(一)中斷概述中斷相關(guān)的基本概念STM32的中斷系統(tǒng)基本概念:NVI
    發(fā)表于 01-07 07:32

    中斷基本概念總結(jié)

    基于STM32單片機(jī)模塊練習(xí)——中斷總結(jié)基本概念1.ARM cortex_m3 內(nèi)核支持 256 個(gè)中斷(16 個(gè)內(nèi)核+240 外部)和可編程 256 級(jí)中斷優(yōu)先級(jí)的設(shè)置,與其相關(guān)的
    發(fā)表于 01-14 07:39

    電路的基本概念及定律 英語中文對(duì)照表

    電路的基本概念及定律電源 source電壓源 voltage source電流源 current source理想電壓源 ideal voltage source理想電流源 ideal current source伏安特性 volt-ampere characteristic電動(dòng)
    發(fā)表于 02-10 11:25 ?48次下載

    天線的基本概念及制作

    天線的基本概念及制作  我將介紹一些常見而且容易自制的天線,這些天線能夠用我們?nèi)粘I钪腥菀椎玫降牟牧现谱?。我?huì)逐一制作這些天
    發(fā)表于 01-04 09:48 ?1394次閱讀

    基于RF射頻知識(shí)基本概念及DTD無線產(chǎn)品介紹

    基于RF射頻知識(shí)基本概念及DTD無線產(chǎn)品介紹
    發(fā)表于 10-25 08:38 ?8次下載
    基于RF射頻知識(shí)<b class='flag-5'>基本概念及</b>DTD無線產(chǎn)品介紹

    STM32的基本概念及中斷應(yīng)用

    ARMCoetex-M3內(nèi)核共支持256個(gè)中斷,其中16個(gè)內(nèi)部中斷,240個(gè)外部中斷和可編程的256級(jí)中斷優(yōu)先級(jí)的設(shè)置。STM32目前支持的中斷
    發(fā)表于 03-24 10:29 ?2662次閱讀

    單片機(jī)中斷基本概念及中斷系統(tǒng)有什么優(yōu)點(diǎn)

    中斷系統(tǒng)中,MCU正常情況下運(yùn)行的程序稱為主程序,把產(chǎn)生申請(qǐng)中斷信號(hào)的單元和事件稱為中斷源,由中斷源向MCU所發(fā)出的申請(qǐng)中斷信號(hào)稱為
    發(fā)表于 09-11 17:25 ?1次下載
    單片機(jī)<b class='flag-5'>中斷</b>的<b class='flag-5'>基本概念及</b><b class='flag-5'>中斷</b>系統(tǒng)有什么優(yōu)點(diǎn)

    數(shù)字地、模擬地、信號(hào)地、交流地、直流地、屏蔽地、浮地基本概念及PCB地線分割的方法

    數(shù)字地、模擬地、信號(hào)地、交流地、直流地、屏蔽地、浮地基本概念及PCB地線分割的方法
    發(fā)表于 12-01 19:36 ?49次下載
    數(shù)字地、模擬地、信號(hào)地、交流地、直流地、屏蔽地、浮地<b class='flag-5'>基本概念及</b>PCB地線分割的方法

    11-中斷概念及外部IO口輸入中斷INT0的測試

    中斷概念及外部IO口輸入中斷INT0的測試文章目錄中斷概念及外部IO口輸入中斷INT0的測試
    發(fā)表于 01-13 16:01 ?3次下載
    11-<b class='flag-5'>中斷</b>的<b class='flag-5'>概念及</b>外部IO口輸入<b class='flag-5'>中斷</b>INT0的測試

    共生散射通信的基本概念及技術(shù)原理

    該文首先介紹共生散射通信的基本概念及技術(shù)原理, 然后從信息論基礎(chǔ)、接收機(jī)設(shè)計(jì)、資源配置, 以及多用戶接入4個(gè)方面綜述該技術(shù)的研究現(xiàn)狀。
    發(fā)表于 08-10 17:10 ?1387次閱讀