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

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

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

軟硬件交互的角度將中斷的知識(shí)梳理

sanyue7758 ? 來源:處芯積律 ? 2023-10-22 09:27 ? 次閱讀

Perface

Hi ALL!

最近在定位一個(gè)關(guān)于中斷的問題,以前看待這些問題是割裂的,要不是軟件怎么設(shè)計(jì)中斷,要不是硬件怎么設(shè)計(jì)中斷。

正好乘著這次機(jī)會(huì),站在軟硬件交互的角度將中斷的知識(shí)來梳理一下。

對(duì)了,今天天氣不錯(cuò),周末快樂!

中斷是什么?

中斷是指計(jì)算機(jī)在執(zhí)行期間,系統(tǒng)內(nèi)發(fā)生任何非尋常的或非預(yù)期的急需處理事件,使得CPU暫時(shí)中斷當(dāng)前正在執(zhí)行的程序而轉(zhuǎn)去執(zhí)行相應(yīng)的中斷服務(wù)程序(Interrupt Service Routine, ISR)。這個(gè)事件可以是由硬件設(shè)備觸發(fā)(如硬盤讀寫錯(cuò)誤、打印機(jī)沒有紙等),也可以是由軟件觸發(fā)(如用戶按下Ctrl+C)。

當(dāng)發(fā)生中斷時(shí),CPU會(huì)暫停當(dāng)前正在執(zhí)行的程序,并跳轉(zhuǎn)到相應(yīng)的中斷處理程序(Interrupt Service Routine, ISR)去處理這個(gè)事件。中斷處理程序通常會(huì)保存當(dāng)前任務(wù)的上下文信息(如CPU寄存器的狀態(tài)、內(nèi)存中的數(shù)據(jù)等),然后執(zhí)行相應(yīng)的中斷處理操作(如讀取數(shù)據(jù)、發(fā)送響應(yīng)等)。在中斷處理完畢后,CPU會(huì)恢復(fù)之前保存的上下文信息,并回到被中斷的任務(wù)繼續(xù)執(zhí)行。

中斷是一種異步的事件處理機(jī)制,可以提高系統(tǒng)的并發(fā)處理能力。在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,中斷被廣泛應(yīng)用于處理各種硬件設(shè)備事件和軟件異常情況。

我們知道中斷的發(fā)生與處理是一個(gè)需要軟硬件交互的操作。

504e15d8-7031-11ee-939d-92fbcf53809c.png

?關(guān)中斷:進(jìn)入不可響應(yīng)中斷請(qǐng)求的中斷,由硬件自動(dòng)完成?保存斷點(diǎn):把當(dāng)前的程序計(jì)數(shù)器PC中的內(nèi)容保存起來,用于中斷處理結(jié)束后能繼續(xù)執(zhí)行主程序?識(shí)別中斷源:有多個(gè)中斷源同時(shí)請(qǐng)求時(shí),只能響應(yīng)最高優(yōu)先級(jí)的,因此需進(jìn)一步判斷中斷源?保存現(xiàn)場(chǎng)和屏蔽字:進(jìn)入中斷服務(wù)程序后,要先保存現(xiàn)場(chǎng)?設(shè)置新的屏蔽字:用于改變中斷優(yōu)先級(jí)和控制中斷的產(chǎn)生?開中斷:執(zhí)行中斷程序時(shí),打開中斷可實(shí)現(xiàn)更高優(yōu)先級(jí)的中斷響應(yīng),實(shí)現(xiàn)中斷嵌套?執(zhí)行中斷服務(wù)程序:執(zhí)行中斷服務(wù)程序中的內(nèi)容?再次關(guān)中斷:使得恢復(fù)現(xiàn)場(chǎng)和屏蔽字時(shí)不會(huì)被中斷打斷?恢復(fù)現(xiàn)場(chǎng)和屏蔽字:使現(xiàn)場(chǎng)和屏蔽字恢復(fù)到中斷之前的狀態(tài)?再次開中斷:中斷執(zhí)行完,現(xiàn)場(chǎng)恢復(fù)完后,可以打開中斷?中斷返回:返回原程序繼續(xù)執(zhí)行

處理過程,會(huì)經(jīng)歷兩次的開/關(guān)中斷,也可用下圖描述

505b7fe8-7031-11ee-939d-92fbcf53809c.png

在之前我們?cè)谧?a href="http://srfitnesspt.com/soft/data/21-22/" target="_blank">嵌入式的時(shí)候,大多是關(guān)注了軟件層面,如何注冊(cè)中斷,如何設(shè)計(jì)中斷的參數(shù),如何編寫中斷服務(wù)函數(shù),如何將中斷服務(wù)綁定到中斷號(hào)。做linux中斷的話,這些都是定義好的,你可以去調(diào)用接口,當(dāng)然也支持自定義添加新的中斷。

