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

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

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

單片機(jī)中斷電平觸發(fā)和脈沖輸入

jf_pJlTbmA9 ? 來源:strongerHuang ? 作者:strongerHuang ? 2023-10-17 17:11 ? 次閱讀

Cortex-M0處理器允許兩種形式的中斷請求:電平觸發(fā)和脈沖輸入。

電平觸發(fā)是外設(shè)的中斷請求有持續(xù)的電平信號,若電平信號在處理器從ISR返回之前沒有被取消,則中斷返回后將再次觸發(fā)已經(jīng)服務(wù)過的中斷。

脈沖中斷是在信號的上升沿同步采樣的中斷信號,為了確保NVIC檢測到中斷,外設(shè)必須維持中斷信號至少一個(gè)時(shí)鐘周期,在此期間,NVIC檢測脈沖和鎖存中斷。后續(xù)的脈沖可以將暫掛狀態(tài)加到活動(dòng)中斷中,使?fàn)顟B(tài)為中斷活動(dòng)且掛起。然而,在有限周期內(nèi)發(fā)生的多個(gè)脈沖只登記作為中斷調(diào)度的單個(gè)事件。

哪些中斷是電平觸發(fā)的,哪些是脈沖觸發(fā)的,具體選擇哪一種是根據(jù)芯片設(shè)計(jì)來決定,不過大多數(shù)的外設(shè)使用電平觸發(fā)中斷輸出。

1. 電平觸發(fā)和脈沖輸入

Cortex-M0處理器鎖存所有中斷,外圍中斷成為等待其中一個(gè)原因是:

NVIC檢測到中斷信號被置位并且對應(yīng)的中斷不是active

NVIC檢測到中斷信號的上升沿

軟件寫入相應(yīng)的中斷集掛起寄存器

掛起的中斷將一直掛起,直到下列情況之一發(fā)生:

處理器為中斷進(jìn)入ISR,這將改變中斷的狀態(tài)等待活躍:

對于電平觸發(fā)型中斷,當(dāng)處理器從ISR返回時(shí),NVIC采樣中斷信號。如果中斷信號仍然有效,表示中斷的狀態(tài)更改為pending,這可能會(huì)導(dǎo)致處理器立即重新進(jìn)入ISR。否則,中斷的狀態(tài)將變?yōu)榉腔顒?dòng)狀態(tài)。

對于脈沖觸發(fā)型中斷,NVIC繼續(xù)監(jiān)視中斷信號,如果這樣觸發(fā)時(shí),中斷狀態(tài)變?yōu)閽炱鸷突顒?dòng)狀態(tài)。在這種情況下,當(dāng)處理器從ISR返回中斷狀態(tài)時(shí),中斷狀態(tài)變?yōu)閽炱馉顟B(tài)可能會(huì)導(dǎo)致處理器立即重新進(jìn)入ISR。如果中斷信號不是脈沖而處理器是在ISR,當(dāng)處理器從ISR返回中斷狀態(tài)變?yōu)榉腔顒?dòng)狀態(tài)。

軟件寫入相應(yīng)的中斷清除寄存器位。

對于電平觸發(fā)型中斷,如果中斷信號仍然有效,則中斷的狀態(tài)中斷不會(huì)改變。否則,中斷的狀態(tài)將變?yōu)榉腔顒?dòng)狀態(tài)。

對于脈沖中斷,中斷狀態(tài)變?yōu)椋?/p>

inactive,如果狀態(tài)是pending

active,如果狀態(tài)是活動(dòng)的和掛起的

2. 中斷處理

當(dāng)中斷事件發(fā)生時(shí),由于外設(shè)連接到了NVIC上,中斷信號就會(huì)得到確認(rèn)。在處理器執(zhí)行中斷服務(wù)并且沒有清除外設(shè)的中斷的信號以前,該信號會(huì)保持高電平。

