設備驅動程序及中斷服務機制_第1頁
設備驅動程序及中斷服務機制_第2頁
設備驅動程序及中斷服務機制_第3頁
設備驅動程序及中斷服務機制_第4頁
設備驅動程序及中斷服務機制_第5頁
已閱讀5頁,還剩29頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第4章設備驅動程序和中斷服務機制24.1 不使用中斷服務機制的程序查詢式 I/O 忙/等待方法先看一個例子:假設端口A連接到PC中的一個以太網接口卡,端口B是PC的調制解調器輸入,它將字符串發送到電話線上。假設 In_A_Out_B 是從端口A接收輸入字符并向端口B發送字符的例程。在不產生中斷和不使用中斷服務(處理)機制的情況下, In_A_Out_B 例程調度 ae步驟,循環執行函數 iv, 以確保調制解調器端口A能夠從卡上連續獲得字符。34.1 不使用中斷服務機制的程序查詢式 I/O 忙/等待方法In_A_Out_B 例程:(1)調用函數 i(2)調用函數 ii(3)調用函數 iii(4)

2、調用函數 iv(5)調用函數 v(6)循環回到第一步調用步驟:步驟 a:函數 i:檢查端口A是否有字符。如果沒有,則等待。步驟 b:函數 ii:讀取端口A的數據并返回到步驟a的指令接著調用函數iii。步驟 c:函數 iii:解密信息,并返回到步驟a的指令接著調用函數iv。步驟 d:函數 iv:對信息進行編碼,并返回到步驟a的指令接著調用函數v。步驟e:函數 v:將編碼后的信息傳送給端口B,并返回到步驟a的最后一條指令,然后重新執行步驟a。44.1 不使用中斷服務機制的程序查詢式 I/O 忙/等待方法示例網絡程序 In_A_Out_B 中步驟 ae 對5個函數的調用。54.1 不使用中斷服務機制

3、的程序查詢式 I/O 忙/等待方法忙/等待的程序查詢方式存在以下問題:(1)程序必須在一個很短的時間內切換 In_A_Out_B 中步驟 ae 循環的執行。(2)等待周期可能很長,造成處理器時間的浪費。(3)如果系統中存在其他端口和設備,程序查詢方法存在的問題是如何輪詢每個端口和設備,并保證及時切換到 In_A_Out_B 的步驟 a, 以及及時切換到各個端口和設備的輪詢,在特定時間間隔內執行其他端口和設備有關函數的服務例程。(4)程序和函數是處理器及設備相關的, 所有的系統函數必須同時執行,并且執行時間完全取決于軟件執行所花的時間。64.2 ISR的概念中斷:中斷指的是一個事件,該事件請求處

4、理器關注并對硬件或軟件事件作出某些處理。硬中斷:設備或端口就緒時或完成指定動作時產生的中斷。軟中斷、陷阱或異常: 檢測到軟件運行時異常條件,處理器硬件或者軟件指令產生的中斷。作為對中斷的響應, 當前執行的例程或程序被打斷,轉而執行一個ISR。當ISR為設備提供服務時通常稱為設備驅動程序ISR,當ISR為軟件中斷提供服務時通常稱為異常、信號或陷阱處理程序。74.2.1 端口或設備中斷及ISR示例假設一個字符輸入到調制解調器會產生一個端口A中斷,并將狀態寄存器中的狀態位置位。發生中斷后,服務例程 ISR_PortA_Charater 開始運行,以保證調制解調器端口A不會錯過讀取該字符。 ISR_P

5、ortA_Charater 執行步驟f,代替前面例子中 In_A_Out_B 例程的步驟a函數i和步驟b函數ii。它將讀取的字符放入存儲器緩沖區。步驟c、d和e是獨立的,它們現在作為函數調用 Out_B 中的一部分。84.2.1 端口或設備中斷及ISR示例ISR_PortA_Charater 執行過程:(1)步驟f的函數vi:讀取端口A的字符。復位狀態位,使調制解調器為下一個字符輸入做好準備。將讀取的字符放入存儲器緩沖區。存儲器緩沖區是一組存儲器地址空間,其中的字節排成隊列等待后續處理。(2)從 ISR 返回。Out_B 例程執行過程:(1)步驟g:調用函數vi,對存儲器緩沖區中的信息字符進行

6、解密,然后返回到下一條指令,執行步驟h。(2)步驟h:調用函數vii,對消息字符進行編碼,然后返回到下一條指令,執行步驟k。(3)步驟k:調用函數viii,將經過編碼的字符發送到端口B。(4)從函數返回。94.2.1 端口或設備中斷及ISR示例端口A中斷時執行 ISR_PortA_Charater 的步驟f 和 Out_B 例程中的步驟 gk 的過程。 104.2.2 軟件中斷和ISR示例嵌入式軟件系統必須為應用程序提供的設備代碼包括:(1)配置初始化,(2)激活,(3)用于讀操作的驅動函數,(4)用于寫操作的驅動函數,(5)復位代碼。每個設備任務首先使用一個ISR完成設備驅動程序函數通過一個

