設備驅(qū)動程序和中斷效勞機制_第1頁
設備驅(qū)動程序和中斷效勞機制_第2頁
設備驅(qū)動程序和中斷效勞機制_第3頁
設備驅(qū)動程序和中斷效勞機制_第4頁
設備驅(qū)動程序和中斷效勞機制_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、設備驅(qū)動程序和中斷效勞機制4.1 不使用中斷效勞機制的程序查詢式 I/O 忙/等待方法先看一個例子:假設端口A連接到PC中的一個以太網(wǎng)接口卡,端口B是PC的調(diào)制解調(diào)器輸入,它將字符串發(fā)送到 線上。假設 In_A_Out_B 是從端口A接收輸入字符并向端口B發(fā)送字符的例程。在不產(chǎn)生中斷和不使用中斷效勞處理機制的情況下, In_A_Out_B 例程調(diào)度 ae步驟,循環(huán)執(zhí)行函數(shù) iv, 以確保調(diào)制解調(diào)器端口A能夠從卡上連續(xù)獲得字符。4.1 不使用中斷效勞機制的程序查詢式 I/O 忙/等待方法In_A_Out_B 例程:1調(diào)用函數(shù) i2調(diào)用函數(shù) ii3調(diào)用函數(shù) iii4調(diào)用函數(shù) iv5調(diào)用函數(shù) v6循

2、環(huán)回到第一步調(diào)用步驟:步驟 a:函數(shù) i:檢查端口A是否有字符。如果沒有,那么等待。步驟 b:函數(shù) ii:讀取端口A的數(shù)據(jù)并返回到步驟a的指令接著調(diào)用函數(shù)iii。步驟 c:函數(shù) iii:解密信息,并返回到步驟a的指令接著調(diào)用函數(shù)iv。步驟 d:函數(shù) iv:對信息進行編碼,并返回到步驟a的指令接著調(diào)用函數(shù)v。步驟e:函數(shù) v:將編碼后的信息傳送給端口B,并返回到步驟a的最后一條指令,然后重新執(zhí)行步驟a。4.1 不使用中斷效勞機制的程序查詢式 I/O 忙/等待方法例如網(wǎng)絡程序 In_A_Out_B 中步驟 ae 對5個函數(shù)的調(diào)用。4.1 不使用中斷效勞機制的程序查詢式 I/O 忙/等待方法忙/等待

3、的程序查詢方式存在以下問題:1程序必須在一個很短的時間內(nèi)切換 In_A_Out_B 中步驟 ae 循環(huán)的執(zhí)行。2等待周期可能很長,造成處理器時間的浪費。3如果系統(tǒng)中存在其他端口和設備,程序查詢方法存在的問題是如何輪詢每個端口和設備,并保證及時切換到 In_A_Out_B 的步驟 a, 以及及時切換到各個端口和設備的輪詢,在特定時間間隔內(nèi)執(zhí)行其他端口和設備有關(guān)函數(shù)的效勞例程。4程序和函數(shù)是處理器及設備相關(guān)的, 所有的系統(tǒng)函數(shù)必須同時執(zhí)行,并且執(zhí)行時間完全取決于軟件執(zhí)行所花的時間。4.2 ISR的概念中斷:中斷指的是一個事件,該事件請求處理器關(guān)注并對硬件或軟件事件作出某些處理。硬中斷:設備或端口就

4、緒時或完成指定動作時產(chǎn)生的中斷。軟中斷、陷阱或異常: 檢測到軟件運行時異常條件,處理器硬件或者軟件指令產(chǎn)生的中斷。作為對中斷的響應, 當前執(zhí)行的例程或程序被打斷,轉(zhuǎn)而執(zhí)行一個ISR。當ISR為設備提供效勞時通常稱為設備驅(qū)動程序ISR,當ISR為軟件中斷提供效勞時通常稱為異常、信號或陷阱處理程序。4.2.1 端口或設備中斷及ISR例如假設一個字符輸入到調(diào)制解調(diào)器會產(chǎn)生一個端口A中斷,并將狀態(tài)存放器中的狀態(tài)位置位。發(fā)生中斷后,效勞例程 ISR_PortA_Charater 開始運行,以保證調(diào)制解調(diào)器端口A不會錯過讀取該字符。 ISR_PortA_Charater 執(zhí)行步驟f,代替前面例子中 In_

