日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > Linux閱碼場
[導(dǎo)讀]INTERRUPT中斷是硬件和軟件交互的一種機制,可以說整個操作系統(tǒng),整個架構(gòu)都是由中斷來驅(qū)動的。中斷的機制分為兩種,中斷和異常,中斷通常為設(shè)備觸發(fā)的異步事件,而異常是執(zhí)行指令時發(fā)生的同步事件。本文主要來說明外設(shè)觸發(fā)的中斷,總的來說一個中斷的起末會經(jīng)歷設(shè)備,中斷控制器,CPU三個...

INTERRUPT

中斷是硬件和軟件交互的一種機制,可以說整個操作系統(tǒng),整個架構(gòu)都是由中斷來驅(qū)動的。中斷的機制分為兩種,中斷和異常,中斷通常為 設(shè)備觸發(fā)的異步事件,而異常是 執(zhí)行指令時發(fā)生的同步事件。本文主要來說明 外設(shè)觸發(fā)的中斷,總的來說一個中斷的起末會經(jīng)歷設(shè)備,中斷控制器,CPU 三個階段:設(shè)備產(chǎn)生中斷信號,中斷控制器翻譯信號,CPU 來實際處理信號。

本文用 的實例來講解多處理器下的中斷機制,從頭至尾的來看一看,中斷經(jīng)歷的三個過程。其中第一個階段設(shè)備如何產(chǎn)生信號不講,超過了操作系統(tǒng)的范圍,也超過了我的能力范圍。各種硬件外設(shè)有著自己的執(zhí)行邏輯,有各種形式的中斷觸發(fā)機制,比如邊沿觸發(fā),電平觸發(fā)等等??偟膩碚f就是向中斷控制器發(fā)送一個中斷信號,中斷控制器再作翻譯發(fā)送給 , 再執(zhí)行中斷服務(wù)程序?qū)χ袛噙M行處理。

中斷控制器

說到中斷控制器,是個什么東西?中斷控制器可以看作是中斷的代理,外設(shè)是很多的,如果沒有一個中斷代理,外設(shè)想要給 發(fā)送中斷信號來處理中斷,那只能是外設(shè)連接在 的管腳上, 的管腳是很寶貴的,不可能拿出那么多管腳去連接外設(shè)。所以就有了中斷控制器這個中斷代言人,所有的 外設(shè)連接其上,發(fā)送中斷請求時就向中斷控制器發(fā)送信號,中斷控制器再通知 CPU,如此便解決了上述問題。

中斷控制器有很多,前文講過 PIC,PIC 只用于單處理器,對于如今的多核多處理器時代,PIC 無能為力,所以出現(xiàn)了更高級的中斷控制器 APICAPIC() 高級可編程中斷控制器,APIC 分成兩部分 LAPICIOAPIC,前者 LAPIC 位于 內(nèi)部,每個 都有一個 LAPIC,后者 IOAPIC 與外設(shè)相連。外設(shè)發(fā)出的中斷信號經(jīng)過 IOAPIC 處理之后發(fā)送給 LAPIC,再由 LAPIC 決定是否交由 進行實際的中斷處理。

可以看出每個 上有一個 LAPIC,IOAPIC 是系統(tǒng)芯片組一部分,各個中斷消息通過總線發(fā)送接收。關(guān)于 APIC 的內(nèi)容很多也很復(fù)雜,詳細描述的可以參考 開發(fā)手冊卷三,本文不探討其中的細節(jié),只在上層較為抽象的層面講述,理清 APIC 模式下中斷的過程。

計算機啟動的時候要先對 APIC 進行初始化,后續(xù)才能正確使用,前面說過初始化就是設(shè)置一些寄存器,這部分我在再談中斷(APIC)有所講解,本文關(guān)于寄存器這一塊不會再詳述,可以先看一看。下面來看看 APIC 在一種較為簡單的工作模式下的初始化過程:

IOAPIC