后面這部分可以好好展開學(xué)習(xí)一下,當(dāng)然是在我的內(nèi)存系列結(jié)束后。

但是既然是一個(gè)軟硬件交互的過程,那么這里就拉著硬件和軟件兩位伙伴來看看一個(gè)完整的中斷過程。

前置知識(shí)

在開始描述一個(gè)中斷的軟硬件流程之前,我們需要提前預(yù)備幾個(gè)前置知識(shí)點(diǎn)。

單重中斷與多重中斷

?單重中斷在CPU執(zhí)行中斷服務(wù)程序的過程中不能被打斷。當(dāng)有新的更高優(yōu)先級(jí)的中斷發(fā)生時(shí),正在執(zhí)行的中斷服務(wù)程序會(huì)被暫停,轉(zhuǎn)而執(zhí)行新的中斷服務(wù)程序。?多重中斷在執(zhí)行某個(gè)中斷服務(wù)程序的過程中,CPU可以去響應(yīng)更高的中斷請(qǐng)求。這被稱為中斷嵌套。比如,當(dāng)一個(gè)中斷服務(wù)程序正在執(zhí)行時(shí),發(fā)生了另一個(gè)更高優(yōu)先級(jí)的中斷,CPU會(huì)暫停當(dāng)前的中斷服務(wù)程序,轉(zhuǎn)而執(zhí)行新的中斷服務(wù)程序。一旦新的中斷服務(wù)程序執(zhí)行完畢,CPU會(huì)返回到原來被暫停的中斷服務(wù)程序,繼續(xù)執(zhí)行。

50672898-7031-11ee-939d-92fbcf53809c.png

注意:?jiǎn)沃刂袛嗪投嘀刂袛嗟膮^(qū)別在于“開中斷”的設(shè)置時(shí)間不同。對(duì)于單重中斷,開中斷指令設(shè)置在最后“中斷返回”之前,意味著在整個(gè)中斷服務(wù)處理過程中,不能再響應(yīng)其他中斷源的請(qǐng)求。而對(duì)于多重中斷,開中斷指令提前至“保護(hù)現(xiàn)場(chǎng)”之后,意味著在保護(hù)現(xiàn)場(chǎng)之后,若有更高級(jí)別的中斷源提出請(qǐng)求,CPU也可以響應(yīng),從而實(shí)現(xiàn)中斷嵌套,這是二者的主要區(qū)別。

多重中斷與中斷屏蔽技術(shù)

上面我們知道了單重中斷和多重中斷的區(qū)別:

5071b11e-7031-11ee-939d-92fbcf53809c.jpg

中斷的嵌套不能一直嵌套下去,為了保證正在執(zhí)行的中斷服務(wù)程序的完整性和提高系統(tǒng)的效率和響應(yīng)速度,有時(shí)候我們?cè)趫?zhí)行種的時(shí)候不想新的中斷請(qǐng)求干擾正在執(zhí)行的中斷服務(wù)程序來提高系統(tǒng)的效率和響應(yīng)速度和保證正在執(zhí)行的中斷服務(wù)程序的完整性。

那么這個(gè)時(shí)候就出現(xiàn)了中斷屏蔽技術(shù)。

1、中斷屏蔽技術(shù):主要用于多重中斷

多重中斷:(中斷嵌套)當(dāng)CPU正在執(zhí)行某個(gè)中斷服務(wù)程序時(shí),另一個(gè)中斷源又提出了新的中斷請(qǐng)求,而CPU又響應(yīng)了這個(gè)新的請(qǐng)求,暫時(shí)停止正在運(yùn)行的服務(wù)程序,轉(zhuǎn)去執(zhí)行新的中斷服務(wù)程序,這稱為多重中斷,又稱中斷嵌套。

如果CPU對(duì)新的請(qǐng)求不予響應(yīng),待執(zhí)行完當(dāng)前的服務(wù)程序后再響應(yīng),即為單重中斷。

中斷系統(tǒng)若要具有處理多重中斷的功能,必須具備各項(xiàng)條件。

?1)提前設(shè)置“開中斷”指令:一般情況下,CPU進(jìn)入中斷周期后,由中斷隱指令自動(dòng)將EINT置“0”,即關(guān)中斷。

中斷隱指令指CPU響應(yīng)中斷之后,經(jīng)過某些操作,轉(zhuǎn)去執(zhí)行中斷服務(wù)程序的一種操作。

這就意味著CPU在執(zhí)行中斷服務(wù)程序中禁止響應(yīng)新的中斷請(qǐng)求。CPU若想再次響應(yīng)中斷請(qǐng)求,必須開中斷,

這一任務(wù)通常由中斷服務(wù)程序中的開中斷指令實(shí)現(xiàn)。

多重中斷示意圖如下:

507f3f32-7031-11ee-939d-92fbcf53809c.jpg

?2)、優(yōu)先級(jí)別高的中斷源有權(quán)中斷優(yōu)先級(jí)別低的中斷源。

