《微機(jī)原理與嵌入式系統(tǒng)基礎(chǔ)》課件第6章_第1頁(yè)
《微機(jī)原理與嵌入式系統(tǒng)基礎(chǔ)》課件第6章_第2頁(yè)
《微機(jī)原理與嵌入式系統(tǒng)基礎(chǔ)》課件第6章_第3頁(yè)
《微機(jī)原理與嵌入式系統(tǒng)基礎(chǔ)》課件第6章_第4頁(yè)
《微機(jī)原理與嵌入式系統(tǒng)基礎(chǔ)》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩129頁(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)介

第6章輸入/輸出與中斷技術(shù)6.1計(jì)算機(jī)接口概述

6.2輸入/輸出接口電路6.3CPU與外設(shè)的數(shù)據(jù)傳輸控制方式6.4ARM中的GPIO6.5中斷技術(shù)6.6ARM中斷系統(tǒng)基礎(chǔ)本章小結(jié)習(xí)題6.1計(jì)算機(jī)接口概述

馮·諾伊曼體系結(jié)構(gòu)的計(jì)算機(jī)硬件由控制器、運(yùn)算器、

存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備等5部分組成。運(yùn)算器和控制器通常集成在一片稱之為中央處理器(CPU)的IC上。CPU和存儲(chǔ)器構(gòu)成了計(jì)算機(jī)的核心部分,稱之為主機(jī)。將計(jì)算機(jī)中處理器和存儲(chǔ)器之外的其他組成部分統(tǒng)稱為外設(shè)。計(jì)算機(jī)是一個(gè)高速的數(shù)據(jù)自動(dòng)化處理裝置。計(jì)算機(jī)工作時(shí),首先需要將數(shù)據(jù)的處理方法(算法)以及待處理的數(shù)據(jù)輸入到計(jì)算機(jī)的內(nèi)存中,處理器自動(dòng)高速地執(zhí)行預(yù)輸入到存儲(chǔ)器中的程序,完成預(yù)定的計(jì)算任務(wù)。用計(jì)算機(jī)語(yǔ)言描述的算法和數(shù)據(jù)合稱為程序。計(jì)算機(jī)運(yùn)行過(guò)程中,往往還需要輸入新的數(shù)據(jù),計(jì)算機(jī)處理好的數(shù)據(jù)也需要送出來(lái)用于顯示、打印、傳輸或控制等。主機(jī)與外設(shè)交換信息稱為輸入/輸出(I/O),其中將外界信息傳送到主機(jī)的過(guò)程稱為輸入(Input),而將主機(jī)中的信息傳送到外設(shè)的過(guò)程稱為輸

出(Output)。微處理器連接、訪問(wèn)存儲(chǔ)器時(shí),由于雙方都是半導(dǎo)體器件,電路的電特性一致,一般也不需要應(yīng)答,故而連接、訪問(wèn)控制相對(duì)來(lái)說(shuō)比較簡(jiǎn)單。然而對(duì)于品種繁多的外設(shè),它們的執(zhí)行部件有些是機(jī)械或機(jī)電的(比如打印機(jī)、電磁閥),有些是光電的(比如鼠標(biāo)、光驅(qū)等),大部分外設(shè)的工作頻率低于甚至大大低于微處理器的工作頻率,并且彼此之間的數(shù)據(jù)格式、性能、信號(hào)形式等差別也很大,因此,微處理器與大部分外設(shè)之間連接時(shí),主機(jī)與外設(shè)間信號(hào)接口要進(jìn)行匹配。另外,有些外設(shè)隨機(jī)地要求處理器提供服務(wù),微處理器和外設(shè)之間往往還需要聯(lián)絡(luò)、握手等信號(hào),雙方協(xié)商共同完成I/O操作。這就需要相應(yīng)的電路用于完成主機(jī)與外設(shè)的橋接與控制,這就是I/O接口電路。

I/O接口電路主要用于解決下列問(wèn)題:

(1)輸出數(shù)據(jù)的鎖存緩沖,協(xié)調(diào)主機(jī)與外設(shè)之間數(shù)據(jù)傳輸?shù)乃俣炔町悺?/p>

(2)輸入數(shù)據(jù)的三態(tài)隔離,確保非I/O傳送期間處理器總線不被外設(shè)占用。

(3)信號(hào)形式匹配,將諸如光電、壓力、溫度等多種形式的物理信號(hào)統(tǒng)一轉(zhuǎn)換成處理器可直接處理的數(shù)字電路信號(hào)或

反之。

(4)信號(hào)格式轉(zhuǎn)換,將主機(jī)系統(tǒng)中的并行數(shù)據(jù)轉(zhuǎn)換成外設(shè)協(xié)議數(shù)據(jù)格式或反之。

(5)產(chǎn)生和提供聯(lián)絡(luò)、控制等信號(hào),保證處理器與外設(shè)之間數(shù)據(jù)傳輸?shù)挠行Ш涂煽俊?/p>

6.2輸入/輸出接口電路

6.2.1輸入/輸出接口電路的基本功能與端口分類

從一般意義上來(lái)說(shuō),“接口”具有物理連接的含義,如打印機(jī)接口、USB接口、串行接口等分別用于主機(jī)與其他外設(shè)的連接。從連接結(jié)構(gòu)上看,接口電路一端連接著主機(jī)的系統(tǒng)總線,另一端則連接著物理設(shè)備。物理外設(shè)通過(guò)接口電路接入到計(jì)算機(jī)。主機(jī)通過(guò)對(duì)接口電路的訪問(wèn),實(shí)現(xiàn)對(duì)外設(shè)的控制。由于從CPU角度看到的外設(shè)實(shí)質(zhì)上是外設(shè)的接口電路,因此在計(jì)算機(jī)中就將外設(shè)接口簡(jiǎn)稱為外設(shè)。它可以理解為物理外設(shè)的抽象,并不一定是具體的物理外設(shè)裝置。在工作原理層上,主機(jī)與外設(shè)接口之間主要通過(guò)以下三類信息的交互,來(lái)完成數(shù)據(jù)的控制傳送:

(1)外設(shè)的狀態(tài)信息(輸入):編碼方式的二進(jìn)制數(shù)據(jù),用于標(biāo)示設(shè)備的狀態(tài)情況。主機(jī)需要了解外設(shè)的當(dāng)前狀態(tài),來(lái)決定是否可以進(jìn)行數(shù)據(jù)傳送。

(2)數(shù)據(jù)信息(輸入/輸出):要傳送的二進(jìn)制目標(biāo)數(shù)據(jù)。

(3)控制信息(輸出):編碼方式的二進(jìn)制數(shù)據(jù),控制外設(shè)的工作方式與具體操作等。

I/O接口電路中包含一組寄存器,分別用于存儲(chǔ)這三類信息,稱這些寄存器為端口寄存器或I/O端口(I/OPort),簡(jiǎn)稱為端口。實(shí)際上,在計(jì)算機(jī)中所有的外設(shè)都可以抽象成為一組端口寄存器,CPU通過(guò)對(duì)各個(gè)端口寄存器的訪問(wèn)實(shí)現(xiàn)對(duì)外設(shè)的數(shù)據(jù)傳輸。對(duì)應(yīng)于上述三種信息,外設(shè)接口電路中的端口寄存器也分為了三類:

(1)數(shù)據(jù)端口(寄存器):CPU和外設(shè)之間用來(lái)暫存?zhèn)魉蛿?shù)據(jù)的寄存器(如鍵盤輸入數(shù)據(jù)、模/數(shù)轉(zhuǎn)換數(shù)據(jù)、待打印的字符等)。在輸入/輸出過(guò)程中,對(duì)數(shù)據(jù)起鎖存和緩沖的作用。

(2)狀態(tài)端口(寄存器):用來(lái)存放外設(shè)或者接口部件本身狀態(tài)的寄存器。

(3)控制端口(寄存器):用來(lái)存放CPU發(fā)往外設(shè)的控制命令的寄存器。

圖6-1所示為I/O接口的典型結(jié)構(gòu)。圖6-1I/O接口的典型結(jié)構(gòu)6.2.2I/O端口的編址

在計(jì)算機(jī)硬件系統(tǒng)中可以含有多個(gè)I/O接口,每個(gè)I/O接口中又可以含有多個(gè)I/O端口。為了能指定地訪問(wèn)各個(gè)I/O端口,這些端口寄存器在計(jì)算機(jī)系統(tǒng)中像存儲(chǔ)器單元一樣被編址,稱之為端口地址,處理器通過(guò)端口地址可對(duì)各個(gè)端口尋址訪問(wèn)。

計(jì)算機(jī)系統(tǒng)中有兩種I/O端口編址方式:

(1)統(tǒng)一編址方式:I/O端口與內(nèi)存單元統(tǒng)一編址在一個(gè)地址空間,只是分布在不同的地址空間區(qū)域。這種編址模式下,處理器沒(méi)有專用的I/O指令,使用內(nèi)存訪問(wèn)指令訪問(wèn)I/O端口寄存器,CPU也沒(méi)有專用的I/O訪問(wèn)控制管腳。