7、軟件中斷指令(SWI)調用ISR。114.2.2 軟件中斷和ISR示例程序運行期間必須檢測遇到的錯誤條件或運行時異常條件。運算或通信期間,程序或者通過硬件或者通過運行一條SWI指令來檢測異常運行條件(稱為陷阱)。程序檢測到異常運行條件時的行為稱為“拋出”異常。中斷服務例程在捕捉到執行SWI拋出的異常時運行,因此,運行中斷服務例程稱為“捕獲”。124.2.2 軟件中斷和ISR示例(a)軟件中使用軟件中斷指令(SWI)調用中斷服務例程(ISR)拋出和捕獲運算期間遇到的異常運行條件;(b)使用SWI信號觸發另一個例程,程序任務或程序線程的運行。134.2.2 軟件中斷和ISR示例ISR調用具有以下特

8、點:(1)ISR調用是由于中斷執行了一個事件而產生。事件可以發生在任何時刻,并且事件的發生是異步的。(2)ISR調用是在事件基礎上的轉移,它從當前指令序列轉移到另一個指令序列,并在返回之前一直執行轉移到的指令序列。(3)事件可能是設備或端口事件,也可能是硬件或程序檢測到的軟件運算異常條件。(4)系統中存在中斷服務機制,它負責從多個源調用ISR。(5)當前運行的例程執行完任何一條指令都可能發生到ISR的轉移。使用指令設置屏蔽位可以屏蔽ISR的執行,也可以用指令復位屏蔽位以取消屏蔽。(6)在中斷調用時,指令并是完全連續執行的。它們的執行情況決定于系統中的中斷機制。(7)ISR執行期間,可能發生多個

9、中斷調用要轉移到其他ISR的情況,這些ISR不需要像函數調用一樣嵌套,掛起的較高優先級的中斷在被中斷ISR結束后或者在其執行中都可以轉移。144.2.3 作為級中斷處理程序的中斷服務線程ISR可以分為兩部分執行。(1)一部分占用的服務例程執行時間短,可以稱為一級ISR。它運行ISR的關鍵部分,并執行一個信號函數,以使OS之后調度運行其余部分。它還可以通過一個函數發送消息給OS,使OS在ISR返回之后開始執行一個任務,該任務在中斷例程和信號函數執行期間處于等待狀態。(2)第二部分是服務例程中較長的部分,在第一部分發出信號后開始執行,稱為中斷服務線程(IST)或二級ISR。OS按優先級調度IST。

10、IST處理ISR中設備無關的部分。154.2.4 設備驅動程序系統中的每個設備都需要設備驅動程序例程。ISR與設備驅動程序函數有關。設備驅動程序是高級語言程序員使用的函數,它實現了與設備硬件交互、與設備進行數據通信、向設備發送控制命令,并運行讀取設備數據的代碼。程序員使用設備驅動程序的通用命令操作設備。這些通用命令由OS提供。用于設備操作的這些命令使用了一些通用函數。在不同的操作系統中設備驅動程序代碼不同。系統使用不同的OS時,同一設備可能具有不同的驅動程序代碼。164.2.4 設備驅動程序設備驅動程序使用SWI初始化中斷服務。設備根據設備服務的需要使用系統和IO總線。設備驅動程序可以看作是應

11、用程序和設備之間的軟件層中的函數。驅動程序負責翻譯程序中使用設備的通用函數,并向設備配置和控制器發送必要的命令。驅動程序使用了設備的控制、狀態和數據寄存器。通過初始化相應的ISR,可以對設備執行打開、配置、初始化、連接、讀、寫、關閉和斷開操作。許多設備的驅動程序是OS的一部分,例如打印機、觸摸屏、LCD顯示器、小鍵盤、鍵盤等。174.3 中斷源硬件中斷源可以是內部設備,也可以是外部的外圍設備,它們都會打斷當前執行的例程,轉移到相應的ISR。軟件中斷源涉及到:(1)處理器檢測到執行期間的非法操作碼運算錯誤;(2)執行SWI指令引起的處理器當前例程中斷。每個中斷源都需要暫時將控制權從當前執行例程轉

12、移到中斷源相應的ISR。184.3 中斷源常見中斷源194.3 中斷源其他特殊類型的中斷源:(1)與內部設備有關的硬件中斷(2)與外部設備相關的硬件中斷(3)與軟件錯誤相關的硬件中斷(4)與軟件指令相關的中斷源204.4 中斷服務(處理)機制每個系統都有中斷服務(處理)機制,用于中斷處理的機制是由OS提供的。214.4.1 中斷向量中斷向量是處理器以向量方式訪問的存儲器地址。中斷發生后,處理器將程序計數器轉移到中斷向量新地址。通過這個地址,執行相應的ISR為中斷提供服務。處理器以向量方式訪問的存儲器地址根據特定到處理器或微控制器來決定。向量尋址方式是由中斷處理機制決定的。224.4.1 中斷向