在滿足1的前提下,只有優(yōu)先級(jí)別更高的中斷源請(qǐng)求才可以中斷比其級(jí)別低的中斷服務(wù)程序,反之則不然。

為了保證級(jí)別低的中斷源不干擾比其級(jí)別高的中斷源的中斷處理過程,可采用屏蔽技術(shù)。

例如,有A、B、C、D 4個(gè)中斷源,其優(yōu)先級(jí)按A->B->C->D由高向低次序排列。在CPU執(zhí)行主程序期間,同時(shí)出現(xiàn)了B和C的中斷請(qǐng)求,由于B級(jí)別高于C,故首先執(zhí)行B的服務(wù)程序。

當(dāng)B的服務(wù)程序執(zhí)行完返回主程序后,由于C請(qǐng)求未撤銷,故CPU又再去執(zhí)行C的中斷服務(wù)程序。若此時(shí)又出現(xiàn)了D的請(qǐng)求,因?yàn)镈級(jí)別低于C,故CPU不響應(yīng)。當(dāng)C的服務(wù)程序執(zhí)行完返回主程序后再去執(zhí)行D的服務(wù)程序。

若此時(shí)又出現(xiàn)了A請(qǐng)求,因A級(jí)別高于D,故CPU暫停對(duì)D級(jí)中斷服務(wù)程序的執(zhí)行,轉(zhuǎn)去執(zhí)行A級(jí)中斷服務(wù)程序,等A級(jí)服務(wù)程序執(zhí)行完后,再去執(zhí)行D級(jí)中斷服務(wù)程序。上述中斷處理示意圖如下:

50863b70-7031-11ee-939d-92fbcf53809c.jpg

2、屏蔽技術(shù)

?1)屏蔽觸發(fā)器和屏蔽字:程序中斷接口電路中,完成觸發(fā)器D,中斷請(qǐng)求觸發(fā)器INTR和屏蔽觸發(fā)器MASK。

在程序中斷接口電路中,有三個(gè)重要的組成部分:完成觸發(fā)器D,中斷請(qǐng)求觸發(fā)器INTR和屏蔽觸發(fā)器MASK。這些組件都扮演著各自的角色,以實(shí)現(xiàn)程序中斷處理的功能。

完成觸發(fā)器D:當(dāng)設(shè)備工作完成時(shí),會(huì)將D置為1,這表示中斷源已經(jīng)準(zhǔn)備好向CPU發(fā)送中斷請(qǐng)求。

中斷請(qǐng)求觸發(fā)器INTR:當(dāng)設(shè)備發(fā)出中斷請(qǐng)求時(shí),INTR會(huì)被置為1。這個(gè)觸發(fā)器是用來向CPU發(fā)送中斷請(qǐng)求的。

屏蔽觸發(fā)器MASK:每個(gè)中斷源都有一個(gè)與之對(duì)應(yīng)的屏蔽觸發(fā)器,如果該中斷源被屏蔽(即MASK=1),那么即使INTR被置為1,CPU也不會(huì)響應(yīng)這個(gè)中斷請(qǐng)求。換句話說,屏蔽觸發(fā)器可以阻止特定的中斷源向CPU發(fā)送中斷請(qǐng)求。

所有的屏蔽觸發(fā)器組合在一起,構(gòu)成了屏蔽寄存器。

?當(dāng)中斷源被屏蔽時(shí)(MASK=1),此時(shí)即使D=1,中斷查詢信號(hào)到來時(shí)刻只能將INTR置“0”,CPU接收不到該中斷源的中斷請(qǐng)求,即它被屏蔽。?若該中斷源未被屏蔽(MASK=0),當(dāng)設(shè)備工作已完成時(shí)(D=1),中斷查詢信號(hào)則將INTR置“1”,表示該中斷源向CPU發(fā)出中斷請(qǐng)求,?該信號(hào)送至排隊(duì)器進(jìn)行優(yōu)先級(jí)判斷。顯然,對(duì)于每個(gè)中斷請(qǐng)求觸發(fā)器就有一個(gè)屏蔽觸發(fā)器,將所有屏蔽觸發(fā)器組合在一起,便構(gòu)成了一個(gè)屏蔽寄存器。屏蔽寄存器的內(nèi)容稱為屏蔽字。屏蔽字與中斷源的優(yōu)先級(jí)是一一對(duì)應(yīng)的。

?2)屏蔽技術(shù)可改變優(yōu)先等級(jí):嚴(yán)格地說,優(yōu)先級(jí)包含響應(yīng)優(yōu)先級(jí)和處理優(yōu)先級(jí)。響應(yīng)優(yōu)先級(jí)是指CPU響應(yīng)各中斷源請(qǐng)求的優(yōu)先次序,這種次序往往是硬件線路已設(shè)置好的,不便于改動(dòng)。處理優(yōu)先級(jí)是指CPU實(shí)際對(duì)各中斷源請(qǐng)求的處理優(yōu)先次序。如果不采用屏蔽技術(shù),響應(yīng)的優(yōu)先次序就是處理的優(yōu)先次序。采用了屏蔽技術(shù)后,可以改變CPU處理各中斷源的優(yōu)先等級(jí),從而改變CPU執(zhí)行程序的軌跡。