5、A_Out_B 例程的步驟a函數(shù)i和步驟b函數(shù)ii。它將讀取的字符放入存儲器緩沖區(qū)。步驟c、d和e是獨立的,它們現(xiàn)在作為函數(shù)調(diào)用 Out_B 中的一局部。4.2.1 端口或設備中斷及ISR例如ISR_PortA_Charater 執(zhí)行過程:1步驟f的函數(shù)vi:讀取端口A的字符。復位狀態(tài)位,使調(diào)制解調(diào)器為下一個字符輸入做好準備。將讀取的字符放入存儲器緩沖區(qū)。存儲器緩沖區(qū)是一組存儲器地址空間,其中的字節(jié)排成隊列等待后續(xù)處理。2從 ISR 返回。Out_B 例程執(zhí)行過程:1步驟g:調(diào)用函數(shù)vi,對存儲器緩沖區(qū)中的信息字符進行解密,然后返回到下一條指令,執(zhí)行步驟h。2步驟h:調(diào)用函數(shù)vii,對消息字符

6、進行編碼,然后返回到下一條指令,執(zhí)行步驟k。3步驟k:調(diào)用函數(shù)viii,將經(jīng)過編碼的字符發(fā)送到端口B。4從函數(shù)返回。4.2.1 端口或設備中斷及ISR例如端口A中斷時執(zhí)行 ISR_PortA_Charater 的步驟f 和 Out_B 例程中的步驟 gk 的過程。 4.2.2 軟件中斷和ISR例如嵌入式軟件系統(tǒng)必須為應用程序提供的設備代碼包括:1配置初始化,2激活,3用于讀操作的驅(qū)動函數(shù),4用于寫操作的驅(qū)動函數(shù),5復位代碼。每個設備任務首先使用一個ISR完成設備驅(qū)動程序函數(shù)通過一個軟件中斷指令SWI調(diào)用ISR。4.2.2 軟件中斷和ISR例如程序運行期間必須檢測遇到的錯誤條件或運行時異常條件。

7、運算或通信期間,程序或者通過硬件或者通過運行一條SWI指令來檢測異常運行條件稱為陷阱。程序檢測到異常運行條件時的行為稱為“拋出異常。中斷效勞例程在捕捉到執(zhí)行SWI拋出的異常時運行,因此,運行中斷效勞例程稱為“捕獲。4.2.2 軟件中斷和ISR例如a軟件中使用軟件中斷指令SWI調(diào)用中斷效勞例程ISR拋出和捕獲運算期間遇到的異常運行條件;b使用SWI信號觸發(fā)另一個例程,程序任務或程序線程的運行。4.2.2 軟件中斷和ISR例如ISR調(diào)用具有以下特點:1ISR調(diào)用是由于中斷執(zhí)行了一個事件而產(chǎn)生。事件可以發(fā)生在任何時刻,并且事件的發(fā)生是異步的。2ISR調(diào)用是在事件根底上的轉(zhuǎn)移,它從當前指令序列轉(zhuǎn)移到另

8、一個指令序列,并在返回之前一直執(zhí)行轉(zhuǎn)移到的指令序列。3事件可能是設備或端口事件,也可能是硬件或程序檢測到的軟件運算異常條件。4系統(tǒng)中存在中斷效勞機制,它負責從多個源調(diào)用ISR。5當前運行的例程執(zhí)行完任何一條指令都可能發(fā)生到ISR的轉(zhuǎn)移。使用指令設置屏蔽位可以屏蔽ISR的執(zhí)行,也可以用指令復位屏蔽位以取消屏蔽。6在中斷調(diào)用時,指令并是完全連續(xù)執(zhí)行的。它們的執(zhí)行情況決定于系統(tǒng)中的中斷機制。7ISR執(zhí)行期間,可能發(fā)生多個中斷調(diào)用要轉(zhuǎn)移到其他ISR的情況,這些ISR不需要像函數(shù)調(diào)用一樣嵌套,掛起的較高優(yōu)先級的中斷在被中斷ISR結(jié)束后或者在其執(zhí)行中都可以轉(zhuǎn)移。4.2.3 作為級中斷處理程序的中斷效勞線程