在NVIC內(nèi)部,當(dāng)檢測到有中斷發(fā)生時(shí),該中斷的掛起狀態(tài)會(huì)被置位,當(dāng)處理器接受該中斷并且開始執(zhí)行中斷服務(wù)后,掛起狀態(tài)就會(huì)被清除。

poYBAGIB3SGAPDrvAAI-b1Wb2dk430.png

針對脈沖輸入的中斷請求,這種情況下,在中斷得到服務(wù)之前,掛起狀態(tài)寄存器將會(huì)一直保持該請求。

pYYBAGIB3SOAJ_SXAAIfbWUpED8873.png

如果中斷請求沒有立即執(zhí)行,并且在確認(rèn)之前被軟件清除了,處理器將會(huì)忽略掉本次請求,并且不會(huì)執(zhí)行中斷處理。

如果在軟件清除掛起狀態(tài)時(shí),外設(shè)仍然保持著中斷請求,掛起狀態(tài)寄存器還會(huì)立即生成。

3. 中斷等待

通常情況下,處理器的中斷等待時(shí)間為16個(gè)周期,這個(gè)等待時(shí)間從中斷確認(rèn)的處理器時(shí)鐘周期開始,一直到中斷處理開始執(zhí)行結(jié)束。

計(jì)算中斷等待需具備以下前提:

該中斷使能并沒有PRIMASK或者其他正在執(zhí)行的異常處理所屏蔽

存儲(chǔ)器系統(tǒng)沒有任何等待狀態(tài),在中斷處理、壓棧、取向量表或者中斷處理開始時(shí)取指都會(huì)用到總線傳輸,如果存儲(chǔ)器系統(tǒng)需要等待,那么總線傳輸時(shí)產(chǎn)生的等待狀態(tài)則可能使得中斷延遲。

下面幾種情況可能會(huì)導(dǎo)致不同的中斷等待:

中斷的咬尾連鎖,如果一個(gè)中斷返回時(shí)立即產(chǎn)生另外一個(gè)中斷請求,處理器就會(huì)跳過出棧和壓棧時(shí)間,減少了中斷等待時(shí)間。

延遲到達(dá),如果中斷發(fā)生時(shí),另外一個(gè)低優(yōu)先級中斷正在進(jìn)行壓棧處理,由于延遲到達(dá),高優(yōu)先級的中斷就會(huì)立即執(zhí)行,這樣會(huì)導(dǎo)致高優(yōu)先級的中斷等待時(shí)間減少。

4. 異常屏蔽寄存器PRIMASK

有些對時(shí)間敏感的應(yīng)用,需要在短時(shí)間內(nèi)禁止響應(yīng)所有的中斷,對于這種應(yīng)用,處理器不是直接使用中斷使能、禁止控制寄存器來禁止所有中斷再恢復(fù),而是一個(gè)單獨(dú)的特殊寄存器 - PRIMASK,通過它可以屏蔽掉除了NMI和HardFault異常的其他的所有的中斷和系統(tǒng)異常。

PRIMASK寄存器只有1位有效,并且在復(fù)位后默認(rèn)為0。該寄存器為0時(shí),所有的中斷和異常都處于允許狀態(tài),設(shè)置為1后,只有NMI和HardFault處于使能狀態(tài)。

MOVS R0, #0x1         ;  //中斷#2
MSR PRIMASK , R0       ;  //將R0的值送到PRIMASK

NVIC編程提示軟件使用CPSIE i和CPSID i指令來啟用和禁用中斷。

CPSIE i                 ;  //清除 PRIMASK(使能中斷)
CPSID i                 ;  //設(shè)置 PRIMASK(不響應(yīng)中斷)

CMSIS設(shè)備驅(qū)動(dòng)庫提供了C語言的實(shí)現(xiàn)函數(shù),用戶可以直接使用函數(shù)來設(shè)置和清除PRIMASK寄存器:

void __disable_irq(void) //不響應(yīng)中斷
void __enable_irq(void)  //啟用中斷