(2)獨(dú)立編址方式:I/O端口與內(nèi)存單元分別編址在I/O地址空間和內(nèi)存地址空間。這種編址模式下,處理器有專用的I/O指令,使用專用的I/O指令訪問(wèn)I/O端口寄存器,使用存儲(chǔ)器訪問(wèn)指令訪問(wèn)存儲(chǔ)器各單元。CPU有專用的I/O訪問(wèn)控制管腳。需要注意的是,接口和端口是兩個(gè)不同的概念。若干個(gè)端口加上相應(yīng)的控制電路才構(gòu)成接口,每個(gè)端口都有對(duì)應(yīng)的確切地址,而接口對(duì)應(yīng)的可能是一個(gè)地址空間。端口的概念著重于I/O驅(qū)動(dòng)原理描述,接口的概念則較偏重連接性。輸入/輸出操作總是對(duì)端口而言,CPU對(duì)外設(shè)的輸入/輸出操作實(shí)際上就是對(duì)I/O接口中各端口的讀/寫操作。數(shù)據(jù)端口一般是雙向的,數(shù)據(jù)是輸入還是輸出,取決于CPU對(duì)該端口地址進(jìn)行操作時(shí)發(fā)往接口電路的是讀還是寫控制信號(hào)。由于狀態(tài)端口只做輸入操作,控制端口只做輸出操作,因此,有時(shí)為了節(jié)省系統(tǒng)地址空間,可以在設(shè)計(jì)接口時(shí),讓這兩個(gè)端口共用一個(gè)端口地址,再用讀/寫信號(hào)來(lái)分別選擇訪問(wèn)。6.3CPU與外設(shè)的數(shù)據(jù)傳輸控制方式

外設(shè)的多樣性使外設(shè)的屬性差異極大。外設(shè)接入到計(jì)算機(jī)系統(tǒng)中時(shí),處理器與外設(shè)之間的數(shù)據(jù)傳送方式主要有無(wú)條件數(shù)據(jù)訪問(wèn)方式、狀態(tài)查詢數(shù)據(jù)訪問(wèn)方式、中斷數(shù)據(jù)訪問(wèn)方式和直接存儲(chǔ)器訪問(wèn)(DMA)方式等,下面分別介紹。6.3.1無(wú)條件數(shù)據(jù)訪問(wèn)方式

有一些外設(shè),處理器在進(jìn)行訪問(wèn)時(shí)不必關(guān)心其狀態(tài),這些設(shè)備永遠(yuǎn)處于“準(zhǔn)備好”的狀態(tài),可隨時(shí)訪問(wèn),如狀態(tài)開(kāi)關(guān)(按鍵)、繼電器、數(shù)碼管、發(fā)光二極管等。CPU訪問(wèn)這類設(shè)備時(shí),輸入設(shè)備總是隨時(shí)準(zhǔn)備好向CPU提供數(shù)據(jù),而輸出設(shè)備也總是隨時(shí)準(zhǔn)備好接收CPU送來(lái)的數(shù)據(jù)。此類外設(shè)稱為無(wú)條件外設(shè)。CPU對(duì)此類外設(shè)進(jìn)行輸入/輸出操作時(shí)無(wú)需考慮外設(shè)的狀態(tài),故此類外設(shè)的訪問(wèn)方式也稱為無(wú)條件傳送方式。這類I/O設(shè)備的訪問(wèn)控制最簡(jiǎn)單,使用指令直接讀/寫數(shù)據(jù)端口即可。采用無(wú)條件傳送方式的接口電路很簡(jiǎn)單。如無(wú)條件輸入設(shè)備的計(jì)算機(jī)接入,考慮到外設(shè)數(shù)據(jù)保持時(shí)間相對(duì)于CPU的處理時(shí)間要長(zhǎng)得多,輸入數(shù)據(jù)不能影響系統(tǒng)總線的正常使用,因而外設(shè)數(shù)據(jù)要經(jīng)過(guò)三態(tài)緩沖器和CPU數(shù)據(jù)總線相連,如圖6-2(a)所示。外設(shè)的數(shù)據(jù)總是準(zhǔn)備好的,隨時(shí)可通過(guò)三態(tài)緩沖器上傳到系統(tǒng)總線。當(dāng)CPU執(zhí)行該外設(shè)輸入的指令(即讀I/O地址指定的數(shù)據(jù)端口)時(shí),讀信號(hào)(RD)和地址數(shù)據(jù)(A[31:0])運(yùn)算結(jié)果信號(hào)作為三態(tài)門緩沖器的使能信號(hào),三態(tài)緩沖器被選通,物理外設(shè)中早已準(zhǔn)備好的輸入數(shù)據(jù)加載到數(shù)據(jù)總線送達(dá)CPU。三態(tài)緩沖器未被選通時(shí),外設(shè)數(shù)據(jù)被高阻隔離。圖6-2無(wú)條件數(shù)據(jù)訪問(wèn)接口電路對(duì)于無(wú)條件輸出外設(shè),由于系統(tǒng)總線速度很快,而物理外設(shè)的速度比較慢,這就要求CPU送出的數(shù)據(jù)在接口電路的輸出端保持,因而一般需要一個(gè)鎖存器,如圖6-2(b)所示。CPU對(duì)端口地址指定外設(shè)執(zhí)行輸出指令時(shí),寫信號(hào)(WR)和地址數(shù)據(jù)(A[31:0])運(yùn)算結(jié)果信號(hào)作為數(shù)據(jù)鎖存器的鎖存信號(hào)。于是相應(yīng)的數(shù)據(jù)鎖存器被選中,CPU輸出的數(shù)據(jù)經(jīng)過(guò)數(shù)據(jù)總線送入輸出數(shù)據(jù)鎖存器中,輸出鎖存器保持這個(gè)數(shù)據(jù),供外設(shè)使用,直至下次新數(shù)據(jù)寫入。6.3.2狀態(tài)查詢數(shù)據(jù)訪問(wèn)方式

有一些外設(shè),處理器在進(jìn)行訪問(wèn)時(shí)還需要關(guān)心其狀態(tài),只有狀態(tài)許可時(shí)方可對(duì)外設(shè)進(jìn)行訪問(wèn)。例如,對(duì)AD轉(zhuǎn)換器的訪問(wèn),只有模/數(shù)轉(zhuǎn)換結(jié)束后,轉(zhuǎn)換的結(jié)果才允許處理器取用。再如,使用串口外設(shè)進(jìn)行數(shù)據(jù)通信時(shí),只有串口發(fā)送緩沖區(qū)有空位置了,才允許CPU向其寫入發(fā)送數(shù)據(jù);只有接收緩沖區(qū)不空(有接收數(shù)據(jù))時(shí),方可從中讀取串口接收到的數(shù)據(jù)等。這種需要滿足一定條件進(jìn)行數(shù)據(jù)訪問(wèn)的外設(shè)稱為條件訪問(wèn)外設(shè)。CPU對(duì)此類外設(shè)進(jìn)行輸入/輸出操作時(shí)需要考慮外設(shè)的狀態(tài),故此類外設(shè)的訪問(wèn)方式也稱為條件傳送方式。計(jì)算機(jī)中大多數(shù)外設(shè)都是條件訪問(wèn)方式。通常有程序查詢外設(shè)狀態(tài)方式(簡(jiǎn)稱狀態(tài)查詢方式或程序查詢方式)和中斷控制方式兩種外設(shè)條件訪問(wèn)控制的手段應(yīng)用于條件外設(shè)的驅(qū)動(dòng)。

狀態(tài)查詢方式的原理:在執(zhí)行數(shù)據(jù)端口訪問(wèn)指令前,要先查詢?cè)撛O(shè)備的狀態(tài),當(dāng)設(shè)備處于“準(zhǔn)備好”狀態(tài)時(shí),CPU才執(zhí)行對(duì)設(shè)備數(shù)據(jù)端口的輸入/輸出指令,與外設(shè)交換信息。為此,接口電路中既要有數(shù)據(jù)端口,又要有狀態(tài)端口。狀態(tài)查詢方式I/O接口電路原理如圖6-3所示,其I/O控制流程如圖6-4所示。圖6-3狀態(tài)查詢方式I/O接口電路原理圖6-4狀態(tài)查詢方式I/O控制流程采用查詢方式完成一次數(shù)據(jù)傳送的過(guò)程如下:

(1)?CPU從狀態(tài)端口中讀取狀態(tài)字。

(2)?CPU檢測(cè)相應(yīng)的狀態(tài)位是否滿足數(shù)據(jù)訪問(wèn)的就緒條件。

(3)如果不滿足,則重復(fù)步驟(1)和(2);若外設(shè)已處于就緒狀態(tài),則訪問(wèn)數(shù)據(jù)端口,完成數(shù)據(jù)收發(fā)。分析查詢方式I/O操作過(guò)程:傳送一批數(shù)據(jù)時(shí),由于外設(shè)的速度遠(yuǎn)慢于CPU的速度,因此,CPU將會(huì)在步驟(1)和(2)循環(huán)停等外設(shè)就緒,此時(shí)大量的CPU性能空消耗在了無(wú)效的查詢等待中,致使整個(gè)系統(tǒng)的性能受到嚴(yán)重的影響。于是工程師們有了一個(gè)新的想法:能否將CPU查詢外設(shè)狀態(tài)改進(jìn)為外設(shè)在就緒后主動(dòng)將狀態(tài)報(bào)告給CPU。即CPU在完成一次I/O訪問(wèn)后,繼續(xù)做其他的運(yùn)算處理,當(dāng)外設(shè)再次就緒時(shí)主動(dòng)通知CPU,CPU獲知此外設(shè)已就緒,則進(jìn)行一次數(shù)據(jù)訪問(wèn)。如此,CPU在外設(shè)數(shù)據(jù)輸入/輸出過(guò)程中也在并行地做其他的運(yùn)算處理工作,有效地利用了CPU的查詢等待時(shí)間,大大提高了計(jì)算機(jī)系統(tǒng)的整體性能。中斷方式是解決此問(wèn)題的有效方法。6.3.3中斷數(shù)據(jù)訪問(wèn)方式