9、ISR可以分為兩局部執(zhí)行。1一局部占用的效勞例程執(zhí)行時間短,可以稱為一級ISR。它運行ISR的關(guān)鍵局部,并執(zhí)行一個信號函數(shù),以使OS之后調(diào)度運行其余局部。它還可以通過一個函數(shù)發(fā)送消息給OS,使OS在ISR返回之后開始執(zhí)行一個任務,該任務在中斷例程和信號函數(shù)執(zhí)行期間處于等待狀態(tài)。2第二局部是效勞例程中較長的局部,在第一局部發(fā)出信號后開始執(zhí)行,稱為中斷效勞線程IST或二級ISR。OS按優(yōu)先級調(diào)度IST。IST處理ISR中設備無關(guān)的局部。4.2.4 設備驅(qū)動程序系統(tǒng)中的每個設備都需要設備驅(qū)動程序例程。ISR與設備驅(qū)動程序函數(shù)有關(guān)。設備驅(qū)動程序是高級語言程序員使用的函數(shù),它實現(xiàn)了與設備硬件交互、與設備

10、進行數(shù)據(jù)通信、向設備發(fā)送控制命令,并運行讀取設備數(shù)據(jù)的代碼。程序員使用設備驅(qū)動程序的通用命令操作設備。這些通用命令由OS提供。用于設備操作的這些命令使用了一些通用函數(shù)。在不同的操作系統(tǒng)中設備驅(qū)動程序代碼不同。系統(tǒng)使用不同的OS時,同一設備可能具有不同的驅(qū)動程序代碼。4.2.4 設備驅(qū)動程序設備驅(qū)動程序使用SWI初始化中斷效勞。設備根據(jù)設備效勞的需要使用系統(tǒng)和IO總線。設備驅(qū)動程序可以看作是應用程序和設備之間的軟件層中的函數(shù)。驅(qū)動程序負責翻譯程序中使用設備的通用函數(shù),并向設備配置和控制器發(fā)送必要的命令。驅(qū)動程序使用了設備的控制、狀態(tài)和數(shù)據(jù)存放器。通過初始化相應的ISR,可以對設備執(zhí)行翻開、配置、

11、初始化、連接、讀、寫、關(guān)閉和斷開操作。許多設備的驅(qū)動程序是OS的一局部,例如打印機、觸摸屏、LCD顯示器、小鍵盤、鍵盤等。4.3 中斷源硬件中斷源可以是內(nèi)部設備,也可以是外部的外圍設備,它們都會打斷當前執(zhí)行的例程,轉(zhuǎn)移到相應的ISR。軟件中斷源涉及到:1處理器檢測到執(zhí)行期間的非法操作碼運算錯誤;2執(zhí)行SWI指令引起的處理器當前例程中斷。每個中斷源都需要暫時將控制權(quán)從當前執(zhí)行例程轉(zhuǎn)移到中斷源相應的ISR。4.3 中斷源常見中斷源4.3 中斷源其他特殊類型的中斷源:1與內(nèi)部設備有關(guān)的硬件中斷2與外部設備相關(guān)的硬件中斷3與軟件錯誤相關(guān)的硬件中斷4與軟件指令相關(guān)的中斷源4.4 中斷效勞處理機制每個系統(tǒng)

12、都有中斷效勞處理機制,用于中斷處理的機制是由OS提供的。4.4.1 中斷向量中斷向量是處理器以向量方式訪問的存儲器地址。中斷發(fā)生后,處理器將程序計數(shù)器轉(zhuǎn)移到中斷向量新地址。通過這個地址,執(zhí)行相應的ISR為中斷提供效勞。處理器以向量方式訪問的存儲器地址根據(jù)特定到處理器或微控制器來決定。向量尋址方式是由中斷處理機制決定的。4.4.1 中斷向量以下是幾種不同的中斷處理機制:1處理器對 ISR_VECTADDR 向量尋址中斷發(fā)生后,處理器以向量方式查找 ISR_VECTADDR 地址。它的處理過程是:程序計數(shù)器將保存的下一條指令地址壓入棧中或保存到稱為鏈接存放器的CPU存放器中,然后處理器將 ISR_

