ARM中斷學習筆記(一)

2021-08-19 21:24:56 字數 2844 閱讀 4534

從週三開始到今天學了三天以後。記錄一下學到的東西,順便鞏固和整理。

一。首先:學習了什麼是中斷

在中斷出現之前,cpu和外設的通訊中,cpu佔主動地位,需要不斷的去查詢外設是否準備好,只有外設準備好了才能夠進行操作,這段時間內cpu就被空置了,非常浪費資源。中斷的原理是讓外設在通訊中佔主導地位,cpu 通知io裝置即將開始傳輸之後,不等待io裝置,而是做其他工作,外設準備好了之後主動通知cpu 然後進行資料的傳輸。

二。通過晶元手冊,arm的手冊gic_architecture_specification_v2.pdf,以及相關部落格學習了arm的中斷系統。

arm通用的中斷系統控制器叫做gic(general interrupt controller),是外設中斷和cpu之間的橋梁,並且也是cpu之間互相通訊的橋梁。目前有四個版本,v1~v4(v2最多支援8個arm core,v3/v4支援更多的arm core,主要用於arm64系統結構)。我們使用的是v2標準,使用的是gic-400,它更適合嵌入式系統,符合version 2的gic architecture specification。gic-400通過amba(advanced microcontroller bus architecture)這樣的片上匯流排連線到乙個或者多個arm processor上

。另外由於我們用不到虛擬cpu,所以我沒有去了解關於虛擬cpu的東西,本文中也就不提關於虛擬cpu的東西。

gic中的中斷有三種:

spi(shared peripheral interrupu):外圍共享中斷,普通外設的中斷,共享指不限定特定的cpu或者core,不針對特定的cpu。

ppi(private pheriperal interrupt):外圍私有中斷,這種中斷一般傳送給特定的cpu。

sgi(software generated interrupt):軟體觸發中斷,主要用於cpu之間的通訊。

中斷id:

每個中斷都有唯一id號,id號0-15分配給sgi中斷,id號16-31分配給ppi中斷,id號32-1019分配給spi中斷。

但是,由於arm cpu 

對外的連線只有 

2 個中斷,乙個是 

irq(interupt request,中斷請求) 

,乙個是 

fiq(fast interrupt request,快速中斷請求) 

,相對應的處理模式分別是一般中斷( 

irq 

)處理模式和快速中斷( 

fiq 

)處理模式。所以 

gic 

最後要把中斷匯集成 

2 條線,與 

cpu 

對接。在 

ic 的後端設計中, 

layout 

會把各個模組引過

來的中斷線(就是上面說的三種中斷)混接到 

gic 

上,然後把混聚合的中斷接到 

cpu 

的 irq 

和 fiq 

線上,這樣 

cpu 

就有觸覺了。

gic由兩部分組成,distributor 和 cpu inte***ce:

其中,distributer 可以叫做聚集器或者分發器,是用來將中斷集中起來然後分發給不同的cpu inte***ce的裝置。

distributor的主要功能包括:

全域性使能或者關閉中斷;

對單個的中斷線使能或者關閉;

對每個中斷設定優先順序;

為每個中斷設定目標處理器名單;

為每個外圍中斷設定是邊沿觸發還是電平觸發;

為每個中斷分類是屬於group0還是group1(只在有具有gic security extensions的體系中);

將sgi中斷傳送給乙個或者多個cpu;

cpu inte***ce 是cpu的中斷介面,主要功能包括:

使能被提交的中斷;

確認收到了中斷;

中斷處理完成後進行反饋;

遮蔽優先順序不夠高的中斷;

為處理器設定先佔策略;

對處在pending狀態的中斷的優先順序進行設定;

v2標準的gic最多可以有8個cpu inte***ce,編號從0~7。

在具有gic security extensions的體系中,cpu inte***ce可以被設定從而可以接收以下幾種中斷模式:

1.secure和non-secure 的通道來的中斷

2.只secure的通道來的中斷

3.只non-secure的通道來的中斷

secure access的中斷被劃分到group0, non-secure access的中斷被劃分到group1.fiq屬於group0。

中fiq不經過gic,直接到多選器的,這涉及到bypass的問題。

fiq是

fastinterrupt request,

這是arm

上定義的一種中斷處理方式,某些終端需要快速處理完成,在這種情況下,

cpu會簡化操作,然後退出中斷。

那麼從留向來說,途中是直接到

cpu側的,沒有經過

distributor?

是的,我們說過,

distributor

可以被使能,等各種操作,那麼當其主功能暫時關閉了怎麼辦呢,這就又了

bypass

功能,乙個已將

irq直接繞過它,

送到cpu

側,在某些情況下這可以作為乙個喚醒的訊號源去

wake up 

對應的cpu

,或者可以設定成為

x86上的

nmi,

也就是不可遮蔽中斷來處理。

ARM中斷筆記

一 arm體系cpu有以下7種工作模式 1 使用者模式 usr 正常的程式執行模式。不能直接切換到其他模式 2 系統模式 sys 執行作業系統的特權任務。與使用者模式類似,但具有直接切換到其他模式等特權 3 快速中斷模式 fiq 支援高速資料傳輸以及通道處理。fiq異常響應時進入此模式 4 中斷模式...

Arm學習筆記(一)

arm晶元具有risc體系的一般優點,比如 arm體系採用了一些特別的技術,在保證高效能的同時盡量減小晶元體積,降低晶元功耗 執行模式 使用者模式 系統模式 5種異常模式 通用暫存器 r0 r7 未備份暫存器 r8 r14 備份暫存器 r13通常用作棧指標 r14為連線暫存器 r15為程式計數器pc...

arm中斷保護和恢復 ARM的中斷處理 一

前面的文章介紹了linux的中斷處理機制,而作業系統的中斷處理是和硬體的中斷控制器緊密相關的,本文將以arm這樣乙個具體的處理器為例,講解硬體層面對中斷的支援。arm的中斷控制器被稱為gic generic interrupt controller 最開始的v1版本最多支援8個pe和1020個中斷源...