中斷數(shù)據(jù)訪問(wèn)方式是指當(dāng)外設(shè)需要與CPU進(jìn)行信息交換時(shí),由外設(shè)主動(dòng)向CPU發(fā)出數(shù)據(jù)傳送請(qǐng)求信號(hào),CPU響應(yīng)此請(qǐng)求信號(hào)后,暫停正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行該外設(shè)的數(shù)據(jù)輸入/輸出操作程序,外設(shè)數(shù)據(jù)端口訪問(wèn)后,CPU再繼續(xù)執(zhí)行被暫停的程序。其接口電路原理如圖6-5所示。圖6-5中斷方式I/O接口電路原理查詢傳送方式是由CPU來(lái)查詢外設(shè)的狀態(tài),CPU處于主動(dòng)地位,外設(shè)處于被動(dòng)地位。中斷傳送方式則是由外設(shè)主動(dòng)向CPU發(fā)出請(qǐng)求,等候CPU處理;在沒(méi)有發(fā)出請(qǐng)求時(shí),CPU和外設(shè)都可以獨(dú)立進(jìn)行各自的工作。目前絕大多數(shù)的微處理器都具有中斷功能,可以實(shí)時(shí)高效地輸入/輸出訪問(wèn),提高全系統(tǒng)的性能。中斷技術(shù)已不局限于I/O處理,在其他許多方面也有重要的應(yīng)用,例如實(shí)時(shí)控制、故障處理等。有關(guān)中斷技術(shù)的具體內(nèi)容參見(jiàn)下節(jié)。

CPU訪問(wèn)外設(shè)數(shù)據(jù)端口如同訪問(wèn)存儲(chǔ)器單元一樣,速度很快,而物理外設(shè)對(duì)數(shù)據(jù)端口中數(shù)據(jù)的處理比較慢。例如,數(shù)據(jù)串行通信時(shí),處理器以核時(shí)鐘速度、并行數(shù)據(jù)方式向串口寫入待傳送數(shù)據(jù),而串口則要以約定的波特率逐比特將數(shù)據(jù)傳送出去。串口消費(fèi)數(shù)據(jù)的能力遠(yuǎn)遠(yuǎn)慢于CPU的數(shù)據(jù)傳輸能力。有的外設(shè)甚至是機(jī)械動(dòng)作,對(duì)數(shù)據(jù)的消費(fèi)就更慢了。比如針式打印機(jī),在將處理器傳送過(guò)來(lái)的數(shù)據(jù)進(jìn)行打印時(shí),其字符打印速度比處理器的數(shù)據(jù)傳送速度要慢幾個(gè)數(shù)量級(jí)。由此可見(jiàn),輸入/輸出速度的瓶頸表現(xiàn)于I/O接口電路,根源卻在物理外設(shè)。狀態(tài)查詢方式和中斷方式都是進(jìn)行有條件輸入/輸出控制的具體實(shí)現(xiàn)手段。中斷方式的輸入/輸出外設(shè)訪問(wèn),提高了CPU與物理外設(shè)的并行性,并由此提高了計(jì)算機(jī)系統(tǒng)的綜合性能,是目前最常用的輸入/輸出方式。6.3.4DMA方式數(shù)據(jù)訪問(wèn)傳輸

比起狀態(tài)查詢方式,中斷方式節(jié)省了CPU大量的用于查詢外設(shè)工作狀態(tài)的時(shí)間。在中斷方式下,CPU不再需要輪流對(duì)每個(gè)外設(shè)進(jìn)行查詢,一方面可以使得CPU與外設(shè)并行工作,另一方面,由于外設(shè)具有申請(qǐng)CPU的主動(dòng)權(quán),可以很好地滿足外設(shè)對(duì)CPU提出輸入/輸出服務(wù)要求的隨機(jī)性,即具備了實(shí)時(shí)性。但是,中斷方式仍然有諸多可改進(jìn)之處,以適應(yīng)一些特別的應(yīng)用。例如在訪問(wèn)高速硬盤數(shù)據(jù)或傳送動(dòng)態(tài)顯示數(shù)據(jù)時(shí),一般不再簡(jiǎn)單地使用中斷輸入/輸出方式。首先,在整個(gè)中斷處理過(guò)程中都需要CPU參與,即使不需要CPU再處理的數(shù)據(jù),如將某內(nèi)存區(qū)域數(shù)據(jù)保存到硬盤,也要經(jīng)過(guò)CPU。其次,在中斷方式下,CPU在兩個(gè)任務(wù)之間來(lái)回進(jìn)行切換的時(shí)候,需要進(jìn)行一些相應(yīng)的現(xiàn)場(chǎng)保護(hù)和現(xiàn)場(chǎng)恢復(fù)的操作,這些操作對(duì)于I/O設(shè)備數(shù)據(jù)傳輸本身來(lái)說(shuō)沒(méi)有實(shí)際的意義,只是為了CPU能分別處理多個(gè)任務(wù)而進(jìn)行的寄存器數(shù)據(jù)的保存和恢復(fù)(稱之為系統(tǒng)開(kāi)銷)。每傳送一個(gè)數(shù)據(jù)都產(chǎn)生一次中斷申請(qǐng),都需要重復(fù)進(jìn)行現(xiàn)場(chǎng)保存、現(xiàn)場(chǎng)恢復(fù)等過(guò)程。在需要進(jìn)行大量數(shù)據(jù)傳輸并且外設(shè)數(shù)據(jù)傳輸速度也比較高的情況下,中斷頻率也會(huì)隨之增高,系統(tǒng)開(kāi)銷大增,中斷控制方式的輸入/輸出不但不能提高效率,相反還會(huì)降低計(jì)算機(jī)的系統(tǒng)性能。再者,對(duì)于流水線處理器結(jié)構(gòu)的計(jì)算機(jī),中斷產(chǎn)生的程序轉(zhuǎn)移必然引起CPU指令流水線的清空與重建,這也會(huì)影響CPU對(duì)指令的執(zhí)行效率。

DMA(DirectMemoryAccess,直接存儲(chǔ)器訪問(wèn))方式基于這樣一個(gè)思路:用一個(gè)專用電路,其主要功能就是要與CPU協(xié)商獲得系統(tǒng)總線的控制權(quán),而后在高速外設(shè)和存儲(chǔ)器之間橋接建立一條直接數(shù)據(jù)傳輸?shù)呐R時(shí)通道,控制并完成數(shù)據(jù)塊在內(nèi)存與高速外設(shè)之間高速直接地傳輸,這個(gè)專用電路稱為DMA控制器(DirectMemoryAccessController,DMAC)。由于DMAC控制外圍設(shè)備與主存儲(chǔ)器之間傳送數(shù)據(jù)不需要執(zhí)行程序,數(shù)據(jù)轉(zhuǎn)儲(chǔ)過(guò)程中也不需要用到CPU,因此,也就不需要CPU做現(xiàn)場(chǎng)的保存與恢復(fù)工作,甚至存儲(chǔ)器地址增1和數(shù)據(jù)塊長(zhǎng)度計(jì)數(shù)器減1也由DMAC硬件實(shí)現(xiàn),外設(shè)與內(nèi)存間的數(shù)據(jù)直接通過(guò)總線傳送而不經(jīng)過(guò)CPU中轉(zhuǎn),從而使得DMA方式比中斷等其他方式的數(shù)據(jù)傳送速度大大提高。在DMA方式中,只有在DMAC初始化時(shí),需要CPU進(jìn)行一些編程,而整個(gè)數(shù)據(jù)的傳送過(guò)程不需要CPU的干預(yù),適合于大數(shù)據(jù)量的高速傳送應(yīng)用。CPU控制下的I/O設(shè)備到存儲(chǔ)器的數(shù)據(jù)傳送見(jiàn)圖6-6;DMAC控制下的I/O設(shè)備到存儲(chǔ)器的數(shù)據(jù)傳送見(jiàn)圖6-7,此時(shí),CPU要暫時(shí)讓出對(duì)系統(tǒng)總線的控制。

DMA方式適用于數(shù)據(jù)塊的高速傳送,其特點(diǎn)是:①外設(shè)對(duì)存儲(chǔ)器可直接訪問(wèn);②大批量數(shù)據(jù)可高速訪問(wèn)。DMA期間,CPU讓出總線控制權(quán),而處于“掛起”的暫停狀態(tài)。圖6-6CPU控制下的I/O數(shù)據(jù)傳輸通道圖6-7DMA方式的I/O數(shù)據(jù)傳輸通道

