設(shè)備驅(qū)動(dòng)程序和中斷效勞機(jī)制_第1頁(yè)
設(shè)備驅(qū)動(dòng)程序和中斷效勞機(jī)制_第2頁(yè)
設(shè)備驅(qū)動(dòng)程序和中斷效勞機(jī)制_第3頁(yè)
設(shè)備驅(qū)動(dòng)程序和中斷效勞機(jī)制_第4頁(yè)
設(shè)備驅(qū)動(dòng)程序和中斷效勞機(jī)制_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、設(shè)備驅(qū)動(dòng)程序和中斷效勞機(jī)制4.1 不使用中斷效勞機(jī)制的程序查詢式 I/O 忙/等待方法先看一個(gè)例子:假設(shè)端口A連接到PC中的一個(gè)以太網(wǎng)接口卡,端口B是PC的調(diào)制解調(diào)器輸入,它將字符串發(fā)送到 線上。假設(shè) In_A_Out_B 是從端口A接收輸入字符并向端口B發(fā)送字符的例程。在不產(chǎn)生中斷和不使用中斷效勞處理機(jī)制的情況下, In_A_Out_B 例程調(diào)度 ae步驟,循環(huán)執(zhí)行函數(shù) iv, 以確保調(diào)制解調(diào)器端口A能夠從卡上連續(xù)獲得字符。4.1 不使用中斷效勞機(jī)制的程序查詢式 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:對(duì)信息進(jìn)行編碼,并返回到步驟a的指令接著調(diào)用函數(shù)v。步驟e:函數(shù) v:將編碼后的信息傳送給端口B,并返回到步驟a的最后一條指令,然后重新執(zhí)行步驟a。4.1 不使用中斷效勞機(jī)制的程序查詢式 I/O 忙/等待方法例如網(wǎng)絡(luò)程序 In_A_Out_B 中步驟 ae 對(duì)5個(gè)函數(shù)的調(diào)用。4.1 不使用中斷效勞機(jī)制的程序查詢式 I/O 忙/等待方法忙/等待

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論