在呼叫request_irq函式申請乙個irq
時,會傳入相應的中斷型別標誌。對於這些標誌新舊版本的核心實現是不完全相同的。
irqf_disabled
3.16.7-ct7版本核心中此標誌是沒有地方用到的。此標誌表示中斷在處理的時候是關中斷的,不能被另外的中斷所打斷。(
)這篇文章裡有講到此標誌在新核心中被廢棄的原因。
之前老的核心中,按照中斷處理快慢,分為快速中斷和慢速的中斷。對於慢速的中斷,在處理的時候是不能關中斷的,能夠被其他的中斷所中斷,這樣能夠防止處理耗時過長。快速中斷在處理的時候是關中斷的,不能被其他中斷所中斷,因為認為它處理的夠快。
在老的核心版本(
我參考的核心版本是
2.6.12.6)
中sa_interrupt標誌起到和irqf_disabled一樣的作用。
fastcall
int
handle_irq_event
(unsigned int
irq,
struct
pt_regs *
regs,
struct
irqaction *
action
)
while
(action
);
handle_irq_event在do_irq
中呼叫,在執行註冊的
handler
之前,會判斷註冊時有沒有設定sa_interrupt標誌。如果沒有設定此標誌,就呼叫local_irq_enable函式開中斷。
之前由於硬體的問題、慢速的處理器以及開發人員能力的差異,導致慢速的中斷處理在現實情況中大量存在。現在隨著硬體的快速發展,已經能夠越來越快的處理中斷了。並且中斷的延遲處理機制,如下半部、中斷執行緒化都使得能夠將大量的工作從中斷處理程式中移出來。
irqf_shared
此標誌用來表示乙個irq
是否允許在多個裝置間共享。在之前使用
8259
中斷控制器是,乙個
8259只有8
個pin,2
個級聯也只能支援
15個外部裝置中斷,外設很多的情況下可能會需要多個裝置共享乙個
irq。
現在普遍使用的是apic
(高階可程式設計的中斷控制器),由
io apic
和local apic
組成。每個
io apic
支援24
個irq line
,多個io apic
可以級聯。現在不推薦使用此標誌來註冊中斷。
中斷標誌位實驗心得
在做cc2530開發板一些實驗時候,經常會遇到一些最基本的問題,比如清中斷標誌位時候,是先清源中斷暫存器還是先是清cpu中斷標誌暫存器。初始化中斷標誌 p0ifg 0x00 在下面電路中需要將引腳定義為終端觸發引腳即 p0 1後面連線開關 gnd 單向導電二極體負極為低電平時該發光二極體點亮,否則處...
關於中斷請求標誌位
今天才發現我用了這麼長時間的中斷服務函式,竟然不知道中斷請求標誌位到底具體是什麼意思 悲哀!一般就用了定時器中斷服務函式,沒關心中斷請求標誌位,今天才發現,原來定時器中斷請求標誌位就是定時器溢位標誌位,定時器溢位時自動跳到相應中斷向量處,當主機響應該定時器中斷時,該標誌位由硬體自動清零。所以,我雖然...
設定中斷遮蔽標誌可以改變
設定中斷遮蔽標誌可以改變 a 多個中斷源的中斷請求優先順序 b cpu對多個中斷請求響應的優先次序 c 多個中斷服務程式開始執行的順序 d 多個中斷服務程式執行完的次序 正確答案d 原因 由中斷請求排隊器決定 參考微機原理 硬體電路已經規定,中斷遮蔽標誌不能改變。a錯 從請求到響應期間,執行中斷隱指...