6.4ARM中的GPIO

6.4.1概述

GPIO(GeneralPurposeInput/Outputports,通用輸入/輸出端口)是ARM系列芯片中的基本資源,可以分別用作輸入管腳資源或輸出管腳資源,主要應(yīng)用于二值化數(shù)據(jù)(數(shù)字電路的0/1)的輸入和輸出,既可用于測(cè)取輸入GPIO管腳的高/低電平狀態(tài),亦可在輸出GPIO管腳上輸出高/低電平。例如用于開(kāi)關(guān)狀態(tài)值輸入、邏輯控制輸出等,圖6-8所示為GPIO分別用作按鍵開(kāi)關(guān)的輸入信道和發(fā)光二極管的輸出控制信道。GPIO主要解決了輸入數(shù)據(jù)的三態(tài)隔離、選通輸入和輸出數(shù)據(jù)的輸出鎖存緩沖。圖6-8ARM芯片GPIO管腳的輸入/輸出應(yīng)用設(shè)置為輸入屬性的GPIO在系統(tǒng)中用于將外部輸入裝置連接到系統(tǒng)(在圖6-8中是3個(gè)按鍵),對(duì)輸入的高低電平數(shù)據(jù)起著隔離的作用。在CPU讀取該GPIO端口數(shù)據(jù)時(shí),輸入的高低電平數(shù)據(jù)經(jīng)過(guò)該GPIO端口上到片內(nèi)總線再傳到CPU;CPU不讀取該GPIO端口數(shù)據(jù)時(shí),輸入的高低電平數(shù)據(jù)被該GPIO端口三態(tài)隔離,不會(huì)影響片內(nèi)總線的其他應(yīng)用。設(shè)置為輸出屬性的GPIO在系統(tǒng)中用于將外部輸出裝置連接到系統(tǒng)(在圖6-8中是3個(gè)LED),對(duì)輸出數(shù)據(jù)起著鎖存的作用。在CPU向該GPIO端口寫數(shù)據(jù)時(shí),輸出數(shù)據(jù)經(jīng)過(guò)片內(nèi)總線傳到該GPIO端口并被鎖存,供外設(shè)隨時(shí)使用;GPIO端口保持CPU本次寫入的數(shù)據(jù)直到寫入新數(shù)據(jù)。

LPC2000系列ARM的GPIO具有如下特性:

(1)在芯片復(fù)位后,所有GPIO口默認(rèn)為輸入狀態(tài)。

(2)以端口(32?bit)字為單位對(duì)GPIO端口進(jìn)行訪問(wèn)。

(3)可以獨(dú)立控制GPIO口每位的方向?qū)傩?輸入或輸出模式)。

(4)可以獨(dú)立設(shè)置GPIO口每位的輸出屬性,即輸出狀態(tài)(1/0)。

(5)對(duì)輸入屬性的GPIO位的輸出操作無(wú)效;讀輸出屬性的GPIO位,可得到該GPIO的當(dāng)前輸出狀態(tài)值。

為了適應(yīng)各種應(yīng)用場(chǎng)合的需要,不同系列的芯片具有不同數(shù)量的GPIO,如LPC2132器件GPIO資源的具體描述見(jiàn)表7-2。6.4.2GPIO原理及端口寄存器說(shuō)明

對(duì)于編程者而言,計(jì)算機(jī)中的各種資源都被抽象成了寄存器組,同樣LPC2000系列芯片中的每個(gè)GPIO組件可以抽象為5個(gè)32位的寄存器,分別是PINSELx、IOxDIR、IOxSET、IOxCLR和IOxPIN,其中小寫的x可以是0、1、2等,分別對(duì)應(yīng)于不同的GPIO端口,不同的ARM器件型號(hào)有不同數(shù)量的GPIO端口,x值可能不一樣。各寄存器的功能說(shuō)明詳見(jiàn)表6-1。CPU通過(guò)片內(nèi)總線可以訪問(wèn)這些端口,并且通過(guò)訪問(wèn)這些端口設(shè)置管腳功能和GPIO輸入/輸出屬性,實(shí)現(xiàn)數(shù)據(jù)的GPIO輸入/輸出等功能。

(1)?PINSELx:該寄存器每2?bit控制一個(gè)多路選擇開(kāi)關(guān)(MUX1),通過(guò)對(duì)其編碼可選擇管腳的功能為GPIO功能或其他功能,默認(rèn)值選擇管腳為GPIO功能。關(guān)于該部分詳見(jiàn)7.3節(jié)。只有通過(guò)PINSELx選擇對(duì)應(yīng)管腳為GPIO時(shí),IOxDIR、IOxSET、IOxCLR和IOxPIN等端口寄存器才有意義。

(2)?IOxDIR:該寄存器每1?bit控制一個(gè)多路選擇開(kāi)關(guān)(MUX2),通過(guò)對(duì)其按bit編碼,可選擇對(duì)應(yīng)管腳的GPIO輸入/輸出屬性:“0”—輸入或“1”—輸出。

(3)?IOxSET、IOxCLR:該寄存器每1?bit控制一個(gè)多路選擇開(kāi)關(guān)(MUX3)。對(duì)IOxSET寄存器按bit寫1時(shí),對(duì)應(yīng)的MUX3選擇輸出高電平1;對(duì)IOxSET寄存器寫0時(shí),不對(duì)MUX3產(chǎn)生影響。對(duì)IOxCLR寄存器按bit寫1時(shí),對(duì)應(yīng)的MUX3選擇輸出低電平0;對(duì)IOxCLR寄存器寫0時(shí),不對(duì)MUX3產(chǎn)生影響。

(4)?IOxPIN:該寄存器每1?bit隨時(shí)反映對(duì)應(yīng)管腳的狀態(tài),與GPIO輸入/輸出屬性無(wú)關(guān)。但測(cè)取管腳狀態(tài)時(shí),一般會(huì)先設(shè)置GPIO為輸入屬性以免輸出干擾。特別提示:即使某GPIO管腳輸出高電平,也未必能從該管腳上讀回1,管腳的狀態(tài)和外部具體電路相關(guān),例如管腳直接連接一個(gè)LED時(shí),輸出1,LED點(diǎn)亮,但由于二極管的鉗位作用,讀回的管腳狀態(tài)還可能是0。

GPIO的工作原理參見(jiàn)圖6-9。圖6-9GPIO的工作原理

GPIO的應(yīng)用方法及相關(guān)的寄存器編程可參見(jiàn)6.4.3小節(jié)。

注意:

(1)為了適合各種應(yīng)用場(chǎng)合的需要,LPC2000系列芯片有多種型號(hào)。不同型號(hào)的器件具有不同的片內(nèi)資源和不同數(shù)量的管腳,其GPIO資源差別也較大,具體資源情況可參見(jiàn)相應(yīng)的芯片數(shù)據(jù)手冊(cè),在此僅通過(guò)表6-2簡(jiǎn)介了幾種典型芯片的情況。

(2)不同型號(hào)芯片的GPIO資源不同,片內(nèi)相應(yīng)的寄存器數(shù)量也不同。前面各寄存器描述中的小寫x用于具體指定端口號(hào)。例如,在編程P0端口GPIO輸入/輸出屬性時(shí),IOxDIR要寫成IO0DIR,其他寄存器依此類推。

(3)這些寄存器都是32位的,并用寄存器位號(hào)對(duì)應(yīng)于端口管腳號(hào)。例如,IO0DIR[3:2]2

bit就對(duì)應(yīng)于設(shè)置P0[3:2](即P0.3、P0.2)兩管腳的輸入/輸出屬性,其他寄存器依此類推。

(4)

ARM寄存器只能整體訪問(wèn),不支持位訪問(wèn)(僅訪問(wèn)其中的某一位)操作。那么在需要對(duì)其中某一比特訪問(wèn)時(shí),應(yīng)使用“讀—修改—寫”操作序列來(lái)完成。例如,欲將P0.3管腳設(shè)置為輸出屬性時(shí),應(yīng)使用語(yǔ)句2:

IO0DIR=0x01<<3;

//語(yǔ)句1,會(huì)影響其他管腳的屬性,不建議使用

IO0DIR=IO0DIR|(0x01<<3);

//語(yǔ)句2,安全的操作方式,建議使用的方式6.4.3GPIO應(yīng)用舉例

圖6-10所示為某一GPIO應(yīng)用示例,兩個(gè)按鍵K1、K2分別用于控制發(fā)光二極管LED和蜂鳴器BEEP,當(dāng)K1鍵按下時(shí)LED點(diǎn)亮,K2鍵按下時(shí)則BEEP鳴響,反之熄滅、靜音。在設(shè)計(jì)中的GPIO資源分配如表6-3所示。圖6-10GPIO應(yīng)用示例完成預(yù)約功能的程序首先設(shè)置相應(yīng)端口的I/O屬性,對(duì)輸出端口輸出初始狀態(tài),而后周期掃描輸入端口,分析處理輸入、控制輸出。代碼清單如下:程序在對(duì)IOxDIR寄存器操作時(shí),使用了“讀—修改—寫”方式,為的是不影響其他位的I/O屬性。而對(duì)IOxSET、IOxCLR寄存器操作時(shí),直接對(duì)其進(jìn)行了賦值,也不會(huì)影響其他位的輸出情況,這是因?yàn)檫@兩個(gè)寄存器都是只有寫1的對(duì)應(yīng)位有動(dòng)作,寫0的對(duì)應(yīng)位無(wú)效,對(duì)輸出不會(huì)產(chǎn)生影響。因此,對(duì)IOxSET、IOxCLR寄存器即使是按字寫入,也只對(duì)為1的對(duì)應(yīng)位管腳置1或清0操作。6.5中斷技術(shù)