例如,A、B、C、D 這4個(gè)中斷源的優(yōu)先級(jí)別按A->B->C->D降序排列,根據(jù)這一次序,CPU執(zhí)行程序的軌跡如下圖所示。當(dāng)4個(gè)中斷源同時(shí)提出

50966090-7031-11ee-939d-92fbcf53809c.jpg

在不改變CPU響應(yīng)中斷的次序下,通過改變屏蔽字可以改變CPU處理中斷的次序。例如,更改上述4個(gè)中斷源的屏蔽字將其處理次序更改為:

509c48fc-7031-11ee-939d-92fbcf53809c.jpg

50a78db6-7031-11ee-939d-92fbcf53809c.jpg

CPU在運(yùn)行程序的過程中,若A、B、C、D 4個(gè)中斷源同時(shí)提出請(qǐng)求,按照中斷級(jí)別的高低,CPU首先響應(yīng)并處理A中斷源的請(qǐng)求,由于A的屏蔽字是1111,屏蔽了所有的中斷源,故A程序可以全部執(zhí)行完,然后回到主程序。

由于B、C、D的中斷請(qǐng)求還未響應(yīng),而B的響應(yīng)優(yōu)先級(jí)高于其他,所以CPU響應(yīng)B的請(qǐng)求,進(jìn)入B的中斷服務(wù)程序。

在B的服務(wù)程序中,由于設(shè)置了新的屏蔽字0100,即A、C、D可打斷B,而A程序已執(zhí)行完,C的響應(yīng)優(yōu)先級(jí)高于D,于是CPU響應(yīng)C,進(jìn)入C的服務(wù)程序。

在C的服務(wù)程序中,由于設(shè)置了的屏蔽字0110,即A、D可打斷C,A已執(zhí)行于是CPU響應(yīng)D,執(zhí)行D的中斷服務(wù)程序。

D一直做完后回到C程序,C程序執(zhí)行完后,回到B程序。

B程序做完后,回到主程序。

在中斷處理過程中,CPU首先會(huì)檢查INTR,如果INTR為1,那么CPU會(huì)進(jìn)一步檢查對(duì)應(yīng)的屏蔽觸發(fā)器(MASK),如果MASK也為1,那么該中斷源的中斷請(qǐng)求會(huì)被屏蔽,CPU不會(huì)響應(yīng);如果MASK為0,那么CPU會(huì)響應(yīng)這個(gè)中斷請(qǐng)求,轉(zhuǎn)去執(zhí)行對(duì)應(yīng)的中斷服務(wù)程序。

這個(gè)過程是自動(dòng)進(jìn)行的,不需要程序員明確地編寫相關(guān)的指令。在硬件設(shè)計(jì)中,程序員需要根據(jù)實(shí)際需求來設(shè)置INTR、D和MASK的值,以實(shí)現(xiàn)正確的中斷處理。

你是軟件程序員還是硬件程序員呢?

3、屏蔽技術(shù)的意義

屏蔽技術(shù)還能給程序控制帶來更大的靈活性。例如,在浮點(diǎn)運(yùn)算中,當(dāng)程序員估計(jì)到執(zhí)行某段程序時(shí)可能出現(xiàn)“階上溢”,但又不希望因“階上溢”而使機(jī)器停機(jī),為此可設(shè)一屏蔽字,使對(duì)應(yīng)“階上溢”的屏蔽位為“1”,這樣,即使出現(xiàn)“階上溢”,機(jī)器也不停機(jī)。

在某些情況下,程序員可能希望在執(zhí)行某些操作之前禁止其他中斷,以防止這些中斷干擾正在進(jìn)行的操作。通過將對(duì)應(yīng)的中斷屏蔽觸發(fā)器設(shè)置為1(即屏蔽該中斷),程序員可以確保在執(zhí)行這些操作期間,不會(huì)受到來自該中斷源的中斷請(qǐng)求干擾。

此外,屏蔽技術(shù)還可以用于實(shí)現(xiàn)優(yōu)先級(jí)控制。例如,如果系統(tǒng)中有多個(gè)中斷源,并且程序員希望在某些操作完成之前不響應(yīng)其他低優(yōu)先級(jí)的中斷,那么可以通過調(diào)整屏蔽字的設(shè)置,改變CPU對(duì)不同中斷源的處理優(yōu)先級(jí)。這樣,程序員可以更好地控制程序的執(zhí)行流程和中斷處理順序,從而優(yōu)化系統(tǒng)的性能和響應(yīng)速度。