13、VECTADDR 加載到程序計數(shù)器中。ISR返回時,CPU的棧指針存放器提供已保存在棧中的地址。保存PC的鏈接存放器是CPU存放器組中的一個。ISR的最后一條指令是RET中斷返回指令。2具有共同向量地址的一組中斷源硬件中斷源組可能具有相同的 ISR_VECTADDR。處理器硬件有兩種處理機制。一些處理器直接將 ISR_VECTADDR作為ISR地址取得ISR指令,然后放入PC中。另一些處理器那么將 ISR_VECTADDR 作為間接的ISR地址,并將該地址放入PC中。4.4.1 中斷向量3中斷向量表系統(tǒng)軟件設計者必須指定每個 ISR_VECTADDR 地址中存放的字節(jié)。中斷向量表可以協(xié)助每一個

14、內(nèi)部設備的多中斷源效勞。4.4.1 中斷向量多中斷源或源組情況下存儲器中的向量表4.4.2 根據(jù)可屏蔽和不可屏蔽的中斷分類可屏蔽中斷源允許屏蔽和翻開中斷效勞。每個設備中斷源或源組ISR的執(zhí)行都可以屏蔽或翻開。外部中斷請求也可以屏蔽,軟件中斷的執(zhí)行同樣也可以屏蔽。大局部中斷源都是可屏蔽的。只有小局部特定的中斷源不能屏蔽。一些特定的中斷在處理器復位的幾個時鐘周期內(nèi)可以聲明為不可屏蔽的,盡管它們屬于可屏蔽中斷源。4.4.2 根據(jù)可屏蔽和不可屏蔽的中斷分類系統(tǒng)中有以下三種類型的中斷源:1不可屏蔽的。這些中斷必須處理。2可屏蔽的:這些中斷可以被臨時禁止,使具有較高優(yōu)先級的ISR首先執(zhí)行而不被打斷。3一個

15、中斷源只有在復位后的幾個時鐘周期內(nèi)定義為不可屏蔽的才是不可屏蔽的。4.4.3 可屏蔽中斷源的啟動和禁用在設備中可以有中斷控制位??赡苡幸粋€EA翻開所有中斷位, 稱為一級位,它激活或者禁用整個中斷系統(tǒng)。當臨界段代碼中執(zhí)行了例程或ISR時,在臨界段的開始局部需要執(zhí)行DI禁用中斷指令,結(jié)尾局部需要執(zhí)行EI翻開中斷指令。DI指令將EA位復位,EI指令將EA位表示的一級位置位。在有多個設備時,可能由E0En-1來表示n個中斷源組。這些位稱為屏蔽位,也稱為二級位,它們用于翻開或禁用系統(tǒng)中特定的中斷源。通過執(zhí)行用戶軟件中的適當指令,寫一級或者二級使能位翻開或者屏蔽所有或者局部的可屏蔽中斷源。4.4.4 狀態(tài)

16、存放器或中斷掛起存放器對先前來自于一個中斷源的中斷的識別是通過以下方式之一進行的:1狀態(tài)存放器中的局部級標志位,該存放器可以為一個或多個中斷或者一組中斷保持一個或者多個狀態(tài)標志位。2中斷掛起存放器IPR中的處理器中斷效勞掛起標志,這個變量由中斷源置位硬件置位,并當隨后轉(zhuǎn)移到相應的ISR且開始相關(guān)的中斷源效勞時,由內(nèi)部硬件立即自動復位。4.4.4 狀態(tài)存放器或中斷掛起存放器有些處理器硬件提供了狀態(tài)存放器位和一些IPR位以供使用。IPR和狀態(tài)存放器有以下不同之處:狀態(tài)存放器是只讀的。1狀態(tài)存放器位是只讀的,并且在讀的過程中去除自動復位。IPR位或者由相應的ISR效勞去除自動復位,或者由復位的寫指令復位。2IPR位可以由寫指令置位,也可以由一個中斷的發(fā)生置位。狀態(tài)存放器位只能由中斷源硬件復位。3IPR位可以與來自一組中斷源的掛起中斷相關(guān),但是標識標志與多個中斷中的每一個中斷源是別離的。4.5 多中斷4.5.1 多中斷調(diào)用當有多個中斷源時,每一個中斷源或者中斷源組發(fā)生的中斷都可以從狀態(tài)存放器和IPR中的一個或者多個位中識別。在較高優(yōu)先級中斷源接連激活的情況下,中斷調(diào)用應該是嵌套的。從任何一個ISR中斷返回后,進入到較低優(yōu)先級的ISR。4.5.1 多

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論