6.5.1基本概念

在日常生活中,您或許遇到過(guò)這樣的情況:您正在讀書,聽(tīng)到電話振鈴,您會(huì)在書中夾片書簽,放下書去接電話。在接電話的過(guò)程中,又有急促的敲門聲,您又會(huì)告訴電話對(duì)端:請(qǐng)稍等,有人敲門!您放下電話,接待敲門來(lái)訪者,之后繼續(xù)接聽(tīng)電話,電話接聽(tīng)完后返回書桌從你的書簽處繼續(xù)閱讀。很顯然,電話振鈴打斷了您的閱讀,急促敲門又打斷了您的接聽(tīng)電話,在急迫的臨時(shí)事件處理完后,您又繼續(xù)閱讀。對(duì)應(yīng)到計(jì)算機(jī)中的處理過(guò)程為:執(zhí)行主程序(讀書),有中斷申請(qǐng)(振鈴),中斷服務(wù)1(接聽(tīng)電話),又有中斷申請(qǐng)(敲門),中斷服務(wù)2(接待來(lái)訪),繼續(xù)接聽(tīng)電話,繼續(xù)讀書。“讀書—電話—敲門”事件的處理過(guò)程如圖6-11所示。

在計(jì)算機(jī)系統(tǒng)中,也有許多類似的情況發(fā)生。引入中斷的最初目的是為能更有效地處理系統(tǒng)中的輸入/輸出,提高系統(tǒng)的整體性能。隨著計(jì)算機(jī)應(yīng)用的發(fā)展,中斷技術(shù)也不再局限于I/O處理。圖6-11“讀書—電話—敲門”事件處理過(guò)程在CPU執(zhí)行程序的過(guò)程中,一些急迫事件(中斷申請(qǐng))引起CPU暫停正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行該事件的特定處理程序(中斷響應(yīng)),執(zhí)行完畢后,CPU再返回到被暫停的程序繼續(xù)執(zhí)行,這個(gè)過(guò)程稱為中斷處理過(guò)程。由于CPU正在執(zhí)行的原程序是被暫停執(zhí)行,所以稱為中斷。相對(duì)被中斷的程序來(lái)說(shuō),中斷處理程序是臨時(shí)嵌入的一段程序,所以,一般將被中斷的原程序稱為主程序,而將中斷處理程序稱為中斷服務(wù)程序(InterruptServiceRouting,ISR)。在這個(gè)過(guò)程中,任何能夠引起計(jì)算機(jī)中斷的事件統(tǒng)稱為中斷源。首先由中斷源提出中斷申請(qǐng),CPU根據(jù)當(dāng)時(shí)的情況再對(duì)中斷申請(qǐng)做出相應(yīng)的處理(中斷響應(yīng))。主程序執(zhí)行過(guò)程中被打斷的地方稱為斷點(diǎn),也就是主程序下一條待執(zhí)行指令所在內(nèi)存的地址。在計(jì)算機(jī)系統(tǒng)中,實(shí)現(xiàn)中斷處理過(guò)程的技術(shù)稱為中斷技術(shù),實(shí)現(xiàn)該技術(shù)而設(shè)置的軟件、硬件的總體稱為中斷系統(tǒng)。在計(jì)算機(jī)系統(tǒng)中,不同的系統(tǒng)構(gòu)成、不同的應(yīng)用目的,中斷源的數(shù)量和分類差別極大,中斷系統(tǒng)的具體實(shí)現(xiàn)也各有特點(diǎn),但其目的、效果和基本原理都是相似的。常見(jiàn)的中斷源主要是外設(shè),如打印機(jī)、網(wǎng)卡、顯卡、聲卡、硬盤、光驅(qū)等。也有一些特殊的中斷源,如軟件中斷,它是一條專用的指令,該指令的執(zhí)行會(huì)觸發(fā)處理器進(jìn)行一次軟中斷處理;再如處理器出錯(cuò)監(jiān)測(cè)中斷源,當(dāng)處理器出錯(cuò)(比如除數(shù)為零、存儲(chǔ)器訪問(wèn)失敗)時(shí)產(chǎn)生中斷申請(qǐng)。就中斷概念的原本含義而言,中斷是一個(gè)異步事件,這個(gè)事件什么時(shí)間發(fā)生是隨機(jī)的,中斷產(chǎn)生后即希望盡快得到CPU的處理,提高系統(tǒng)對(duì)事件處理的實(shí)時(shí)性和處理器的綜合效率。軟中斷則是由安排在程序指令序列中的軟中斷指令(SWI)引發(fā)的,在程序執(zhí)行到什么位置產(chǎn)生軟中斷是確定的,它是一個(gè)同步事件。軟中斷指令主要是為支持操作系統(tǒng)而設(shè)置的,也是為用戶模式提供系統(tǒng)功能調(diào)用接口等一些特殊的需要而設(shè)置的。6.5.2中斷系統(tǒng)的功能

中斷技術(shù)重要而復(fù)雜,由計(jì)算機(jī)的軟硬件共同完成。在計(jì)算機(jī)系統(tǒng)中,可能有多個(gè)中斷源,各中斷源的特性不同,各種中斷的處理差別很大,一個(gè)較為完整的中斷系統(tǒng)應(yīng)具備如下基本功能:

(1)對(duì)各中斷源的分別屏蔽控制。用戶可以通過(guò)軟件分別控制各個(gè)中斷源可否申請(qǐng)中斷。只有開(kāi)放了中斷的中斷源可以發(fā)出中斷申請(qǐng),而被屏蔽了中斷的中斷源不能發(fā)出中斷申請(qǐng)。計(jì)算機(jī)系統(tǒng)中,中斷屏蔽一般分級(jí)控制,既可以分別屏蔽各個(gè)中斷源,也可以在CPU端進(jìn)行總屏蔽控制,稱之為CPU開(kāi)中斷或CPU關(guān)中斷。當(dāng)CPU開(kāi)中斷時(shí),CPU可以響應(yīng)中斷申請(qǐng);反之,當(dāng)CPU關(guān)中斷時(shí)即使有中斷產(chǎn)生,CPU也不響應(yīng)中斷請(qǐng)求。如圖6-12所示,當(dāng)中斷屏蔽端加高電平“1”時(shí),中斷請(qǐng)求信號(hào)方可繼續(xù)傳遞。圖6-12分級(jí)的中斷屏蔽控制

(2)中斷源優(yōu)先級(jí)的設(shè)置與管理。多個(gè)中斷源同時(shí)向處理器申請(qǐng)中斷時(shí),約定高優(yōu)先級(jí)的中斷請(qǐng)求優(yōu)先傳遞(邏輯上表現(xiàn)為高優(yōu)先級(jí)的中斷源會(huì)優(yōu)先得到處理器的響應(yīng))。通常使用一個(gè)優(yōu)先級(jí)排隊(duì)電路,對(duì)各個(gè)中斷源的中斷申請(qǐng)信號(hào)按預(yù)設(shè)的優(yōu)先級(jí)進(jìn)行排隊(duì),將當(dāng)前最高優(yōu)先級(jí)的中斷申請(qǐng)送向處理器。中斷優(yōu)先級(jí)管理如圖6-13所示。中斷系統(tǒng)優(yōu)先級(jí)還有另一層含義:高優(yōu)先級(jí)中斷能嵌套到低優(yōu)先級(jí)的中斷服務(wù)過(guò)程中。不同機(jī)型的中斷優(yōu)先級(jí)的設(shè)置、管理與實(shí)現(xiàn)的方式差別較大,后面將逐步詳述ARM中的中斷技術(shù)和中斷系統(tǒng)。圖6-13中斷優(yōu)先級(jí)管理示意圖圖6-13中,n為中斷控制通道號(hào);INT_Rn為中斷請(qǐng)求信號(hào)n;INT_Vn為中斷向量(中斷號(hào))n,用于標(biāo)示具體的中斷源。將INT_Rn、INT_Vn等相關(guān)于第n組中斷源的全部資源稱為“中斷控制通道n”(INT_CHn)。中斷優(yōu)先級(jí)排隊(duì)邏輯按通道號(hào)INT_CHn大小優(yōu)先級(jí)排隊(duì),例如,約定通道號(hào)n數(shù)值小的INT_CHn優(yōu)先級(jí)高,那么INT_CH0的優(yōu)先級(jí)高于INT_CH1,依此類推。此種方式下,用戶可將需要優(yōu)先響應(yīng)的中斷源編程安排在n數(shù)值小的中斷控制通道(INT_CHn)中。