另外,屏蔽技術(shù)還可以用于調(diào)試程序。當(dāng)程序中存在某些不可預(yù)見的錯(cuò)誤時(shí),程序員可以通過設(shè)置相應(yīng)的屏蔽字,禁止某些中斷請(qǐng)求,以避免這些錯(cuò)誤對(duì)程序執(zhí)行造成干擾。同時(shí),通過查看被屏蔽的中斷服務(wù)程序表,程序員可以及時(shí)發(fā)現(xiàn)錯(cuò)誤并采取相應(yīng)的措施進(jìn)行修復(fù)。

屏蔽技術(shù)為程序員提供了一種強(qiáng)大的工具,可以更加靈活地控制程序的執(zhí)行和中斷處理過程。通過合理使用屏蔽技術(shù),可以提高系統(tǒng)的穩(wěn)定性和性能,滿足各種復(fù)雜的應(yīng)用需求。

一個(gè)中斷的一生

現(xiàn)在有了上述的基識(shí),如何從軟件與硬件的角度去看一個(gè)中斷,一個(gè)中斷的完整流程應(yīng)該是什么樣子?

?創(chuàng)建對(duì)應(yīng)的中斷服務(wù)函數(shù)(軟件):在編寫操作系統(tǒng)或應(yīng)用程序時(shí),需要為每個(gè)中斷源創(chuàng)建一個(gè)對(duì)應(yīng)的中斷服務(wù)函數(shù)(Interrupt Service Routine, ISR)。這個(gè)函數(shù)是用于處理特定中斷的程序,當(dāng)發(fā)生中斷時(shí),處理器會(huì)跳轉(zhuǎn)到這個(gè)函數(shù)執(zhí)行相應(yīng)的操作。?將中斷服務(wù)函數(shù)綁定到特定的中斷號(hào),也叫中斷注冊(cè)(軟件):在操作系統(tǒng)或硬件系統(tǒng)中,需要將每個(gè)中斷源與相應(yīng)的中斷號(hào)進(jìn)行綁定。這個(gè)過程通常在初始化時(shí)完成,以確保當(dāng)發(fā)生中斷時(shí)能夠正確地調(diào)用相應(yīng)的中斷服務(wù)函數(shù)。這個(gè)綁定可以通過編程實(shí)現(xiàn),例如在Linux系統(tǒng)中可以使用register_interrupt函數(shù)將中斷服務(wù)函數(shù)注冊(cè)到特定的中斷號(hào)。?模塊產(chǎn)生原始中斷(邏輯):當(dāng)某個(gè)硬件設(shè)備需要中斷處理器服務(wù)時(shí),它會(huì)向中斷控制器發(fā)送一個(gè)中斷請(qǐng)求。這個(gè)請(qǐng)求可能由硬件信號(hào)線或特定協(xié)議(如PCI Express)發(fā)送。例如,當(dāng)硬盤讀寫錯(cuò)誤時(shí),硬盤控制器會(huì)向中斷控制器發(fā)送一個(gè)中斷請(qǐng)求。

原始中斷是指當(dāng)某個(gè)設(shè)備或部件需要CPU的注意時(shí),它會(huì)通過向CPU發(fā)送一個(gè)中斷信號(hào)來請(qǐng)求CPU的注意。這個(gè)中斷信號(hào)是由硬件電路產(chǎn)生的,是電信號(hào),可以被CPU感知到。原始中斷通常是由硬件設(shè)備或系統(tǒng)自發(fā)產(chǎn)生的,例如鍵盤按鍵、定時(shí)器、打印機(jī)等。

?經(jīng)過int_mask判斷后未被屏蔽從而中斷狀態(tài)拉高(邏輯):中斷控制器接收到中斷請(qǐng)求后,會(huì)根據(jù)int_mask判斷該中斷是否被屏蔽。如果未被屏蔽,則將中斷狀態(tài)拉高,以便處理器能夠感知到這個(gè)中斷請(qǐng)求。這個(gè)過程中斷控制器會(huì)根據(jù)int_mask中的位圖判斷當(dāng)前的中斷是否被屏蔽,如果未被屏蔽則將對(duì)應(yīng)的中斷狀態(tài)位拉高。

中斷的int_mask是中斷掩碼。它是一個(gè)只讀寄存器,用于顯示哪些位當(dāng)前被屏蔽,哪些位未被屏蔽/啟用。通過設(shè)置int_mask,可以屏蔽或開啟某些中斷。