13、量以下是幾種不同的中斷處理機制:(1)處理器對 ISR_VECTADDR 向量尋址中斷發生后,處理器以向量方式查找 ISR_VECTADDR 地址。它的處理過程是:程序計數器將保存的下一條指令地址壓入棧中或保存到稱為鏈接寄存器的CPU寄存器中,然后處理器將 ISR_VECTADDR 加載到程序計數器中。ISR返回時,CPU的棧指針寄存器提供已保存在棧中的地址。保存PC的鏈接寄存器是CPU寄存器組中的一個。ISR的最后一條指令是RET(中斷返回)指令。23(2)具有共同向量地址的一組中斷源硬件中斷源組可能具有相同的 ISR_VECTADDR。處理器硬件有兩種處理機制。一些處理器直接將 ISR_V

14、ECTADDR作為ISR地址取得ISR指令,然后放入PC中。另一些處理器則將 ISR_VECTADDR 作為間接的ISR地址,并將該地址放入PC中。4.4.1 中斷向量24(3)中斷向量表系統軟件設計者必須指定每個 ISR_VECTADDR 地址中存放的字節。中斷向量表可以協助每一個內部設備的多中斷源服務。4.4.1 中斷向量多中斷源或源組情況下存儲器中的向量表254.4.2 根據可屏蔽和不可屏蔽的中斷分類可屏蔽中斷源允許屏蔽和打開中斷服務。每個設備中斷源或源組ISR的執行都可以屏蔽或打開。外部中斷請求也可以屏蔽,軟件中斷的執行同樣也可以屏蔽。大部分中斷源都是可屏蔽的。只有小部分特定的中斷源不

15、能屏蔽。一些特定的中斷在處理器復位的幾個時鐘周期內可以聲明為不可屏蔽的,盡管它們屬于可屏蔽中斷源。264.4.2 根據可屏蔽和不可屏蔽的中斷分類系統中有以下三種類型的中斷源:(1)不可屏蔽的。這些中斷必須處理。(2)可屏蔽的:這些中斷可以被臨時禁止,使具有較高優先級的ISR首先執行而不被打斷。(3)一個中斷源只有在復位后的幾個時鐘周期內定義為不可屏蔽的才是不可屏蔽的。274.4.3 可屏蔽中斷源的啟動和禁用在設備中可以有中斷控制位??赡苡幸粋€EA(打開所有中斷)位, 稱為一級位,它激活或者禁用整個中斷系統。當臨界段代碼中執行了例程或ISR時,在臨界段的開始部分需要執行DI(禁用中斷)指令,結尾

16、部分需要執行EI(打開中斷)指令。DI指令將EA位復位,EI指令將EA位表示的一級位置位。在有多個設備時,可能由E0En-1來表示n個中斷源組。這些位稱為屏蔽位,也稱為二級位,它們用于打開或禁用系統中特定的中斷源。通過執行用戶軟件中的適當指令,寫一級或者二級使能位打開(或者屏蔽)所有或者部分的可屏蔽中斷源。284.4.4 狀態寄存器或中斷掛起寄存器對先前來自于一個中斷源的中斷的識別是通過下列方式之一進行的:(1)狀態寄存器中的局部級標志位,該寄存器可以為一個或多個中斷或者一組中斷保持一個或者多個狀態標志位。(2)中斷掛起寄存器(IPR)中的處理器中斷服務掛起標志,這個變量由中斷源置位(硬件置位

17、),并當隨后轉移到相應的ISR且開始相關的中斷源服務時,由內部硬件立即自動復位。294.4.4 狀態寄存器或中斷掛起寄存器有些處理器硬件提供了狀態寄存器位和一些IPR位以供使用。IPR和狀態寄存器有以下不同之處:狀態寄存器是只讀的。(1)狀態寄存器位是只讀的,并且在讀的過程中清除(自動復位)。IPR位或者由相應的ISR服務清除(自動復位),或者由復位的寫指令復位。(2)IPR位可以由寫指令置位,也可以由一個中斷的發生置位。狀態寄存器位只能由中斷源硬件復位。(3)IPR位可以與來自一組中斷源的掛起中斷相關,但是標識標志與多個中斷中的每一個中斷源是分離的。304.5 多中斷314.5.1 多中斷調用當有多個中斷源時,每一個中斷源(或者中斷源組)發生的中斷都可以從狀態寄存器和IPR中的一個或者多個位中識別。在較高優先級中斷源接連激活的情況下,中斷調用應該是嵌套的。從任何一個ISR中斷返回后,進入到較低優先級的ISR。324.5.1 多中斷調用多中斷情況下的兩種中斷服務機制:(1)某些處理器不支持執行過程中向高優先級中斷的轉移。在這種處理器中,假定了所有中斷或比當前運行例程優先級高的中斷在當前例程執行結束前都被屏蔽。僅在當前中斷服務例程結束之后才轉移到高優先級中斷。33(2)某些處理器允許執行過程中向高優先級中斷的轉移。

溫馨提示

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

評論

0/150

提交評論