(3)中斷向量的設(shè)置與傳遞。計(jì)算機(jī)系統(tǒng)中的多個(gè)中斷源通常對(duì)應(yīng)于不同的事件,這些事件都有各自的處理方式,即不同的中斷對(duì)應(yīng)各自的中斷服務(wù)程序(ISR)。這些ISR最終都是以目標(biāo)代碼的形式存儲(chǔ)在內(nèi)存的不同地址區(qū)域,每個(gè)ISR在內(nèi)存的首地址稱為中斷向量。實(shí)質(zhì)上,CPU在響應(yīng)各中斷時(shí)需要獲得該中斷的中斷向量,并以此找到對(duì)應(yīng)于該中斷的ISR再運(yùn)行之。那么,在中斷系統(tǒng)中就要有一套機(jī)制,以控制各個(gè)中斷(和多個(gè)中斷)發(fā)生時(shí),如何向CPU傳遞相應(yīng)的中斷向量。

(4)斷點(diǎn)與現(xiàn)場(chǎng)保護(hù)。CPU在響應(yīng)中斷時(shí),自動(dòng)記錄下被中斷程序的斷點(diǎn)(即主程序中下一條待執(zhí)行的指令位置),以便中斷服務(wù)完成后能準(zhǔn)確地返回到斷點(diǎn)處繼續(xù)執(zhí)行主程序。有的CPU還能自動(dòng)記錄當(dāng)前程序狀態(tài)字(CurrentProgramStatusRegister,CPSR),有的機(jī)型稱為PSW(ProgramStatusWord)或FLAG),以便ISR返回時(shí),CPU的狀態(tài)現(xiàn)場(chǎng)也得以恢復(fù)。6.5.3中斷處理過(guò)程

對(duì)于一個(gè)中斷源的中斷處理過(guò)程一般包括5個(gè)步驟,即中斷請(qǐng)求、中斷響應(yīng)、斷點(diǎn)保護(hù)、中斷處理和中斷返回。

1.中斷請(qǐng)求

中斷處理過(guò)程中,首先要有中斷請(qǐng)求(中斷申請(qǐng))。中斷請(qǐng)求是中斷源向CPU發(fā)出的事件請(qǐng)求處理的申請(qǐng)。中斷源約定的事件發(fā)生時(shí),將該物理事件轉(zhuǎn)換成一個(gè)電信號(hào)傳到CPU,告知CPU本中斷源有事件產(chǎn)生,向CPU提出中斷申請(qǐng)。中斷系統(tǒng)可以對(duì)各個(gè)中斷源的中斷申請(qǐng)信號(hào)進(jìn)行屏蔽

控制,控制(允許/禁止)中斷信號(hào)能否傳向CPU。其原理見(jiàn)圖6-14。當(dāng)屏蔽控制端為高電平時(shí),中斷源事件信號(hào)可以通過(guò)與門產(chǎn)生中斷申請(qǐng);反之,中斷源事件信號(hào)將被阻止繼續(xù)

傳送。圖6-14中斷申請(qǐng)與屏蔽在中斷系統(tǒng)中,有兩個(gè)寄存器分別用于中斷狀態(tài)標(biāo)志和屏蔽控制,因此對(duì)應(yīng)地稱之為中斷狀態(tài)標(biāo)志寄存器和中斷屏蔽控制寄存器。中斷狀態(tài)標(biāo)志寄存器按位分別標(biāo)志各個(gè)中斷源有無(wú)中斷申請(qǐng),例如,“1”表示對(duì)應(yīng)中斷源有中斷申請(qǐng),“0”表示無(wú)中斷申請(qǐng)。該寄存器各位由中斷源事件置位;由CPU指令清0或響應(yīng)中斷自動(dòng)清0。中斷屏蔽控制寄存器按位分別用于各個(gè)中斷源的屏蔽控制,通過(guò)編程中斷屏蔽控制寄存器的對(duì)應(yīng)位是“1”或“0”,即可實(shí)現(xiàn)對(duì)應(yīng)中斷源的屏蔽與否。

2.中斷響應(yīng)

CPU總是在每條指令執(zhí)行的最后一個(gè)時(shí)鐘周期檢測(cè)有無(wú)中斷請(qǐng)求,若CPU處于開(kāi)中斷狀態(tài),則可以檢測(cè)到中斷申請(qǐng)并對(duì)其進(jìn)行處理,這個(gè)過(guò)程稱為中斷響應(yīng)。中斷響應(yīng)更重要的工作是要獲得相應(yīng)的中斷向量,轉(zhuǎn)移到對(duì)應(yīng)的ISR并運(yùn)行之。找到中斷服務(wù)程序的入口一般有兩種方式:非向量中斷方式和向量中斷方式。

(1)非向量中斷方式。這類中斷控制器的硬件比較簡(jiǎn)單,有統(tǒng)一、固定的中斷響應(yīng)入口地址。處理器響應(yīng)非向量中斷時(shí),轉(zhuǎn)到固定的內(nèi)存單元地址取指令執(zhí)行,那么要想?yún)^(qū)分多個(gè)中斷源,還需要對(duì)中斷源的申請(qǐng)狀態(tài)進(jìn)一步地分析。通常要在統(tǒng)一的中斷服務(wù)程序中讀取中斷狀態(tài)標(biāo)志寄存器,并分析是哪一個(gè)中斷源發(fā)出的中斷申請(qǐng),而后再調(diào)用對(duì)應(yīng)的功能處理程序。

(2)向量中斷方式。這類中斷控制器的硬件要復(fù)雜些,中斷源在發(fā)出中斷申請(qǐng)的同時(shí)也發(fā)出中斷源的標(biāo)志信息。不同的計(jì)算機(jī)系統(tǒng)中,中斷源的標(biāo)志信息可能不同,如ARM系統(tǒng)的中斷源標(biāo)志是中斷向量(即服務(wù)程序入口地址),X86系統(tǒng)的中斷源標(biāo)志是中斷號(hào)。處理器響應(yīng)這類中斷時(shí),同時(shí)也得到了對(duì)應(yīng)的中斷源標(biāo)志信息,直接得到或可以直接換算出中斷服務(wù)程序的入口地址。顯然,向量中斷的響應(yīng)速度快于非向量中斷。

CPU響應(yīng)中斷的同時(shí),硬件自動(dòng)屏蔽CPU中斷(在ISR中可以指令方式重新允許CPU中斷),以保證中斷邏輯的正確

性。不同的CPU中斷系統(tǒng),中斷響應(yīng)的具體操作差別較大,具體的中斷響應(yīng)過(guò)程需要查閱相關(guān)的技術(shù)資料,但原理上是一致的。

注意:指令的執(zhí)行過(guò)程中可能產(chǎn)生中斷,但也要等到本條指令執(zhí)行后,才可能響應(yīng)中斷,即中斷可能隨機(jī)發(fā)生,但中斷響應(yīng)只能發(fā)生在指令與指令之間。中斷響應(yīng)是由硬件自動(dòng)完成的。

3.?dāng)帱c(diǎn)保護(hù)

CPU一旦響應(yīng)中斷,需要對(duì)其正在執(zhí)行程序的斷點(diǎn)信息進(jìn)行保護(hù),以便在中斷處理結(jié)束后仍能回到該斷點(diǎn)處繼續(xù)執(zhí)行。不同的機(jī)型在斷點(diǎn)保護(hù)時(shí),其保護(hù)的內(nèi)容及備份目標(biāo)單元不盡相同,除了保護(hù)斷點(diǎn)外,有的機(jī)型還會(huì)保護(hù)程序狀態(tài)字。多數(shù)機(jī)型使用堆棧(Stack)作為備份目標(biāo)單元(如X86CPU),也有的機(jī)型使用專用寄存器作為備份目標(biāo)單元(如ARM)。斷點(diǎn)保護(hù)是由硬件自動(dòng)完成的。

4.中斷處理

中斷處理的過(guò)程實(shí)際上就是CPU執(zhí)行中斷服務(wù)程序(ISR)的過(guò)程。CPU執(zhí)行ISR時(shí)多數(shù)情況會(huì)使用公共寄存器資源,我們知道CPU中的寄存器通常用于暫存程序運(yùn)算中的臨時(shí)數(shù)據(jù),CPU的這些公共寄存器當(dāng)前的數(shù)據(jù)情況稱為數(shù)據(jù)現(xiàn)場(chǎng),為了保證主程序的運(yùn)算正確性,在ISR程序中首先需保護(hù)那些在ISR中要占用的寄存器數(shù)據(jù)(即數(shù)據(jù)現(xiàn)場(chǎng)),之后方可使用這些保護(hù)了的寄存器資源。這個(gè)CPU寄存器數(shù)據(jù)保護(hù)的過(guò)程稱為中斷現(xiàn)場(chǎng)保護(hù)。中斷現(xiàn)場(chǎng)保護(hù)的目的在于:當(dāng)ISR處理完時(shí),CPU(各個(gè)寄存器)可以原樣地回到主程序繼續(xù)執(zhí)行。整個(gè)ISR都由用戶編程實(shí)現(xiàn),包括中斷現(xiàn)場(chǎng)保護(hù)和中斷服務(wù)業(yè)務(wù)的編碼。中斷現(xiàn)場(chǎng)保護(hù)工作通過(guò)將寄存器中的數(shù)據(jù)備份到內(nèi)存的某個(gè)特別區(qū)域完成。實(shí)際應(yīng)用中,這個(gè)內(nèi)存的特別區(qū)域就是處理器的堆棧,用堆棧保護(hù)中斷現(xiàn)場(chǎng)。