?模塊頂層信號(hào) xxx_int拉高后,送給特定中斷號(hào)對(duì)應(yīng)處理器(CPU&MCU等)的對(duì)應(yīng)bit(邏輯):當(dāng)中斷狀態(tài)被拉高后,模塊頂層信號(hào) xxx_int 會(huì)被拉高,并將這個(gè)信號(hào)送給特定中斷號(hào)對(duì)應(yīng)處理器的對(duì)應(yīng)bit。這個(gè)過程是由硬件邏輯實(shí)現(xiàn)的,通常與處理器的架構(gòu)和中斷控制器的設(shè)計(jì)有關(guān)。例如,在x86架構(gòu)的計(jì)算機(jī)中,當(dāng)某個(gè)中斷狀態(tài)被拉高后,對(duì)應(yīng)的處理器會(huì)通過APIC總線將對(duì)應(yīng)的中斷信號(hào)發(fā)送給處理器。?中斷信號(hào)拉高后,進(jìn)入對(duì)應(yīng)bit的中斷服務(wù)函數(shù)(邏輯):當(dāng)處理器的對(duì)應(yīng)bit接收到中斷信號(hào)后,處理器會(huì)跳轉(zhuǎn)到相應(yīng)的中斷服務(wù)函數(shù)去處理這個(gè)中斷。這個(gè)過程是由硬件自動(dòng)完成的,通常與處理器的架構(gòu)和操作系統(tǒng)的設(shè)計(jì)有關(guān)。例如,在x86架構(gòu)的計(jì)算機(jī)中,當(dāng)處理器接收到一個(gè)中斷信號(hào)后,它會(huì)通過CSIP和IVT寄存器跳轉(zhuǎn)到對(duì)應(yīng)的中斷服務(wù)函數(shù)執(zhí)行相應(yīng)的操作。

硬件層面,中斷系統(tǒng)需要硬件設(shè)備(如中斷控制器)來捕捉中斷信號(hào),并將信號(hào)傳遞給CPU。在接收到中斷信號(hào)后,CPU會(huì)根據(jù)中斷號(hào)在中斷向量表中查找對(duì)應(yīng)的入口地址,然后跳轉(zhuǎn)到這個(gè)地址執(zhí)行對(duì)應(yīng)的中斷服務(wù)程序。這個(gè)過程是由硬件自動(dòng)執(zhí)行的,不需要軟件的參與。

?執(zhí)行中斷服務(wù)函數(shù)的內(nèi)容(軟件):在中斷服務(wù)函數(shù)中,會(huì)根據(jù)設(shè)備的需求進(jìn)行相應(yīng)的操作,例如讀取數(shù)據(jù)、發(fā)送響應(yīng)等。這個(gè)過程是由軟件實(shí)現(xiàn)的,通常與設(shè)備的驅(qū)動(dòng)程序和操作系統(tǒng)的設(shè)計(jì)有關(guān)。例如,在Linux系統(tǒng)中,當(dāng)執(zhí)行完一個(gè)中斷服務(wù)函數(shù)后,它通常會(huì)通過調(diào)用handle_irq_event函數(shù)來處理設(shè)備的事件。

MORE

中斷向量表

ARM處理器中,當(dāng)一個(gè)中斷信號(hào)被觸發(fā)時(shí),中斷控制器會(huì)發(fā)出一個(gè)中斷請(qǐng)求,并將該請(qǐng)求傳遞給CPU。 CPU接收到中斷請(qǐng)求后,會(huì)根據(jù)中斷號(hào)在中斷向量表中查找對(duì)應(yīng)的中斷服務(wù)程序入口地址。 中斷向量表是一個(gè)預(yù)定義的表,其中每個(gè)條目都包含一個(gè)指向特定中斷服務(wù)程序的入口地址。 當(dāng)CPU接收到中斷請(qǐng)求時(shí),它會(huì)根據(jù)中斷號(hào)在表中查找對(duì)應(yīng)的條目,獲取對(duì)應(yīng)的入口地址,并跳轉(zhuǎn)到該地址執(zhí)行相應(yīng)的中斷服務(wù)程序。 在這個(gè)過程中,程序員可以通過設(shè)置中斷向量表中的條目來定義不同中斷源的中斷服務(wù)程序入口地址。 這樣可以實(shí)現(xiàn)自定義的中斷處理邏輯,根據(jù)不同的中斷事件執(zhí)行相應(yīng)的操作。 需要注意的是,在ARM處理器中,不同的工作模式(例如User、FIQ、IRQ、SVC等)使用不同的寄存器集和特權(quán)級(jí)別。 當(dāng)中斷發(fā)生時(shí),CPU會(huì)根據(jù)當(dāng)前的工作模式和中斷向量表中的條目,確定要跳轉(zhuǎn)到的中斷服務(wù)程序的入口地址。 然后它會(huì)將CPU的狀態(tài)保存到相應(yīng)的棧中,并跳轉(zhuǎn)到該地址執(zhí)行中斷服務(wù)程序。 在ARM處理器中,中斷向量表是一個(gè)預(yù)定義的表,它通常在系統(tǒng)啟動(dòng)時(shí)由引導(dǎo)加載器(Bootloader)或操作系統(tǒng)進(jìn)行定義和初始化。 引導(dǎo)加載器在系統(tǒng)啟動(dòng)時(shí)負(fù)責(zé)加載和啟動(dòng)操作系統(tǒng)的內(nèi)核。在這個(gè)過程中,它會(huì)讀取存儲(chǔ)器中的中斷向量表數(shù)據(jù),并將其復(fù)制到指定的內(nèi)存地址。 這個(gè)地址通常是在系統(tǒng)配置時(shí)確定的,以確保中斷向量表可以在正確的位置被CPU訪問。 操作系統(tǒng)在啟動(dòng)后也會(huì)接管中斷向量表的管理和配置。它會(huì)根據(jù)系統(tǒng)中斷控制器和其他硬件設(shè)備的配置,將中斷向量表中的條目映射到相應(yīng)的中斷服務(wù)程序入口地址。 這樣,當(dāng)中斷發(fā)生時(shí),CPU可以根據(jù)中斷號(hào)在中斷向量表中查找對(duì)應(yīng)的條目,并跳轉(zhuǎn)到對(duì)應(yīng)的地址執(zhí)行相應(yīng)的中斷服務(wù)程序。 需要注意的是,中斷向量表的定義方式和具體實(shí)現(xiàn)可能會(huì)因不同的ARM處理器架構(gòu)和系統(tǒng)設(shè)計(jì)而有所不同。 因此,具體的定義位置和方式可能會(huì)因硬件平臺(tái)和操作系統(tǒng)而有所差異。 這部分又涉及到編譯與內(nèi)存分布了,這里就不展開講了,有機(jī)會(huì)的一起看看。