在對時(shí)間敏感的程序完成后,應(yīng)該清除PRIMASK。要不然即使在中斷處理中使用__disable_irq()函數(shù),處理器將停止接受新的中斷請求。主要原因是PRIMASK寄存器和Xpsr是相互獨(dú)立的,因此異常返回不會(huì)影響中斷屏蔽狀態(tài)。

5. NVIC使用提示

確保軟件使用正確對齊的寄存器訪問,處理器不支持對 NVIC 寄存器的未對齊訪問。

即使中斷被禁用,它也可以進(jìn)入掛起狀態(tài)。

禁用中斷只能防止處理器處理中斷。

在對中斷向量表重定義之前,必須包含所有的異常中斷,例如 NMI、HardFault 和外設(shè)中斷等。

素材來源 | 極術(shù)社區(qū)
直接轉(zhuǎn)載來源:strongerHuang
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進(jìn)行處理


審核編輯 黃宇

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

    關(guān)注

    68

    文章

    19039

    瀏覽量

    228483
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44455

    瀏覽量

    630957
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5272

    瀏覽量

    119655
收藏 人收藏

    評論

    相關(guān)推薦

    外部中斷0電平觸發(fā)

    外部中斷0電平觸發(fā) C51單片機(jī)源碼,KEIL源文件,C語言編寫
    發(fā)表于 06-20 16:36 ?9次下載

    外部中斷1電平觸發(fā)

    外部中斷1電平觸發(fā) C51單片機(jī)源碼,KEIL源文件,C語言編寫
    發(fā)表于 06-20 16:36 ?5次下載

    基于單片機(jī)的外部中斷的設(shè)計(jì)

    外部中斷單片機(jī)中占有很重要的作用。而且外部中斷的優(yōu)先級默認(rèn)是最高的。平臺(tái)單片機(jī)一般有兩個(gè)外部中斷---INT0、INT1。
    發(fā)表于 09-15 15:14 ?9次下載
    基于<b class='flag-5'>單片機(jī)</b>的外部<b class='flag-5'>中斷</b>的設(shè)計(jì)

    51單片機(jī)的外部中斷應(yīng)該如何觸發(fā)

    51單片機(jī)的外部中斷有兩種觸發(fā)方式可選:電平觸發(fā)和邊沿觸發(fā)。選擇
    發(fā)表于 09-04 17:27 ?5次下載
    51<b class='flag-5'>單片機(jī)</b>的外部<b class='flag-5'>中斷</b>應(yīng)該如何<b class='flag-5'>觸發(fā)</b>

    51單片機(jī)的外部中斷有哪些觸發(fā)方式

    51單片機(jī)有兩個(gè)外部中斷申請輸入端:INT0 和 INT1。 51單片機(jī)的外部中斷,分為低電平
    發(fā)表于 08-13 17:32 ?3次下載
    51<b class='flag-5'>單片機(jī)</b>的外部<b class='flag-5'>中斷</b>有哪些<b class='flag-5'>觸發(fā)</b>方式

    如何觸發(fā)51單片機(jī)的外部中斷詳細(xì)經(jīng)驗(yàn)總結(jié)說明

    51單片機(jī)的外部中斷有兩種觸發(fā)方式可選:電平觸發(fā)和邊沿觸發(fā)。選擇
    發(fā)表于 07-26 17:36 ?1次下載
    如何<b class='flag-5'>觸發(fā)</b>51<b class='flag-5'>單片機(jī)</b>的外部<b class='flag-5'>中斷</b>詳細(xì)經(jīng)驗(yàn)總結(jié)說明

    單片機(jī)中斷系統(tǒng)

    很多初學(xué)單片機(jī)的小伙伴都非常懼怕中斷的學(xué)習(xí),確實(shí)中斷最難學(xué)但也最重要,沒學(xué)會(huì)中斷就不能說自己會(huì)單片機(jī),如果學(xué)會(huì)
    發(fā)表于 07-20 10:17 ?2448次閱讀
    <b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>中斷</b>系統(tǒng)

    使用單片機(jī)實(shí)現(xiàn)外部中斷1電平觸發(fā)的C語言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)外部中斷1電平觸發(fā)的C語言程序免費(fèi)下載。
    發(fā)表于 11-26 17:31 ?6次下載

    使用單片機(jī)實(shí)現(xiàn)外部中斷0電平觸發(fā)的C語言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)外部中斷0電平觸發(fā)的C語言程序免費(fèi)下載。
    發(fā)表于 11-26 17:31 ?3次下載

    單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)技術(shù)——單一外中斷的應(yīng)用

    時(shí)中斷方式的選擇方法。二、實(shí)驗(yàn)內(nèi)容在單片機(jī)P1口上接有8只LED。在外部中斷0輸入引腳(P3.2)接一只按鈕開關(guān)K1。要求將外部中斷0設(shè)置為
    發(fā)表于 11-05 12:21 ?1次下載
    <b class='flag-5'>單片機(jī)</b>應(yīng)用系統(tǒng)設(shè)計(jì)技術(shù)——單一外<b class='flag-5'>中斷</b>的應(yīng)用

    AT89C51單片機(jī)外部中斷

    C51單片機(jī)外部中斷調(diào)用P3_2 ,P3_3口。中斷方式有兩種,分別為電平方式和脈沖方式。中斷
    發(fā)表于 11-12 12:06 ?2次下載
    AT89C51<b class='flag-5'>單片機(jī)</b>外部<b class='flag-5'>中斷</b>

    51單片機(jī)之外部中斷應(yīng)用實(shí)例(電平觸發(fā)、邊沿觸發(fā))

    ,擁有8K字節(jié)程序存儲(chǔ)空間,512字節(jié)隨機(jī)數(shù)據(jù)存儲(chǔ)空間;I/O口控制端口、中斷功能、定時(shí)器及串行接口。下面詳細(xì)講述外部中斷功能的使用。外部中斷單片機(jī)提供的系統(tǒng)緊急事件的
    發(fā)表于 11-20 18:51 ?9次下載
    51<b class='flag-5'>單片機(jī)</b>之外部<b class='flag-5'>中斷</b>應(yīng)用實(shí)例(<b class='flag-5'>電平</b><b class='flag-5'>觸發(fā)</b>、邊沿<b class='flag-5'>觸發(fā)</b>)

    單片機(jī)系統(tǒng)設(shè)計(jì)技術(shù)——外部中斷

    外部中斷一、實(shí)驗(yàn)?zāi)康亩?、?shí)驗(yàn)內(nèi)容三、實(shí)驗(yàn)步驟四、C代碼如下五、實(shí)驗(yàn)結(jié)果六、實(shí)驗(yàn)體會(huì)一、實(shí)驗(yàn)?zāi)康恼莆?b class='flag-5'>單片機(jī)外部中斷的基本使用方法 了解單片機(jī)外部中斷
    發(fā)表于 11-23 17:51 ?15次下載
    <b class='flag-5'>單片機(jī)</b>系統(tǒng)設(shè)計(jì)技術(shù)——外部<b class='flag-5'>中斷</b>

    Cortex-M0處理器的中斷請求形式:電平觸發(fā)脈沖輸入

    Cortex-M0處理器允許兩種形式的中斷請求:電平觸發(fā)脈沖輸入。
    的頭像 發(fā)表于 05-13 12:05 ?1596次閱讀

    單片機(jī)中的外部中斷電平觸發(fā)和下降沿觸發(fā)有什么區(qū)別

    單片機(jī)中的外部中斷電平觸發(fā)和下降沿觸發(fā)有什么區(qū)別? 外部中斷
    的頭像 發(fā)表于 01-31 10:32 ?2820次閱讀