5.中斷返回

執(zhí)行完中斷服務(wù)程序后,需返回到原先被中斷的程序,此過(guò)程稱為中斷返回。使用專用的中斷返回指令完成中斷返回操作。為了保障主程序的運(yùn)算正確性,在中斷返回前要先恢復(fù)主程序的數(shù)據(jù)現(xiàn)場(chǎng)。中斷返回指令的作用實(shí)際上是恢復(fù)斷點(diǎn),也就是保護(hù)斷點(diǎn)的逆過(guò)程。

中斷處理過(guò)程如圖6-15所示,具體為:在執(zhí)行主程序Cn指令過(guò)程中發(fā)生中斷,處理器執(zhí)行完Cn指令后響應(yīng)該中斷,轉(zhuǎn)入到對(duì)應(yīng)的ISR;在ISR中首先保護(hù)數(shù)據(jù)現(xiàn)場(chǎng)(斷點(diǎn)的保護(hù)由硬件自動(dòng)完成,之后完成相關(guān)業(yè)務(wù)的處理,再恢復(fù)主程序的原數(shù)據(jù)現(xiàn)場(chǎng),ISR返回到主程序Cn+1指令處繼續(xù)主程序的執(zhí)行。圖6-15中斷處理過(guò)程前面我們探討了計(jì)算機(jī)中的中斷技術(shù)基本原理,在實(shí)際應(yīng)用中,不同處理器中斷系統(tǒng)的具體構(gòu)成和工作過(guò)程有較大的差別,但原理相似。讀者應(yīng)能依據(jù)基礎(chǔ)理論知識(shí),針對(duì)具體的應(yīng)用研究處理器的中斷系統(tǒng)細(xì)節(jié)。6.6ARM中斷系統(tǒng)基礎(chǔ)

6.6.1ARM中的中斷源

不同的應(yīng)用目標(biāo)和系統(tǒng)構(gòu)成,其中具體的存儲(chǔ)器、外設(shè)接口、功能部件等資源不盡相同。主要應(yīng)用于嵌入式系統(tǒng)應(yīng)用的ARM系列微控制器為了滿足多方面的應(yīng)用需求,在器件中集成了多種常用資源,從而提高了系統(tǒng)的集成度和可靠性,減小了系統(tǒng)的體積和功耗。這些資源大多數(shù)都需要與CPU交互,CPU對(duì)這些資源的控制可以使用查詢方式,也可以使用中斷方式。中斷方式情況下,這些資源事件被處理器響應(yīng)的實(shí)時(shí)性好,并且CPU的效率提高了許多。這些能以中斷方式受控于CPU的資源統(tǒng)稱為ARM中斷源。

LPC2000系列ARM微控制器中常見(jiàn)的中斷源有WDT(看門狗)、Timer(定時(shí)器/計(jì)數(shù)器)、PWM(脈寬調(diào)制器)、UART(通用異步收發(fā)器)、I2C(I2C接口)、SPI(SPI接口)、RTC(實(shí)時(shí)時(shí)鐘)、ADC(模/數(shù)轉(zhuǎn)換器)、EINT(外中斷)、SWI(軟中斷)等。為此,擁有不同種類和資源數(shù)量的ARM微控制器構(gòu)成了ARM系列微控制器的各種型號(hào)。用戶可以依據(jù)自己的資源需要,選取一款性價(jià)比較好的器件應(yīng)用到自己的應(yīng)用設(shè)計(jì)中。6.6.2ARM中的向量中斷控制器

不同的計(jì)算機(jī)系統(tǒng),其中斷系統(tǒng)的具體實(shí)現(xiàn)差別較大。ARM系列嵌入式處理器的中斷系統(tǒng)的主要硬件構(gòu)成就是向量中斷控制器(VectorInterruptController,VIC),它是中斷源與處理器連接的橋梁,如圖6-16所示。通過(guò)對(duì)VIC編程可對(duì)ARM器件的各個(gè)中斷源進(jìn)行中斷屏蔽控制、中斷優(yōu)先級(jí)控制、中斷分類控制、中斷向量傳遞、狀態(tài)查詢等。如前所述,計(jì)算機(jī)中的各種資源對(duì)于編程者都被抽象成了寄存器組,VIC也被抽象成了43個(gè)寄存器,用戶通過(guò)對(duì)這43個(gè)寄存器編程實(shí)現(xiàn)中斷系統(tǒng)的各項(xiàng)功能,滿足用戶對(duì)終端控制的各種需要。圖6-16ARM的向量中斷控制器在ARM技術(shù)中,中斷和異常是兩個(gè)不同的概念。中斷是異常的特殊方式,異常的概念比中斷的含義要廣泛些。ARM技術(shù)中,將所有能導(dǎo)致處理器打斷程序正常運(yùn)行的事件都?xì)w為異常,如處理器復(fù)位也歸為異常的一種,顯然不能將復(fù)位理解成中斷。在ARM中包含7種異常:復(fù)位異常、SWI異常(軟中斷異常)、未定義指令異常、數(shù)據(jù)中止異常、指令中止異常、IRQ異常和FIQ異常。關(guān)于ARM處理器的各種異常及其響應(yīng)參見(jiàn)2.5節(jié)。

ARM技術(shù)中特將所有外設(shè)導(dǎo)致的異常稱為中斷。在ARM中,所有的中斷都被中斷系統(tǒng)處理成IRQ或FIQ兩種異常之一,人們習(xí)慣上將以IRQ異常方式傳遞、響應(yīng)的中斷稱為IRQ中斷,將以FIQ異常方式傳遞、響應(yīng)的中斷稱為FIQ中斷。IRQ中斷又根據(jù)中斷服務(wù)程序入口地址的定位方式,被進(jìn)一步劃分為向量IRQ中斷和非向量IRQ中斷。ARM中的向量IRQ中斷和非向量IRQ中斷都是通過(guò)IRQ異常完成響應(yīng)的,只是在中斷服務(wù)程序(ISR)入口地址的傳遞細(xì)節(jié)上有差別。

ARM處理器與VIC協(xié)作,按以下規(guī)則工作:

(1)通過(guò)對(duì)VIC編程可將各中斷源配置成FIQ中斷、向量IRQ中斷或非向量IRQ中斷。

(2)對(duì)于FIQ類中斷,ARM會(huì)從一個(gè)固定的地址(0x1C)進(jìn)入其相應(yīng)的中斷服務(wù)程序(ISR)。

(3)對(duì)于IRQ類中斷,ARM會(huì)從一個(gè)固定的地址(0x18)進(jìn)入其相應(yīng)的IRQ異常處理。VIC自動(dòng)區(qū)分該中斷是向量IRQ中斷還是非向量IRQ中斷,并將IRQ異常映射到相應(yīng)的ISR入口處。

(4)ARM硬件默認(rèn)FIQ中斷優(yōu)先級(jí)高于IRQ中斷優(yōu)先級(jí);在IRQ異常中,ARM中斷系統(tǒng)硬件默認(rèn)向量IRQ中斷優(yōu)先級(jí)高于非向量IRQ中斷;對(duì)于向量IRQ中斷和非向量IRQ中斷,用戶都可軟件編程自定義各IRQ中斷源的優(yōu)先級(jí)。

(5)在響應(yīng)IRQ、FIQ中斷時(shí),硬件自動(dòng)將當(dāng)前的PC值保存到相應(yīng)模式的LR(R14_irq、R14_fiq)中,CPSR值保存到相應(yīng)模式的SPSR(SPSR_irq、SPSR_fiq)寄存器中,供中斷返回使用。6.6.3ARM的中斷響應(yīng)過(guò)程

ARM的FIQ中斷、IRQ中斷是ARM的FIQ和IRQ兩種異常的特例。FIQ中斷只用于極為緊迫的事件處理,通常系統(tǒng)中僅安排一個(gè)FIQ中斷源,以保證在發(fā)生FIQ中斷時(shí),處理器能盡快地進(jìn)入到對(duì)應(yīng)事件的處理程序。所以FIQ中斷處理過(guò)程直接對(duì)應(yīng)于FIQ異常的處理,F(xiàn)IQ中斷服務(wù)程序的入口地址就是0x0000001C。系統(tǒng)中其他的中斷源都安排為IRQ中斷,發(fā)生IRQ中斷時(shí),硬件自動(dòng)將IRQ中斷處理為IRQ異常,到0x00000018單

元取指執(zhí)行,在ARM異常向量表中0x00000018單元存放的