Raw Interrupt和Masked Interrupt

Raw Interrupt和Masked Interrupt是兩種中斷類型,它們?cè)贏RM處理器中被用來處理中斷。

Raw Interrupt(原始中斷)是指外部中斷源的狀態(tài),無論ARM芯片是否屏蔽該中斷源,這個(gè)中斷源的中斷狀態(tài)都會(huì)被寄存器存儲(chǔ),從而可以通過相應(yīng)的函數(shù)讀取。

Masked Interrupt(屏蔽中斷)是指是否屏蔽的狀態(tài)。在ARM處理器中,每個(gè)中斷源都有一個(gè)與之對(duì)應(yīng)的屏蔽觸發(fā)器,如果該中斷源被屏蔽(即MASK=1),那么即使INTR被置為1,CPU也不會(huì)響應(yīng)這個(gè)中斷請(qǐng)求。換句話說,屏蔽觸發(fā)器可以阻止特定的中斷源向CPU發(fā)送中斷請(qǐng)求。所有的屏蔽觸發(fā)器組合在一起,構(gòu)成了屏蔽寄存器。

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

    關(guān)注

    134

    文章

    9006

    瀏覽量

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

    關(guān)注

    31

    文章

    5268

    瀏覽量

    119640
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    1992

    瀏覽量

    60976

原文標(biāo)題:參考資料

