Fs4412中斷處理和程式設計流程
阿新 • • 發佈:2019-01-09
中斷處理:
1.中斷:在處理器中,中斷是一個過程,即CPU正在執行程式過程中,遇到外部或內部緊急事件需要處理,暫時中止當前程式執行轉而去為事件服務,待服務完畢,再返回到暫停處(斷點)繼續執行原來的程式。
為事件獨舞的程式稱之為中斷服務程式。
2.中斷的分類(硬中斷和軟中斷,內部中斷和外部中斷)
中斷的分為:硬體中斷(包括:內部中斷和外部中斷);軟體中斷
1)硬中斷和軟中斷的區別
----軟中斷是執行中斷指令產生的,而硬中斷是由外設引發的。
----硬中斷的中斷號是由中斷控制器提供的,軟中斷的中斷號由指令直接指出,無需使用中斷控制器。
----硬中斷是可遮蔽的,軟中斷不可遮蔽。
----硬中斷處理程式要確保它能快速地完成任務,這樣程式執行時才不會等待較長時間,稱為上半部。
----軟中斷處理硬中斷未完成的工作,是一種推後執行的機制,屬於下半部。
2)內部中斷和外部中斷的區別
----外部中斷一般是指由計算機外設發出的中斷請求,如:鍵盤中斷、印表機中斷、定時器中斷等。
外部中斷是可以遮蔽的中斷,也就是說,利用中斷控制器可以遮蔽這些外部裝置 的中斷請求。
----內部中斷是指因硬體出錯(如突然掉電、奇偶校驗錯等)或運算出錯(除數為零、運算溢位、單步中斷等)所引起的中斷。內部中斷是不可遮蔽的中斷 。
3.中斷優先順序
複習異常處理優先順序
1.復位異常(reset)
2.資料異常(data abort)
3.快速中斷異常(fiq)
4.外部中斷異常(irq)
5.預取異常(prefetch abort)
6.軟體中斷(swi)
7.未定義指令異常(undef)
4. 中斷響應步驟:
1.保護斷點(儲存下一條指令的地址,壓棧)
2.尋找中斷入口(根據不同的中斷源產生的中斷查詢終端入口地址)
3.執行中斷處理程式
4.終端返回
中斷控制器:是對產生的中斷進行控制,選擇CPU介面和核心介面,什麼處理模式。 GIC為中斷控制器,不要和ARMcore的中斷搞混了,這些中斷都是連線到ARM core的IRQ或者FIQ上的。 GIC是用來管理系統中所有彙集到一起的中斷,並且連線CPU和外設 ARM CPU對外的連線只有2箇中斷,一個是IRQ,一個是FIQ,相對應的處理模式分別是 一般中斷(IRQ)處理模式和快速中斷(FIQ)處理模式。所以 GIC 最後要把中斷彙集成2條線,與CPU對接。 GIC 是聯絡外設中斷和 CPU 的橋樑,也是各 CPU 之間中斷互聯的通道(也帶有管理功能), 它負責檢測、管理、分發中斷,可以做到: 1)使能或禁止中斷; 2)把中斷分組到組 0 還是組 1(安全系統中使用 FIQ,Group0,Group1 作為非安全系統使用連線 IRQ) 3)多核系統中將中斷分配到不同處理器上 4)設定電平觸發還是邊沿觸發方式(不等於外設的觸發方式) 5)虛擬化擴充套件 SGI(Software-generated interrupt),SGI為軟體可以觸發的中斷,經常用於各個core之間的通訊 ID:0-15 PPI(Private peripheral interrupt),PPI為每個core的私有外設中斷 ID: 16-31 SPI(Shared peripheral interrupt),SPI為各個core公用的中斷 ID: 32-1019(我們用的只有160箇中斷,32-159)
8.GIC的組成部分 1)分發器(Distributor) 作用: 檢測各個中斷源的狀態 控制各個中斷源的行為 分發各個中斷源產生的中斷事件分發到指定的一個或者多個CPU 各個子中斷使能 設定觸發方式 2)CPU介面(CPU Interface) -----(普通processor介面和虛擬機器介面) 作用: 優先順序排序 分發到哪個CPU上 雖然分發器可以管理多箇中斷源,但是它總是把優先順序最高的那個中斷請求送往CPU介面。 總的中斷的使能 狀態的維護 具體步驟:(前3步為外設初始化,後幾步為gic初始化,基於Fs4412開發板) 1.配置按鍵GPIO為外部中斷(通過查使用者手冊可以得知使用GPX_1),GPX1_CON = 0xf << 4; 2.設定觸發模式:EXT_INT41_CON = 0x2 << 4;(觸發方式為下降沿);
中斷處理的流程圖片:
這個是我自己的筆記總結,僅供參考;
中斷控制器:是對產生的中斷進行控制,選擇CPU介面和核心介面,什麼處理模式。 GIC為中斷控制器,不要和ARMcore的中斷搞混了,這些中斷都是連線到ARM core的IRQ或者FIQ上的。 GIC是用來管理系統中所有彙集到一起的中斷,並且連線CPU和外設 ARM CPU對外的連線只有2箇中斷,一個是IRQ,一個是FIQ,相對應的處理模式分別是 一般中斷(IRQ)處理模式和快速中斷(FIQ)處理模式。所以 GIC 最後要把中斷彙集成2條線,與CPU對接。 GIC 是聯絡外設中斷和 CPU 的橋樑,也是各 CPU 之間中斷互聯的通道(也帶有管理功能), 它負責檢測、管理、分發中斷,可以做到: 1)使能或禁止中斷; 2)把中斷分組到組 0 還是組 1(安全系統中使用 FIQ,Group0,Group1 作為非安全系統使用連線 IRQ) 3)多核系統中將中斷分配到不同處理器上 4)設定電平觸發還是邊沿觸發方式(不等於外設的觸發方式) 5)虛擬化擴充套件 SGI(Software-generated interrupt),SGI為軟體可以觸發的中斷,經常用於各個core之間的通訊 ID:0-15 PPI(Private peripheral interrupt),PPI為每個core的私有外設中斷 ID: 16-31 SPI(Shared peripheral interrupt),SPI為各個core公用的中斷 ID: 32-1019(我們用的只有160箇中斷,32-159)
8.GIC的組成部分 1)分發器(Distributor) 作用: 檢測各個中斷源的狀態 控制各個中斷源的行為 分發各個中斷源產生的中斷事件分發到指定的一個或者多個CPU 各個子中斷使能 設定觸發方式 2)CPU介面(CPU Interface) -----(普通processor介面和虛擬機器介面) 作用: 優先順序排序 分發到哪個CPU上 雖然分發器可以管理多箇中斷源,但是它總是把優先順序最高的那個中斷請求送往CPU介面。 總的中斷的使能 狀態的維護 具體步驟:(前3步為外設初始化,後幾步為gic初始化,基於Fs4412開發板) 1.配置按鍵GPIO為外部中斷(通過查使用者手冊可以得知使用GPX_1),GPX1_CON = 0xf << 4; 2.設定觸發模式:EXT_INT41_CON = 0x2 << 4;(觸發方式為下降沿);
中斷處理的流程圖片:
這個是我自己的筆記總結,僅供參考;