是“LDRPC,[PC,#﹣0xff0]”指令,該指令的具體操作是:用[PC,#﹣0xff0]數(shù)據(jù)對(duì)PC賦值,操作結(jié)果也就是按[PC,#﹣0xff0]數(shù)據(jù)跳轉(zhuǎn)。而?[PC,#﹣0xff0]數(shù)據(jù)就是VIC準(zhǔn)備好的IRQ中斷服務(wù)程序的入口地址,以此完成對(duì)不同IRQ中斷的響應(yīng)。關(guān)于ARM7的IRQ中斷技術(shù)參見(jiàn)7.6節(jié)。6.6.4ARM的中斷返回

在處理完中斷后,要從ISR返回到主程序斷點(diǎn)處繼續(xù)執(zhí)行。從前面的介紹可知,ARM處理器響應(yīng)IRQ和FIQ中斷時(shí),硬件自動(dòng)完成當(dāng)前PC值到LR_irq(或LR_fiq)寄存器的備份以及CPSR寄存器值到SPSR_irq(或SPSR_fiq)寄存器的備份。中斷返回就是要借助LR和SPSR中的數(shù)據(jù)備份返回到主程序斷點(diǎn)處,繼續(xù)主程序的執(zhí)行。注意:在斷點(diǎn)返回前,應(yīng)先恢復(fù)數(shù)據(jù)現(xiàn)場(chǎng)。由于ARM處理器三級(jí)流水線的存在,在使用LR寄存器值作返回時(shí)還需要修正。

如圖6-17所示,CPU正在執(zhí)行主程序指令C2,對(duì)指令C3正在譯碼,對(duì)PC指向指令C4進(jìn)行取指。此時(shí)發(fā)生了IRQ(或FIQ)中斷,CPU硬件會(huì)自動(dòng)完成PC數(shù)據(jù)到LR的備份操作,即LR中保存了C4指令的單元地址。如果在ISR返回時(shí),直接使用LR恢復(fù)PC,那么主程序的指令C3就不能得到執(zhí)行了,顯然不符合程序執(zhí)行的要求。為此,需要進(jìn)行返回調(diào)整:PC=LR-#0x04。IRQ中斷服務(wù)程序、FIQ中斷服務(wù)程序使用指令“SUBSPC,R14,#4”返回主程序。圖6-17LR的數(shù)據(jù)情況6.6.5ARM的外中斷

ARM系統(tǒng)的外中斷資源主要用于其他外部隨機(jī)事件到系統(tǒng)的引入,如行程開(kāi)關(guān)、煙霧報(bào)警器等。當(dāng)這些事件發(fā)生時(shí),外部其他電路將對(duì)應(yīng)的物理事件轉(zhuǎn)換成電信號(hào),處理器能及時(shí)響應(yīng)、處理。在ARM系統(tǒng)中,該功能也可用于將處理器從掉電模式喚醒。

外部中斷是通過(guò)管腳(EINTx)輸入符合要求的信號(hào)而觸發(fā)的中斷。LPC2000含有4個(gè)外部中斷輸入管腳(EINT0、EINT1、EINT2和EINT3)。中斷觸發(fā)的信號(hào)形式有兩種:邊沿觸發(fā)和電平觸發(fā)。邊沿觸發(fā)可分為上升沿觸發(fā)和下降沿觸發(fā);電平觸發(fā)可分為高電平觸發(fā)和低電平觸發(fā),應(yīng)用中可編程選擇信號(hào)的形式和有效方式。邊沿觸發(fā)的特點(diǎn)是EINT管腳有一個(gè)有效沿輸入就觸發(fā)一次中斷申請(qǐng),直到被響應(yīng)或通過(guò)指令撤銷。電平觸發(fā)的特點(diǎn)是中斷申請(qǐng)時(shí)刻跟隨EINT管腳輸入電平的有效狀態(tài)。深刻理解、靈活運(yùn)用兩種外中斷信號(hào)形式,對(duì)掌握中斷技術(shù)很有幫助,讀者在后續(xù)學(xué)習(xí)中應(yīng)多體會(huì)。使用電平觸發(fā)方式時(shí)(如圖6-18所示),在處理器響應(yīng)外中斷進(jìn)入ISR處理返回主程序前,如果EINT不撤銷,ISR返回主程序后還會(huì)被中斷,如此會(huì)造成一個(gè)事件被處理多次。因此,注意在ISR中要撤銷本次EINT管腳上的中斷申請(qǐng)信號(hào),以免一個(gè)中斷事件被多次響應(yīng)。使用邊沿觸發(fā)方式(如圖6-19所示),可以比較好地解決此問(wèn)題,只有上升沿或下降沿觸發(fā)一次中斷申請(qǐng)。圖6-18電平觸發(fā)方式圖6-19邊沿觸發(fā)方式

1.ARM外中斷資源相關(guān)寄存器

用于外中斷控制的寄存器有5個(gè),詳見(jiàn)表6-4。

1)?EXTINT——外部中斷標(biāo)志寄存器

EXTINT寄存器如圖6-20所示。圖6-20EXTINT寄存器本寄存器中4個(gè)比特EINT[3:0]分別用于標(biāo)示對(duì)應(yīng)的4個(gè)中斷輸入,當(dāng)對(duì)應(yīng)的輸入端有有效輸入信號(hào)時(shí),相應(yīng)的比特置“1”,通過(guò)VIC向處理器申請(qǐng)中斷。向EINT[3:0]按位寫入“1”清零對(duì)應(yīng)位。電平方式下,寫“1”清操作只有在管腳處于無(wú)效狀態(tài)輸入時(shí)才有效。一旦EINT[3:0]中的一位被置位并開(kāi)始執(zhí)行相應(yīng)的外部中斷服務(wù)程序,在ISR中必須以軟件方式清零該位。本寄存器的高位EXTINT[7:4]保留,用戶不要修改其中的數(shù)據(jù)。為此,建議使用“讀—修改—寫”方式操作EXTINT寄存器。

2)?EXTMODE——外部中斷方式寄存器

EXTMODE寄存器如圖6-21所示。圖6-21EXTMODE寄存器本寄存器中的EXTMODE[3:0]位分別用來(lái)選擇對(duì)應(yīng)的EINT3~EINT0腳觸發(fā)信號(hào)方式是電平或邊沿?!?”為邊沿方式,“0”為電平方式。芯片復(fù)位值EXTMODE[3:0]=0b0000,即電平方式是默認(rèn)方式。

3)?EXTPOLAR——外部中斷極性寄存器

EXTPOLAR寄存器如圖6-22所示。圖6-22EXTPOLAR寄存器本寄存器中的EXTPOLAR[3:0]位分別用來(lái)選擇對(duì)應(yīng)的EINT3~EINT0腳觸發(fā)信號(hào)的極性。在電平方式中,EXTPOLAR寄存器用來(lái)選擇相應(yīng)管腳是高電平或低電平有效。在邊沿方式中,EXTPOLAR寄存器用來(lái)選擇管腳上升沿或下降沿有效?!?”為上升沿/高電平方式,“0”為下降沿/低電平方式。芯片復(fù)位值EXTPOLAR[3:0]=0b0000,即低電平方式/下降沿是默認(rèn)方式。

2.一個(gè)簡(jiǎn)單的外中斷示例

例6.1

用一個(gè)按鍵模擬一個(gè)外中斷觸發(fā),用蜂鳴器BEEP模擬控制狀態(tài);每一次外中斷事件翻轉(zhuǎn)一次控制狀態(tài)輸出,模擬一個(gè)外中斷發(fā)出、響應(yīng)和處理過(guò)程。

設(shè)計(jì)中設(shè)置P0.16管腳用作EINT0功能,連接開(kāi)關(guān)K,信號(hào)方式設(shè)置為低電平有效;P0.7管腳用作GPIO功能,輸出屬性連接BEEP,如圖6-23所示。圖6-23外中斷應(yīng)用完成設(shè)計(jì)功能的匯編程序代碼見(jiàn)程序清單6-2。

ResetAddr DCDResetInit

UndefinedAddr DCDUndefined

SWI_Addr DCDSoftwareInterrupt

PrefetchAddr DCDPrefetchAbort

DataAbortAddr DCDDataAbort

Nouse DCD0

IRQ_Addr DCD0

FIQ_Addr DCDFIQ_Handler

;未定義指令

Undefined

BUndefined

;軟中斷

SoftwareInterrupt

BSoftwareInterrupt

;取指令中止

PrefetchAbort

BPrefetchAbort

;取數(shù)據(jù)中止

DataAbort

BDataAbort

;快速中斷

FIQ_Handler

BFIQ_Handler

ResetInit

;設(shè)置IRQ中斷模式堆棧

msrCPSR_c,#0xd2

ldrSP,=0x40000500

;設(shè)置管理模式堆棧

msrCPSR_c,#0xd3

ldrSP,=0x40000800

ldrr0,=PINSEL0

movr4,#0x00

strr4,[r0] ;?P0[15:0]管腳用作GPIO ldrr0,=PINSEL1

movr4,#0x01 ;?P0.16用作外中斷0

strr4,[r0]

ldrr0,=IO0DIR ;?P0.7管腳用作輸出

movr4,#BEEP

strr4,[r0]

ldrr0,=IO0SET ;初始態(tài)BEEP靜音

movr4,#BEEP

strr4,[r0] ldrr0,=EXTMODE

ldrr4,[r0]

andr4,r4,#0xf0

strbr4,[r0] ;電平方式中斷

ldrr0,=EXTPOLAR

ldrr4,[r0]

andr4,r4,#0xf0

strbr4,[r0] ;低電平有效EINT0 ldrr0,=VICIntSelect

movr4,#0x00

strr4,[r0] ;中斷源為IRQ類

ldrr0,=VICDefVectAddr

;裝載中斷服務(wù)程序入口地址

ldrr4,=IRQ_Eint0

strr4,[r0]

ldrr0,=EXTINT

mov

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論