文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式系統(tǒng)軟硬件基礎(chǔ)知識(shí)大全

    作為一種廣泛應(yīng)用于各個(gè)領(lǐng)域的技術(shù),其軟硬件基礎(chǔ)知識(shí)對(duì)于開發(fā)者來說至關(guān)重要。在本文中,我們詳細(xì)探討嵌入式系統(tǒng)的軟件基礎(chǔ)知識(shí),以幫助讀者深入了解這一領(lǐng)域。實(shí)時(shí)操作系統(tǒng)是嵌入式系統(tǒng)的核心組
    發(fā)表于 05-09 14:12

    支持過程級(jí)動(dòng)態(tài)軟硬件劃分的RSoC設(shè)計(jì)與實(shí)現(xiàn)

    :JSJK.0.2010-04-037【正文快照】:1引言可重構(gòu)片上系統(tǒng)上包含了執(zhí)行軟件程序的微處理器核和實(shí)現(xiàn)硬件邏輯的可重構(gòu)器件,因此設(shè)計(jì)人員需要通過軟硬件劃分來應(yīng)用所需完成的功能有效地映射到這兩種類型的運(yùn)算
    發(fā)表于 05-28 13:40

    計(jì)算機(jī)軟硬件知識(shí)

    一、計(jì)算機(jī)軟硬件知識(shí)1.計(jì)算機(jī)的發(fā)展和應(yīng)用計(jì)算機(jī)的誕生: 第一臺(tái)計(jì)算機(jī) ENIAC 于 1946年 誕生于 美國(guó)賓夕法尼亞 大學(xué)計(jì)算機(jī)發(fā)展階段:以電子元器件劃分發(fā)展階段電子管第一代
    發(fā)表于 07-22 06:31

    什么是移動(dòng)機(jī)器人軟硬件系統(tǒng)問題

    的實(shí)踐經(jīng)驗(yàn),來系統(tǒng)的梳理一下什么是移動(dòng)機(jī)器人軟硬件系統(tǒng)問題。文中涉及到的開源項(xiàng)目網(wǎng)站地址如下:開源項(xiàng)目網(wǎng)站Handsfree
    發(fā)表于 08-06 06:13

    萌新求助,求步進(jìn)電機(jī)驅(qū)動(dòng)器軟硬件方面的知識(shí)點(diǎn)

    萌新求助,求步進(jìn)電機(jī)驅(qū)動(dòng)器軟硬件方面的知識(shí)點(diǎn)
    發(fā)表于 10-28 08:06

    基于EDA 的嵌入式系統(tǒng)軟硬件劃分方法

    基于EDA 的嵌入式系統(tǒng)軟硬件劃分方法Hardware/Software Partitioning Method Based on Estimation of Distribution 摘要:針對(duì)嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計(jì)中的軟硬件
    發(fā)表于 12-05 16:34 ?26次下載

    基于USB的串行通信軟硬件設(shè)計(jì)

    本文是基于USB的串行通信軟硬件設(shè)計(jì)的詳細(xì)介紹
    發(fā)表于 10-17 17:38 ?127次下載
    基于USB的串行通信<b class='flag-5'>軟硬件</b>設(shè)計(jì)

    USB的串行通信軟硬件設(shè)計(jì)

    USB的串行通信軟硬件設(shè)計(jì)
    發(fā)表于 09-04 10:08 ?14次下載
    USB的串行通信<b class='flag-5'>軟硬件</b>設(shè)計(jì)

    基于FPGA的軟硬件協(xié)同測(cè)試設(shè)計(jì)影響因素分析與設(shè)計(jì)實(shí)現(xiàn)

    ,不利于硬件的開發(fā)進(jìn)度。面對(duì)這一難題,文章從FPGA 的軟硬件協(xié)同測(cè)試角度出發(fā),利用PC 機(jī)和測(cè)試硬件設(shè)備的特點(diǎn),進(jìn)行FPGA 的軟硬件協(xié)同
    發(fā)表于 11-18 05:46 ?1861次閱讀

    軟硬件協(xié)同設(shè)計(jì)機(jī)遇與挑戰(zhàn)分析

    軟硬件協(xié)同設(shè)計(jì)是指對(duì)系統(tǒng)中的軟硬件部分使用統(tǒng)一的描述和工具進(jìn)行集成開發(fā),可完成全系統(tǒng)的設(shè)計(jì)驗(yàn)證并跨越軟硬件界面進(jìn)行系統(tǒng)優(yōu)化,軟硬件協(xié)同設(shè)計(jì)是嵌入式技術(shù)發(fā)展的一大趨勢(shì),本PPT文件是賽靈
    發(fā)表于 11-25 03:45 ?649次閱讀

    淺談關(guān)于STM32軟硬件兼容性相關(guān)的知識(shí)

    關(guān)于STM32軟硬件兼容性相關(guān)的知識(shí)
    的頭像 發(fā)表于 03-24 11:14 ?4167次閱讀
    淺談關(guān)于STM32<b class='flag-5'>軟硬件</b>兼容性相關(guān)的<b class='flag-5'>知識(shí)</b>

    基于FPGA芯片的軟硬件平臺(tái)的使用

    基于FPGA芯片的軟硬件平臺(tái)的使用
    發(fā)表于 07-01 09:35 ?20次下載

    軟硬件協(xié)同設(shè)計(jì)是系統(tǒng)芯片的基礎(chǔ)設(shè)計(jì)方法學(xué)

    軟硬件協(xié)同仿真驗(yàn)證是對(duì)軟硬件功能設(shè)計(jì)的正確性及性能進(jìn)行驗(yàn)證和評(píng)估。傳統(tǒng)設(shè)計(jì)中,硬件和軟件通常是分開獨(dú)立開發(fā)設(shè)計(jì)的,到系統(tǒng)設(shè)計(jì)后期才軟硬件
    的頭像 發(fā)表于 08-12 11:28 ?3321次閱讀

    為什么要從“軟硬件協(xié)同”走向“軟硬件融合”?

    軟件和硬件需要定義好交互的“接口”,通過接口實(shí)現(xiàn)軟硬件的“解耦”。例如,對(duì)CPU來說,軟硬件的接口是指令集架構(gòu)ISA:ISA之下的CPU處理器是硬件
    的頭像 發(fā)表于 12-07 14:23 ?2452次閱讀

    軟硬件融合的概念和內(nèi)涵

    跟很多朋友交流,當(dāng)提到軟硬件融合的時(shí)候,他們會(huì)這么說:“軟硬件融合,難道不是顯而易見嗎?我感覺在二三十年前就已經(jīng)有這個(gè)概念了?!痹谒麄兊南敕ɡ?,其實(shí):軟硬件融合等同于軟硬件協(xié)同,甚至等
    的頭像 發(fā)表于 10-17 14:36 ?1284次閱讀
    <b class='flag-5'>軟硬件</b>融合的概念和內(nèi)涵