初始化 IOAPIC 就是設(shè)置 IOAPIC 的寄存器,IOAPIC 寄存器一覽:

所以有了以下定義:

#define?REG_ID?????0x00??//?Register?index:?ID
#define?REG_VER????0x01??//?Register?index:?version
#define?REG_TABLE??0x10??//?Redirection?table?base??重定向表
但是這些寄存器是不能直接訪問的,需要通過另外兩個映射到內(nèi)存的寄存器來讀寫上述的寄存器。

內(nèi)存映射的兩個寄存器

這兩個寄存器是內(nèi)存映射的,IOREGSEL,地址為 ;IOWIN,地址為 。IOREGSEL 用來指定要讀寫的寄存器,然后從 IOWIN 中讀寫。也就是常說的 index/data 訪問方式,或者說 ,用 index 端口指定寄存器,從 data 端口讀寫寄存器,data 端口就像是所有寄存器的窗口。

而所謂內(nèi)存映射,就是把這些寄存器看作內(nèi)存的一部分,讀寫內(nèi)存,就是讀寫寄存器,可以用訪問內(nèi)存的指令比如 mov 來訪問寄存器。還有一種是 IO端口映射,這種映射方式是將外設(shè)的 IO端口(外設(shè)的一些寄存器) 看成一個獨立的地址空間,訪問這片空間不能用訪問內(nèi)存的指令,而需要專門的 in/out 指令來訪問。

通過 IOREGSELIOWIN 既可以訪問到 IOAPIC 所有的寄存器,所以結(jié)構(gòu)體 如下定義:

struct?ioapic?{
??uint?reg;???????//IOREGSEL
??uint?pad[3];????//填充12字節(jié)
??uint?data;??????//IOWIN
};
填充 字節(jié)是因為 IOREGSEL,長度為 4 字節(jié),IOWIN,兩者中間差了 2 字節(jié),所以填充 字節(jié)補上空位方便操作。

通過 IOREGSEL?選定寄存器,然后從IOWIN中讀寫相應(yīng)寄存器,因此也能明白下面兩個讀寫函數(shù):

static?uint?ioapicread(int?reg)
{
??ioapic->reg?=?reg;????//選定寄存器reg
??return?ioapic->data;??//從窗口寄存器中讀出寄存器reg數(shù)據(jù)
}

static?void?ioapicwrite(int?reg,?uint?data)
{
??ioapic->reg?=?reg;????//選定寄存器reg
??ioapic->data?=?data;??//向窗口寄存器寫就相當(dāng)于向寄存器reg寫
}
這兩個函數(shù)就是根據(jù) 來讀寫 IOAPIC 的寄存器。下面來看看 IOAPIC 寄存器分別有些什么意義,了解了之后自然就知道為什么要這樣那樣的初始化了。下面只說 中涉及到的寄存器,其他的有興趣見文末鏈接。

IOAPIC 寄存器

ID Register

  • 索引為 0

  • :ID

Version Register

  • 索引為 1

  • 表示版本,

  • 表示重定向表項最多有幾個,這里就是 23(從 0 開始計數(shù))

重定向表項

IOAPIC 有 24 個管腳,每個管腳都對應(yīng)著一個 64 位的重定向表項(也相當(dāng)于 64 位的寄存器),保存在 ,重定向表項的格式如下所示:

來源于 interrupt in linux
來源于 interrupt in linux
來源于 interrupt in linux
這是 大佬在他的 中總結(jié)出來的,很全面也很復(fù)雜,這里有所了解就好,配合著下面的初始化代碼對部分字段作相應(yīng)的解釋。

IOAPIC 初始化

#define?IOAPIC??0xFEC00000???//?Default?physical?address?of?IO?APIC

void?ioapicinit(void)
{
??int?i,?id,?maxintr;

??ioapic?=?(volatile?struct?ioapic*)IOAPIC;??????//IOREGSEL的地址
??maxintr?=?(ioapicread(REG_VER)?>>?16)?
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