ARM的串行口試驗(yàn)_第1頁(yè)
ARM的串行口試驗(yàn)_第2頁(yè)
ARM的串行口試驗(yàn)_第3頁(yè)
ARM的串行口試驗(yàn)_第4頁(yè)
ARM的串行口試驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩38頁(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、ARM的串行口試驗(yàn)一、 試驗(yàn)?zāi)康?. 掌握ARM的串行口工作原理2. 學(xué)習(xí)編程實(shí)現(xiàn)ARM的UART通訊3. 掌握CPU利用串口通訊的方法二、 試驗(yàn)內(nèi)容學(xué)習(xí)串行通訊原理,了解串行通訊控制器,閱讀ARM芯片文檔,掌握ARM的UART相關(guān)寄存器的功能,熟悉ARM系統(tǒng)硬件的UART相關(guān)接口。編程實(shí)現(xiàn)ARM和計(jì)算機(jī)實(shí)現(xiàn)串行通訊:ARM監(jiān)視串行口,將接受到的字符再發(fā)送給串口(計(jì)算機(jī)與開發(fā)板是通過超級(jí)終端通訊的),即按PC鍵盤通過超級(jí)終端發(fā)送數(shù)據(jù),開發(fā)板將接受到的數(shù)據(jù)再返送給PC,在超級(jí)終端上顯示。三、 預(yù)備知識(shí)1. 用ARM ADS1.2集成開發(fā)環(huán)境,編寫和調(diào)試程序的基本過程。2. ARM應(yīng)用程序的框架結(jié)

2、構(gòu)。3. 了解串行總線。四、 試驗(yàn)設(shè)備及工具硬件:ARM嵌入式開發(fā)平臺(tái)、PC機(jī)Pentium100以上、用于ARM920T的JTAG仿真器、串口線。軟件:PC機(jī)操作系統(tǒng)Win2000或WinXP、ARM ADS1.2集成開發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序。五、 試驗(yàn)原理及說(shuō)明隨著計(jì)算機(jī)系統(tǒng)的應(yīng)用和微機(jī)網(wǎng)絡(luò)的發(fā)展,通信功能越來(lái)越顯的重要。這里所說(shuō)的通信是指計(jì)算機(jī)與外界的信息交換。因此,通信既包括計(jì)算機(jī)與外部設(shè)備之間,也包括計(jì)算機(jī)和計(jì)算機(jī)之間的信息交換。由于串行通信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,并且可以借助現(xiàn)成的電話網(wǎng)進(jìn)行信息傳送,因此,特別適合于遠(yuǎn)距離傳輸。對(duì)于那些

3、與計(jì)算機(jī)相距不遠(yuǎn)的人機(jī)交換設(shè)備和串行存儲(chǔ)的外部設(shè)備如終端、打印機(jī)、邏輯分析儀、磁盤等,采用串行方式交換數(shù)據(jù)也很普遍。在實(shí)時(shí)控制和管理方面,采用多臺(tái)微機(jī)處理機(jī)組成分級(jí)分布控制系統(tǒng)中,各CPU之間的通信一般都是串行方式。所以串行接口是微機(jī)應(yīng)用系統(tǒng)常用的接口。許多外設(shè)和計(jì)算機(jī)按串行方式進(jìn)行通信,這里所說(shuō)的串行方式,是指外設(shè)與接口電路之間的信息傳送方式,實(shí)際上,CPU與接口之間仍按并行方式工作。1、串行通信的概念圖1所謂“串行通信”是指外設(shè)和計(jì)算機(jī)間使用一根數(shù)據(jù)信號(hào)線(另外需要地線,可能還需要控制線),數(shù)據(jù)在一根數(shù)據(jù)信號(hào)線上一位一位地進(jìn)行傳輸,每一位數(shù)據(jù)都占據(jù)一個(gè)固定的時(shí)間長(zhǎng)度。如圖1所示。這種通信方

4、式使用的數(shù)據(jù)線少,在遠(yuǎn)距離通信中可以節(jié)約通信成本,當(dāng)然,其傳輸速度比并行傳輸慢。由于CPU與接口之間按并行方式傳輸,接口與外設(shè)之間按串行方式傳輸,因此,在串行接口中,必須要有“接收移位寄存器”(串并)和“發(fā)送移位寄存器”(并串)。典型的串行接口的結(jié)構(gòu)如圖2所示。圖2在數(shù)據(jù)輸入過程中,數(shù)據(jù)1位1位地從外設(shè)進(jìn)入接口的“接收移位寄存器”,當(dāng)“接收移位寄存器”中已接收完1個(gè)字符的各位后,數(shù)據(jù)就從“接收移位寄存器”進(jìn)入“數(shù)據(jù)輸入寄存器”。CPU從“數(shù)據(jù)輸入寄存器”中讀取接收到的字符。(并行讀取,即D7D0同時(shí)被讀至累加器中)。“接收移位寄存器”的移位速度由“接收時(shí)鐘”確定。在數(shù)據(jù)輸出過程中,CPU把要輸

5、出的字符(并行地)送入“數(shù)據(jù)輸出寄存器”,“數(shù)據(jù)輸出寄存器”的內(nèi)容傳輸?shù)健鞍l(fā)送移位寄存器”,然后由“發(fā)送移位寄存器”移位,把數(shù)據(jù)1位1位地送到外設(shè)。“發(fā)送移位寄存器”的移位速度由“發(fā)送時(shí)鐘”確定。接口中的“控制寄存器”用來(lái)容納CPU送給此接口的各種控制信息,這些控制信息決定接口的工作方式。“狀態(tài)寄存器”的各位稱為“狀態(tài)位”,每一個(gè)狀態(tài)位都可以用來(lái)指示數(shù)據(jù)傳輸過程中的狀態(tài)或某種錯(cuò)誤。例如,用狀態(tài)寄存器的D5位為“1”表示“數(shù)據(jù)輸出寄存器”空,用D0位表示“數(shù)據(jù)輸入寄存器滿”,用D2位表示“奇偶檢驗(yàn)錯(cuò)”等。2、奇偶校驗(yàn)串行數(shù)據(jù)在傳輸過程中,由于干擾可能引起信息的出錯(cuò),例如,傳輸字符E,其各位為:0

6、100,0101=45HD7 D0由于干擾,可能使位變?yōu)?,這種情況,我們稱為出現(xiàn)了“誤碼”。我們把如何發(fā)現(xiàn)傳輸中的錯(cuò)誤,叫“檢錯(cuò)”。發(fā)現(xiàn)錯(cuò)誤后,如何消除錯(cuò)誤,叫“糾錯(cuò)”。最簡(jiǎn)單的檢錯(cuò)方法是“奇偶校驗(yàn)”,即在傳送字符的各位之外,再傳送1位奇/偶校驗(yàn)位。可采用奇校驗(yàn)或偶校驗(yàn)。奇校驗(yàn):所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中,“1”的個(gè)數(shù)為奇數(shù),如:1 0110,01010 0110,0001偶校驗(yàn):所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中,“1”的個(gè)數(shù)為偶數(shù),如:1 0100,01010 0100,0001圖3奇偶校驗(yàn)?zāi)軌驒z測(cè)出信息傳輸過程中的部分誤碼(1位誤碼能檢出,2位及2位以上誤碼不能

7、檢出),同時(shí),它不能糾錯(cuò)。在發(fā)現(xiàn)錯(cuò)誤后,只能要求重發(fā)。但由于其實(shí)現(xiàn)簡(jiǎn)單,仍得到了廣泛使用。有些檢錯(cuò)方法,具有自動(dòng)糾錯(cuò)能力。如循環(huán)冗余碼(CRC)檢錯(cuò)等。3、單工、半雙工和全雙工的定義 如果在通信過程的任意時(shí)刻,信息只能由一方A傳到另一方B,則稱為單工。如果在任意時(shí)刻,信息既可由A傳到B,又能由B傳A,但只能由一個(gè)方向上的傳輸存在,稱為半雙工傳輸。 如果在任意時(shí)刻,線路上存在A到B和B到A的雙向信號(hào)傳輸,則稱為全雙工。   電話線就是二線全雙工信道。 由于采用了回波抵消技術(shù),雙向的傳輸信號(hào)不致混淆不清。雙工信道有時(shí)也將收、發(fā)信道分開,采用分離的線路或頻帶傳

8、輸相反方向的信號(hào),如回線傳輸。在串行通信中,數(shù)據(jù)通常是在兩個(gè)站(如終端和微機(jī))之間進(jìn)行傳送,按照數(shù)據(jù)流的方向可分成三種基本的傳送方式:全雙工、半雙工、和單工。但單工目前已很少采用,下面僅介紹前兩種方式。 (1)、全雙工方式(full duplex) 當(dāng)數(shù)據(jù)的發(fā)送和接收分流,分別由兩根不同的傳輸線傳送時(shí),通信雙方都能在同一時(shí)刻進(jìn)行發(fā)送和接收操作,這樣的傳送方式就是全雙工制,如圖1所示。在全雙工方式下,通信系統(tǒng)的每一端都設(shè)置了發(fā)送器和接收器,因此,能控制數(shù)據(jù)同時(shí)在兩個(gè)方向上傳送。全雙工方式無(wú)需進(jìn)行方向的切換,因此,沒有切換操作所產(chǎn)生的時(shí)間延遲,這對(duì)那些不能有時(shí)間延誤的交互式應(yīng)用(例如遠(yuǎn)程監(jiān)測(cè)和控制

9、系統(tǒng))十分有利。這種方式要求通訊雙方均有發(fā)送器和接收器,同時(shí),需要2根數(shù)據(jù)線傳送數(shù)據(jù)信號(hào)。(可能還需要控制線和狀態(tài)線,以及地線)。 圖4比如,計(jì)算機(jī)主機(jī)用串行接口連接顯示終端,而顯示終端帶有鍵盤。這樣,一方面鍵盤上輸入的字符送到主機(jī)內(nèi)存;另一方面,主機(jī)內(nèi)存的信息可以送到屏幕顯示。通常,往鍵盤上打入1個(gè)字符以后,先不顯示,計(jì)算機(jī)主機(jī)收到字符后,立即回送到終端,然后終端再把這個(gè)字符顯示出來(lái)。這樣,前一個(gè)字符的回送過程和后一個(gè)字符的輸入過程是同時(shí)進(jìn)行的,即工作于全雙工方式。(2)、半雙式方式(half duplex)若使用同一根傳輸線既作接收又作發(fā)送,雖然數(shù)據(jù)可以在兩個(gè)方向上傳送,但通信雙方不能同時(shí)

10、收發(fā)數(shù)據(jù),這樣的傳送方式就是半雙工制,如圖5所示。采用半雙工方式時(shí),通信系統(tǒng)每一端的發(fā)送器和接收器,通過收/發(fā)開關(guān)轉(zhuǎn)接到通信線上,進(jìn)行方向的切換,因此,會(huì)產(chǎn)生時(shí)間延遲。收/發(fā)開關(guān)實(shí)際上是由軟件控制的電子開關(guān)。圖5當(dāng)計(jì)算機(jī)主機(jī)用串行接口連接顯示終端時(shí),在半雙工方式中,輸入過程和輸出過程使用同一通路。有些計(jì)算機(jī)和顯示終端之間采用半雙工方式工作,這時(shí),從鍵盤打入的字符在發(fā)送到主機(jī)的同時(shí)就被送到終端上顯示出來(lái),而不是用回送的辦法,所以避免了接收過程和發(fā)送過程同時(shí)進(jìn)行的情況。目前多數(shù)終端和串行接口都為半雙工方式提供了換向能力,也為全雙工方式提供了兩條獨(dú)立的引腳。在實(shí)際使用時(shí),一般并不需要通信雙方同時(shí)既發(fā)

11、送又接收,像打印機(jī)這類的單向傳送設(shè)備,半雙工甚至單工就能勝任,也無(wú)需倒向。4、傳輸速率與傳輸距離(1)、波特率在串行通信中,用“波特率”來(lái)描述數(shù)據(jù)的傳輸速率。所謂波特率,即每秒鐘傳送的二進(jìn)制位數(shù),其單位為bps(bits per second)。它是衡量串行數(shù)據(jù)速度快慢的重要指標(biāo)。有時(shí)也用“位周期”來(lái)表示傳輸速率,位周期是波特率的倒數(shù)。國(guó)際上規(guī)定了一個(gè)標(biāo)準(zhǔn)波特率系列:110、300、600、1200、1800、2400、4800、9600、14.4Kbps、19.2Kbps、28.8Kbps、33.6Kbps、56Kbps。 例如:9600bps,指每秒傳送9600位,包含字符的數(shù)位和其它必須

12、的數(shù)位,如奇偶校驗(yàn)位等。 大多數(shù)串行接口電路的接收波特率和發(fā)送波特率可以分別設(shè)置,但接收方的接收波特率必須與發(fā)送方的發(fā)送波特率相同。通信線上所傳輸?shù)淖址麛?shù)據(jù)(代碼)是逐為位傳送的,1個(gè)字符由若干位組成,因此每秒鐘所傳輸?shù)淖址麛?shù)(字符速率)和波特率是兩種概念。在串行通信中,所說(shuō)的傳輸速率是指波特率,而不是指字符速率,它們兩者的關(guān)系是:假如在異步串行通信中,傳送一個(gè)字符,包括12位(其中有一個(gè)起始位,8個(gè)數(shù)據(jù)位,2個(gè)停止位),其傳輸速率是1200b/s,每秒所能傳送的字符數(shù)是1200/(1+8+1+2)=100個(gè)。圖6(2)、發(fā)送接收時(shí)鐘在串行傳輸過程中,二進(jìn)制數(shù)據(jù)序列是以數(shù)字信號(hào)波形的形式出現(xiàn)的

13、,如何對(duì)這些數(shù)字波形定時(shí)發(fā)送出去或接收進(jìn)來(lái),以及如何對(duì)發(fā)收雙方之間的數(shù)據(jù)傳輸進(jìn)行同步控制的問題就引出了發(fā)送接收時(shí)鐘的應(yīng)用。在發(fā)送數(shù)據(jù)時(shí),發(fā)送器在發(fā)送時(shí)鐘(下降沿)作用下將發(fā)送移位寄存器的數(shù)據(jù)按串行移位輸出;在接收數(shù)據(jù)時(shí),接收器在接收時(shí)鐘(上升沿)作用下對(duì)來(lái)自通信線上串行數(shù)據(jù),按位串行移入移位寄存器??梢姡l(fā)送接收時(shí)鐘是對(duì)數(shù)字波形的每一位進(jìn)行移位操作,因此,從這個(gè)意義上來(lái)講,發(fā)送接收時(shí)鐘又可叫做移位始終脈沖。另外,從數(shù)據(jù)傳輸過程中,收方進(jìn)行同步檢測(cè)的角度來(lái)看,接收時(shí)鐘成為收方保證正確接收數(shù)據(jù)的重要工具。為此,接收器采用比波特率更高頻率的時(shí)鐘來(lái)提高定位采樣的分辨能力和抗干擾能力。(3)、波特率因子

14、在波特率指定后,輸入移位寄存器/輸出移位寄存器在接收時(shí)鐘/發(fā)送時(shí)鐘控制下,按指定的波特率速度進(jìn)行移位。一般幾個(gè)時(shí)鐘脈沖移位一次。要求:接收時(shí)鐘/發(fā)送時(shí)鐘是波特率的16、32或64倍。波特率因子就是發(fā)送接收1個(gè)數(shù)據(jù)(1個(gè)數(shù)據(jù)位)所需要的時(shí)鐘脈沖個(gè)數(shù),其單位是個(gè)位。如波特率因子為16,則16個(gè)時(shí)鐘脈沖移位1次。 例:波特率=9600bps,波特率因子=32,則 接收時(shí)鐘和發(fā)送時(shí)鐘頻率=9600×32=297200Hz。(4)、傳輸距離串行通信中,數(shù)據(jù)位信號(hào)流在信號(hào)線上傳輸時(shí),要引起畸變,畸變的大小與以下因素有關(guān):波特率信號(hào)線的特征(頻帶范圍)傳輸距離信號(hào)的性質(zhì)及大小(電平高低、電流大小)

15、當(dāng)畸變較大時(shí),接收方出現(xiàn)誤碼。在規(guī)定的誤碼率下,當(dāng)波特率、信號(hào)線、信號(hào)的性質(zhì)及大小一定時(shí),串行通信的傳輸距離就一定。為了加大傳輸距離,必須加調(diào)制解調(diào)器。5、調(diào)制解調(diào)器(MODEM)計(jì)算機(jī)的通信是要求傳送數(shù)字信號(hào),而在進(jìn)行遠(yuǎn)程數(shù)據(jù)通信時(shí),通信線路往往是借用現(xiàn)存的公用電話網(wǎng),但是,電話網(wǎng)是為3003400HZ 之間的音頻信號(hào)設(shè)計(jì)的,這對(duì)二進(jìn)制數(shù)據(jù)的傳輸不適合。為此,在發(fā)送時(shí),需要將二進(jìn)制信號(hào)調(diào)制成相應(yīng)的音頻信號(hào),以適合在電話網(wǎng)上傳輸。在接收后時(shí),需要對(duì)音頻信號(hào)進(jìn)行調(diào)解還原成數(shù)字信號(hào)。因此,在發(fā)送端使用調(diào)制器(Modulator)把數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào),(該模擬信號(hào)攜帶了數(shù)據(jù)信號(hào),稱為載波信號(hào)),

16、模擬信號(hào)經(jīng)通信線傳送到接收方,接收方再以解調(diào)器(Demodulator),把模擬信號(hào)變?yōu)閿?shù)字信號(hào)。大多數(shù)情況下,調(diào)制器和解調(diào)器合在一個(gè)裝置中,稱為“調(diào)制解調(diào)器”Modem。在通信中,Modem起著傳輸信號(hào)的作用,是一種數(shù)據(jù)通信設(shè)備(Data Communication equipment),簡(jiǎn)稱DCE或稱數(shù)傳機(jī)(Dataset),接收設(shè)備和發(fā)送設(shè)備稱為數(shù)據(jù)終端設(shè)備(data terminal equipment),簡(jiǎn)稱DTE。加入Modem后,通信系統(tǒng)的結(jié)構(gòu)如圖7所示圖7調(diào)制信號(hào)的方法有:把采用調(diào)頻方式的稱為FSK對(duì)應(yīng)頻移鍵控FSK類型的MODEM;把采用調(diào)相方式的稱為PSK對(duì)應(yīng)相移鍵控PSK

17、類型的MODEM;把采用調(diào)幅方式的稱為ASK對(duì)應(yīng)振幅鍵控ASK類型的MODEM。當(dāng)波特率小于300時(shí),一般采用頻移控鍵(FSK)調(diào)制方式,或者稱為兩態(tài)調(diào)頻。它的基本原理是把“0”和“1”的兩種數(shù)字信號(hào)分別調(diào)制成不同頻率的兩個(gè)音頻信號(hào)。其原理圖如圖8所示。圖8兩個(gè)不同頻率的模擬信號(hào)f1和f2 ,分別經(jīng)過電子開關(guān)S1、S2送到運(yùn)算放大器A的輸入端相加點(diǎn)。電子開關(guān)的通斷由外部控制,并且當(dāng)加高電平時(shí),接通;加低電平時(shí),斷開。利用被傳輸?shù)臄?shù)字信號(hào)(即數(shù)據(jù))去控制開關(guān)。當(dāng)數(shù)字信號(hào)為“1”時(shí),使電子開關(guān)S1接通,送出一串頻率較高的模擬信號(hào)f1;當(dāng)數(shù)字信號(hào)為“0”時(shí),使電子開關(guān)S2接通,送出一串頻率較低的模擬

18、信號(hào)f2。于是這兩個(gè)不同頻率的信號(hào)經(jīng)運(yùn)算放大器相加后,在運(yùn)算放大器的輸出端,就得到了調(diào)制后的兩種頻率的音頻信號(hào)。6、串口通訊異步通信方式串行通信可以分為兩種類型:同步通信、異步通信。(1)、異步通信的特點(diǎn)及信息幀格式:以起止式異步協(xié)議為例,下圖顯示的是起止式一幀數(shù)據(jù)的格式:圖9起止式異步通信的特點(diǎn)是:一個(gè)字符一個(gè)字符地傳輸,每個(gè)字符一位一位地傳輸,并且傳輸一個(gè)字符時(shí),總是以“起始位”開始,以“停止位”結(jié)束,字符之間沒有固定的時(shí)間間隔要求。每一個(gè)字符的前面都有一位起始位(低電平,邏輯值),字符本身由5-7位數(shù)據(jù)位組成,接著字符后面是一位校驗(yàn)位(也可以沒有校驗(yàn)位),最后是一位或一位半或二位停止位,

19、停止位后面是不定長(zhǎng)的空閑位。停止位和空閑位都規(guī)定為高電平(邏輯值),這樣就保證起始位開始處一定有一個(gè)下跳沿。從圖中可看出,這種格式是靠起始位和停止位來(lái)實(shí)現(xiàn)字符的界定或同步的,故稱為起止式協(xié)議。異步通信可以采用正邏輯或負(fù)邏輯,正負(fù)邏輯的表示如下表所示: 邏輯0邏輯1正邏輯低電平高電平負(fù)邏輯高電平低電平異步通信的信息格式如下邊的表所示:起始位邏輯01位數(shù)據(jù)位邏輯0或15位、6位、7位、8位校驗(yàn)位邏輯0或11位或無(wú)停止位邏輯11位,1.5位或2位空閑位邏輯1任意數(shù)量例:傳送8位數(shù)據(jù)45H(0100,0101B),奇校驗(yàn),1個(gè)停止位,則信號(hào)線上的波形象圖10所示那樣:異步通信的速率:若960

20、0bps,每字符8位,1起始,1停止,無(wú)奇偶,則實(shí)際每字符傳送10位,則960字符/秒。圖10(2)、異步通信的接收過程接收端以“接收時(shí)鐘”和“波特率因子”決定一位的時(shí)間長(zhǎng)度。下面以波特率因子等于16(接收時(shí)鐘每16個(gè)時(shí)鐘周期,使接收移位寄存器移位一次)、正邏輯為例說(shuō)明,如圖11所示。圖11、開始通信時(shí),信號(hào)線為空閑(邏輯1),當(dāng)檢測(cè)到由1到0的跳變時(shí),開始對(duì)“接收時(shí)鐘”計(jì)數(shù)。、當(dāng)計(jì)到8個(gè)時(shí)鐘時(shí),對(duì)輸入信號(hào)進(jìn)行檢測(cè),若仍為低電平,則確認(rèn)這是“起始位”B,而不是干擾信號(hào)。、接收端檢測(cè)到起始位后,隔16個(gè)接收時(shí)鐘,對(duì)輸入信號(hào)檢測(cè)一次,把對(duì)應(yīng)的值作為D0位數(shù)據(jù)。若為邏輯1, 作為數(shù)據(jù)位1;若為邏輯0

21、,作為數(shù)據(jù)位0。、再隔16個(gè)接收時(shí)鐘,對(duì)輸入信號(hào)檢測(cè)一次,把對(duì)應(yīng)的值作為D1位數(shù)據(jù)。.,直到全部數(shù)據(jù)位都輸入。、檢測(cè)校驗(yàn)位P(如果有的話)。、接收到規(guī)定的數(shù)據(jù)位個(gè)數(shù)和校驗(yàn)位后,通信接口電路希望收到停止位S(邏輯1),若此時(shí)未收到邏輯1,說(shuō)明出現(xiàn)了錯(cuò)誤,在狀態(tài)寄存器中置“幀錯(cuò)誤”標(biāo)志。若沒有錯(cuò)誤,對(duì)全部數(shù)據(jù)位進(jìn)行奇偶校驗(yàn),無(wú)校驗(yàn)錯(cuò)時(shí),把數(shù)據(jù)位從移位寄存器中送數(shù)據(jù)輸入寄存器。若校驗(yàn)錯(cuò),在狀態(tài)寄存器中置奇偶錯(cuò)標(biāo)志。、本幀信息全部接收完,把線路上出現(xiàn)的高電平作為空閑位。、當(dāng)信號(hào)再次變?yōu)榈蜁r(shí),開始進(jìn)入下一幀的檢測(cè)。(3)異步通信的發(fā)送過程發(fā)送端以“發(fā)送時(shí)鐘”和“波特率因子”決定一位的時(shí)間長(zhǎng)度。、當(dāng)初始化

22、后,或者沒有信息需要發(fā)送時(shí),發(fā)送端輸出邏輯1,即空閑位,空閑位可以有任意數(shù)量。、當(dāng)需要發(fā)送時(shí),發(fā)送端首先輸出邏輯0,作為起始位。、接著,發(fā)送端首先發(fā)送D0位,直到各數(shù)據(jù)位發(fā)送完。、如果需要的話,發(fā)送端輸出校驗(yàn)位。、最后,發(fā)送端輸出停止位(邏輯1)。、如果沒有信息需要發(fā)送時(shí),發(fā)送端輸出邏輯1,即空閑位,空閑位可以有任意數(shù)量。如果還有信息需要發(fā)送,轉(zhuǎn)入第步。對(duì)于以上發(fā)送、接收過程應(yīng)注意以下幾點(diǎn):、接收端總是在每個(gè)字符的頭部(即起始位)進(jìn)行一次重新定位,因此發(fā)送端可以在字符之間插入不等長(zhǎng)的空閑位,不影響接收端的接收。、發(fā)送端的發(fā)送時(shí)鐘和接收端的接收時(shí)鐘,其頻率允許有一定差異,當(dāng)頻率差異在一定范圍內(nèi),

23、不會(huì)引起接收端檢測(cè)錯(cuò)位,能夠正確接收。并且這種頻率差異不會(huì)因多個(gè)字符的連續(xù)接收而造成誤差累計(jì)(因?yàn)槊總€(gè)字符的開始(起始位處)接收方均重新定位)。只有當(dāng)發(fā)送時(shí)鐘和接收時(shí)鐘頻率差異太大,引起接收端采樣錯(cuò)位,才造成接收錯(cuò)誤。、起始位、校驗(yàn)位、停止位、空閑位的信號(hào),由“發(fā)送移位寄存器”自動(dòng)插入。在接收方,“接收移位寄存器”接收到一幀完整信息(起始、數(shù)據(jù)、校驗(yàn)、停止)后,僅把數(shù)據(jù)的各位送至“數(shù)據(jù)輸入寄存器”,即CPU從“數(shù)據(jù)輸入寄存器”中讀得的信息,只是有效數(shù)字,不包含起始位、校驗(yàn)位、停止位信息。7、串口通訊同步通信方式(1)、同步通信方式的特點(diǎn):采用同步通信時(shí),將許多字符組成一個(gè)信息組,這樣,字符可以

24、一個(gè)接一個(gè)地傳輸,但是,在每組信息(通常稱為幀)的開始要加上同步字符,在沒有信息要傳輸時(shí),要填上空字符,因?yàn)橥絺鬏敳辉试S有間隙。在同步傳輸過程中,一個(gè)字符可以對(duì)應(yīng)58位。當(dāng)然,對(duì)同一個(gè)傳輸過程,所有字符對(duì)應(yīng)同樣的數(shù)位,比如說(shuō)n位。這樣,傳輸時(shí),按每n位劃分為一個(gè)時(shí)間片,發(fā)送端在一個(gè)時(shí)間片中發(fā)送一個(gè)字符,接收端則在一個(gè)時(shí)間片中接收一個(gè)字符。同步傳輸時(shí),一個(gè)信息幀中包含許多字符,每個(gè)信息幀用同步字符作為開始,一般將同步字符和空字符用同一個(gè)代碼。在整個(gè)系統(tǒng)中,由一個(gè)統(tǒng)一的時(shí)鐘控制發(fā)送端的發(fā)送和空字符用同一個(gè)代碼。接收端當(dāng)然是應(yīng)該能識(shí)別同步字符的,當(dāng)檢測(cè)到有一串?dāng)?shù)位和同步字符相匹配時(shí),就認(rèn)為開始一個(gè)

25、信息幀,于是,把此后的數(shù)位作為實(shí)際傳輸信息來(lái)處理。(2)、面向字符的同步協(xié)議(IBM的BSC協(xié)議)圖12該協(xié)議規(guī)定了10個(gè)特殊字符(稱為控制字符)作為信息傳輸?shù)臉?biāo)志。其格式為:SYNSOH標(biāo)題STX數(shù)據(jù)塊ETB/ETX塊校驗(yàn)SYN:同步字符(Synchronous character),每幀可加1個(gè)(單同步)或2個(gè)(雙同步)同步字符。SOH:標(biāo)題開始(Start of Header)。標(biāo)題:Header,包含源地址(發(fā)送方地址)、目的地址(接收方地址)、路由指示。STX:正文開始(Start of Text)。數(shù)據(jù)塊:正文(Text),由多個(gè)字符組成。ETB:塊傳輸結(jié)束(end of tran

26、smission block), 標(biāo)識(shí)本數(shù)據(jù)塊結(jié)束。ETX:全文結(jié)束(end of text),(全文分為若干塊傳輸)。塊校驗(yàn):對(duì)從SOH開始,直到ETB/ETX字段的檢驗(yàn)碼。(3)、面向bit的同步協(xié)議(ISO的HDLC)圖13一幀信息可以是任意位,用位組合標(biāo)識(shí)幀的開始和結(jié)束。 幀格式為:F場(chǎng)A場(chǎng)C場(chǎng)I場(chǎng)FC場(chǎng)F場(chǎng)F場(chǎng):標(biāo)志場(chǎng);作為一幀的開始和結(jié)束,標(biāo)志字符為8位,01111110。A場(chǎng):地址場(chǎng),規(guī)定接收方地址,可為8的整倍位。接收方檢查每個(gè)地址字節(jié)的第1位,如果為“0”,則后邊跟著另一個(gè)地址字節(jié)。若為“1”,則該字節(jié)為最后一個(gè)地址字節(jié)。C場(chǎng):控制場(chǎng)。指示信息場(chǎng)的類型,8位或16位。若第1字

27、節(jié)的第1位為0,則還有第2個(gè)字節(jié)也是控制場(chǎng)。I場(chǎng):信息場(chǎng)。要傳送的數(shù)據(jù)。FC場(chǎng):幀校驗(yàn)場(chǎng)。16位循環(huán)冗余校驗(yàn)碼CRC。除F場(chǎng)和自動(dòng)插入的“0”位外,均參加CRC計(jì)算。(4)、同步通信的“0位插入和刪除技術(shù)”在同步通信中,一幀信息以一個(gè)(或幾個(gè))特殊字符開始,例如,F(xiàn)場(chǎng)=01111110B。但在信息幀的其他位置,完全可能出現(xiàn)這些特殊字符,為了避免接收方把這些特殊字符誤認(rèn)為幀的開始,發(fā)送方采用了“0位插入技術(shù)”,相應(yīng)地,接收方采用“0位刪除技術(shù)”。發(fā)送方的0位插入:除了起始字符外,當(dāng)連續(xù)出現(xiàn)5個(gè)1時(shí),發(fā)送方自動(dòng)插入一個(gè)0。使得在整個(gè)信息幀中,只有起始字符含有連續(xù)的6個(gè)1。接收方的“0位刪除技術(shù)”:

28、接收方收到連續(xù)6個(gè)1,作為幀的起始,把連續(xù)出現(xiàn)5個(gè)1后的0自動(dòng)刪除。(5)、同步通信的“字節(jié)填充技術(shù)”設(shè)需要傳送的原始信息幀為:SOTDATAEOT字節(jié)填充技術(shù)采用字符替換方式,使信息幀的DATA中不出現(xiàn)起始字符SOT和結(jié)束字符EOT。設(shè)按下表方式進(jìn)行替換:DATA中的原字符替換為SOTESC XEOTESC YESCESC Z其中,ESC=1AH,X、Y、Z可指定為任意字符(除SOT、EOT、ESC外)。發(fā)送方按約定方式對(duì)需要發(fā)送的原始幀進(jìn)行替換,并把替換后的新的幀發(fā)送給接收方。例如圖所示:圖14接收方按約定方式進(jìn)行相反替換,可以獲得原始幀信息。(6)、異步通信和同步通信的比較、異步通信簡(jiǎn)單

29、,雙方時(shí)鐘可允許一定誤差。同步通信較復(fù)雜,雙方時(shí)鐘的允許誤差較小。、異步通信只適用于點(diǎn)<-> 點(diǎn),同步通信可用于點(diǎn)<-> 多。、通信效率:異步通信低,同步通信高。8、串行接口的物理層標(biāo)準(zhǔn)通用的串行IO接口有許多種,現(xiàn)僅就最常見的兩種標(biāo)準(zhǔn)作簡(jiǎn)單介紹。(1)EIA RS232C這是美國(guó)電子工業(yè)協(xié)會(huì)推薦的一種標(biāo)準(zhǔn)(Electronic industries Association Recoil-mended Standard)。它在一種25針接插件(DB25)上定義了串行通信的有關(guān)信號(hào)。這個(gè)標(biāo)準(zhǔn)后來(lái)被世界各國(guó)所接受并使用到計(jì)算機(jī)的IO接口中。信號(hào)連線在實(shí)際異步串行通信中,并不

30、要求用全部的RS232C信號(hào),許多PCXT兼容機(jī)僅用15針接插件(DB15)來(lái)引出其異步串行IO信號(hào),而PC中更是大量采用9針接插件(DB9)來(lái)?yè)?dān)當(dāng)此任,因此這里也不打算就 RS232C 的全部信號(hào)作詳細(xì)解釋。圖2 給出兩臺(tái)微機(jī)利用RS232C接口通信的聯(lián)線(無(wú)MODEM),我們按DB25的引腳號(hào)標(biāo)注各個(gè)信號(hào)。 下面對(duì)圖2中幾個(gè)主要信號(hào)作簡(jiǎn)要說(shuō)明。圖15保護(hù)地 通信線兩端所接設(shè)備的金屬外殼通過此線相聯(lián)。當(dāng)通信電纜使用屏蔽線時(shí),常利用其外皮金屬屏蔽網(wǎng)來(lái)實(shí)現(xiàn)。由于各設(shè)備往往已通過電源線接通保護(hù)地,因此,通信線中不必重復(fù)接此地線(圖中用虛線表示)。例如使用9針插頭(DB9)的異步串行IO接口就沒有引

31、出保護(hù)地信號(hào)。 TXDRXD 是一對(duì)數(shù)據(jù)線,TXD 稱發(fā)送數(shù)據(jù)輸出,RXD 稱接收數(shù)據(jù)輸入。當(dāng)兩臺(tái)微機(jī)以全雙工方式直接通信(無(wú)MODEM方式)時(shí),雙方的這兩根線應(yīng)交叉聯(lián)接(扭接)。信號(hào)地 所有的信號(hào)都要通過信號(hào)地線構(gòu)成耦合回路。通信線有以上三條(TXD、RXD 和信號(hào)地)就能工作了。其余信號(hào)主要用于雙方設(shè)備通信過程中的聯(lián)絡(luò)(握手信號(hào)),而且有些信號(hào)僅用于和MODEM的聯(lián)絡(luò)。若采取微型機(jī)對(duì)微型機(jī)直接通信,且雙方可直接對(duì)異步串行通信電路芯片編程,若設(shè)置成不要任何聯(lián)絡(luò)信號(hào),則其它線都可不接。有時(shí)在通信線的同一端將相關(guān)信號(hào)短接以“自握手”方式滿足聯(lián)絡(luò)要求。這就是如圖2(a)所示的情況。RTSCTS 請(qǐng)

32、求發(fā)送信號(hào)RTS是發(fā)送器輸出的準(zhǔn)備好信號(hào)。接收方準(zhǔn)備好后送回清除發(fā)送信號(hào)CTS后,發(fā)送數(shù)據(jù)開始進(jìn)行,在同一端將這兩個(gè)信號(hào)短接就意味著只要發(fā)送器準(zhǔn)備好即可發(fā)送。DCD 載波檢測(cè)(又稱接收線路信號(hào)檢測(cè))。本意是MODEM檢測(cè)到線路中的載波信號(hào)后,通知終端準(zhǔn)備接收數(shù)據(jù)的信號(hào),在沒有接MODEM的情況下,也可以和RTS、CTS短接。相對(duì)于MODEM而言,微型機(jī)和終端機(jī)一樣被稱為數(shù)據(jù)終端DTE(Data Terminal Equipment)而MODEM被稱為數(shù)據(jù)通信裝置DCE(Data Communications Equipment),DTE和DCE之間的連接不能像圖2中有“扭接”現(xiàn)象,而應(yīng)該是按接

33、插件芯號(hào),同名端對(duì)應(yīng)相接。此處介紹的RS232C的信號(hào)名稱及信號(hào)流向都是對(duì)DTE而言的。DTRDSR 數(shù)據(jù)終端準(zhǔn)備好時(shí)發(fā)DTR信號(hào),在收到數(shù)據(jù)通信裝置裝備好DSR信號(hào)后,方可通信。圖3-2(a)中將這一對(duì)信號(hào)以“自握手”方式短接。R1 原意是在MODEM接收到電話交換機(jī)有效的撥號(hào)時(shí),使RI有效,通知數(shù)據(jù)終端準(zhǔn)備傳送。在無(wú)MODEM時(shí)也可和DTR相接。圖15(b)給出了無(wú)MODEM情況下,DTE對(duì)DTE異步串行通信線路的完整連接,它不僅適用于微型機(jī)和微型機(jī)之間的通信,還適用于微型機(jī)和異步串行外部設(shè)備(如終端機(jī)、繪圖儀、數(shù)字化儀等)的連接。信號(hào)電平規(guī)定RS232C規(guī)定了雙極性的信號(hào)邏輯電平: -3

34、V到-25V之間的電平表示邏輯“1”。 +3V到+25V之間的電平表示邏輯“0”。 因此這是一套負(fù)邏輯定義。 以上標(biāo)準(zhǔn)稱為EIA電平。PCXT系列使用的信號(hào)電平是-12V和+12V,符合EIA標(biāo)準(zhǔn),但在計(jì)算機(jī)內(nèi)部流動(dòng)的信號(hào)都是TTL電平,因此這中間需要用電平轉(zhuǎn)換電路。常用芯片MCl488或SN75150將TTL電平轉(zhuǎn)換為EIA電平,MCl489或SN75154將EIA電平轉(zhuǎn)換為TTL電平。PCXT系列以這種方式進(jìn)行串行通信時(shí),在波特率不高于9600的情況下,理論上通信線的長(zhǎng)度限制紐為15米。(2)20mA電流環(huán)20mA電流環(huán)并沒有形成一套完整的標(biāo)準(zhǔn),主要是將數(shù)字信號(hào)的表示方法不使用電子的高低,

35、而改用20mA電流的有無(wú):“1”信號(hào)在環(huán)路中產(chǎn)生20mA電流;“0”信號(hào)無(wú)電流產(chǎn)生。當(dāng)然也需要有電路來(lái)實(shí)現(xiàn)TTL電平和20mA電流之間的轉(zhuǎn)換。圖3是PCXT微機(jī)中使用的一種20mA電流環(huán)接口。當(dāng)發(fā)送方SOUT1時(shí),便有20mA電流灌入接收方的光耦合器,于是光耦合器導(dǎo)通,使SIN1。反之當(dāng)發(fā)送方SOUT0時(shí)環(huán)路電流為零,接收方光耦合器截止,SIN0。顯然,當(dāng)要求雙工方式通信時(shí),雙方都應(yīng)各有收發(fā)電路,通信聯(lián)線至少要4根。由于通信雙方利用光耦合器實(shí)現(xiàn)電氣上隔離,而且信號(hào)又是雙端回路方式,故有很強(qiáng)的抗干擾性,可以傳送遠(yuǎn)至1千米的距離。圖16“0”、“1”信號(hào)的表示方法不同外,其他方面(如字符的傳輸格式

36、)常借用 RS232C 標(biāo)準(zhǔn)。因此 PCXT 微機(jī)中的異步串行信道接口往往將這兩種標(biāo)準(zhǔn)做在一起,實(shí)際通過跨接線從二者中擇一使用。 9、ARM自帶的串行口寄存器ARM自帶三個(gè)UART端口,每個(gè)UART通道都有16字節(jié)的FIFO(先入先出寄存器)用于接受和發(fā)送。用系統(tǒng)時(shí)鐘最大波特率可達(dá) 230.4K,如果用外部時(shí)鐘(UCLK)UART 可以以更高的波特率運(yùn)行。S3C2410X UART包括可編程波特率,紅外發(fā)送/接收,插入一個(gè)或兩個(gè)停止位,5字節(jié),6字節(jié),7字節(jié),或8字節(jié)數(shù)據(jù)寬度和奇偶校驗(yàn)。其特點(diǎn)是: -基于DMA或者中斷操作的RxD0,TxD0,RxD1,TxD1,RxD2,TxD2。 -包括I

37、rDA 1.0和16字節(jié)FIFO的UART通道0,1,2。 -包括nRTS0,nCTS0,nRTS1和nCTS1的UART通道。 -支持握手方式的接收/發(fā)送。與UART有關(guān)的寄存器主要有以下幾個(gè):(1)、UART線控制寄存器包括ULCON0,ULCON1和ULCON2,主要用來(lái)選擇每幀數(shù)據(jù)位數(shù)、停止位數(shù),奇偶校驗(yàn)?zāi)J郊笆欠袷褂眉t外模式,如表1,2所示。表1 UART寄存器設(shè)置表2 UART寄存器位描述(2)、UART控制寄存器包括UCON0, UCON1 and UCON2,主要用來(lái)選擇時(shí)鐘,接收和發(fā)送中斷類型(即電平還是脈沖觸發(fā)類型),接收超時(shí)使能,接收錯(cuò)誤狀態(tài)中斷使能,回環(huán)模式,發(fā)送接收模

38、式等。如表3, 4所示表3 UART控制寄存器設(shè)置表4 UART控制寄存器位描述(3)、UART錯(cuò)誤狀態(tài)寄存器包括UERSTAT0, UERSTAT1 and UERSTAT2,此狀態(tài)寄存器的相關(guān)位表明是否有幀錯(cuò)誤或溢出錯(cuò)誤發(fā)生。如表5,6所示表5 UART錯(cuò)誤狀態(tài)寄存器設(shè)置表6 UART錯(cuò)誤狀態(tài)寄存器位描述注意:在讀取UART錯(cuò)誤狀態(tài)寄存器時(shí),這些位(UERSATn3:0)會(huì)自動(dòng)清零。(4)在UART模塊中有三個(gè)接收/發(fā)送狀態(tài)寄存器,包括UTRSTAT0,UTRSTAT1和UTRSTAT2。如表7, 8所示:表7 UART接收/發(fā)送寄存器設(shè)置表8 UART接收/發(fā)送寄存器位描述(5)在UAR

39、T模塊中有3個(gè)UART發(fā)送緩沖寄存器,包括UTXH0,UTXH1和UTXH2,UTXHn有8位發(fā)送數(shù)據(jù)。如下表9:表9 UART發(fā)送緩沖寄存器其功能如下表10所示:表10 UART發(fā)送緩沖寄存器功能注意:(L):小端模式,(B):大端模式(6)在UART模塊中有3個(gè)UART接收緩沖寄存器,包括URXH0,URXH1和URXH2,URXHn有8位接收數(shù)據(jù)。如表11:表11 UART接收緩沖寄存器其功能如下表12所示:表12 UART接收緩沖寄存器功能注意:當(dāng)發(fā)生溢出錯(cuò)誤時(shí),必須讀URXHn。否則,即使UERSTATn的溢出位已經(jīng)清零,下個(gè)已接收數(shù)據(jù)也會(huì)產(chǎn)生溢出錯(cuò)誤。(7)UART波特率因子寄存器

40、:表13 UART波特率因子寄存器設(shè)置表14 UART波特率因子寄存器功能UART包括三個(gè)波特率因子寄存器UBRDIV0, UBRDIV1 and UBRDIV2,存儲(chǔ)在波特率因子寄存器(UBRDIVn)中的值決定串口發(fā)送和接收的時(shí)鐘數(shù)率(波特率),計(jì)算公式如下:UBRDIVn = (int)(PCLK / (bps x 16) ) 1或UBRDIVn = (int)(UCLK / (bps x 16) ) 1例如:如果波特率是115200,PCLK or或UCLK 是40 MHz,那么UBRDIVn :UBRDIVn = (int)(40000000 / (115200 x 16) ) -1

41、= (int)(21.7) -1= 21 -1 = 20六、 試驗(yàn)步驟本次實(shí)驗(yàn)安排4節(jié)課,任務(wù)很繁重。1、 將工程“Exp1 ARM串口實(shí)驗(yàn)”打開,分別觀察工程的目標(biāo)設(shè)置:Debug Setting ; Release Setting。(目的是讓大家進(jìn)一步熟悉ARM開發(fā)環(huán)境ADS1.2的使用,大家在看相關(guān)參數(shù)設(shè)置的時(shí)候,請(qǐng)閱讀在線幫助文檔,就明白相應(yīng)參數(shù)的意義了,這是一個(gè)艱苦的過程,這些在線幫助文檔經(jīng)??矗坏鲞M(jìn)ARM開發(fā)知識(shí),還提高英語(yǔ))2、 對(duì)工程進(jìn)行編譯,然后下載到目標(biāo)機(jī)(嵌入式系統(tǒng)開發(fā)的特點(diǎn)就是交叉調(diào)試,我們的PC機(jī)是宿主機(jī),開發(fā)箱里面的板子就是目標(biāo)機(jī))上運(yùn)行。注意:這個(gè)過程需要我們

42、前面實(shí)驗(yàn)的知識(shí),如燒寫B(tài)ootloader程序vivi;超級(jí)終端的建立(如果已經(jīng)建立就不用建立了)。程序運(yùn)行的時(shí)候,敲一下鍵盤,就會(huì)在超級(jí)終端上顯示你輸入的字符,這個(gè)字符是怎么傳送的?分析一下)3、 在工程中打開工程文件,看這個(gè)工程是怎么實(shí)現(xiàn)的。了解一個(gè)ARM運(yùn)用程序的基本框架。4、 看傳的文檔“um_s3c2410s_rev12_030428”和“ARM芯片S3C2410關(guān)于UART的文檔”,結(jié)合程序代碼的分析,了解串口通訊程序是如何實(shí)現(xiàn)的。5、 安裝UArmJtag2.0程序(具體如何安裝請(qǐng)看UArmJtag使用指南,該文檔中的“ARM flash下載程序的使用”不要作,“SDT 2.51

43、的設(shè)置”也不要作),嘗試進(jìn)行仿真調(diào)試。七、 串口程序代碼分析1、系統(tǒng)啟動(dòng)程序所執(zhí)行的操作跟具體的目標(biāo)系統(tǒng)和開發(fā)系統(tǒng)相關(guān),一般通用的內(nèi)容包括:􀂋 中斷向量表􀂋 初始化存儲(chǔ)器系統(tǒng)􀂋 初始化堆棧􀂋 初始化有特殊要求的端口、設(shè)備􀂋 初始化應(yīng)用程序執(zhí)行環(huán)境􀂋 改變處理器模式􀂋 呼叫主應(yīng)用程序串口實(shí)驗(yàn)完成這一任務(wù)的是startup.s 程序:GET 2410addr.s; Some ARM920CPSR bit descriptions;Pre-defined constants

44、;這部分在預(yù)定義一些常量USERMODE EQU0x10FIQMODE EQU0x11IRQMODE EQU0x12SVCMODE EQU0x13ABORTMODE EQU0x17UNDEFMODE EQU0x1bMODEMASK EQU0x1fNOINT EQU0xc0I_Bit*0x80F_Bit*0x40; MMURegister description;p15CP15;c0CN0;c1CN1;c2CN2;c3CN3CtrlMMU*1CtrlAlign*2CtrlCache*4CtrlWBuff*8CtrlBigEnd*128CtrlSystem*256CtrlROM*512;initi

45、alizationL0 is MMU FULL_ACCESS, DOMAIN, SECTIONTLB_L0_INIT*0x0C02; 整個(gè)初始化程序從這里開始,設(shè)置中斷向量表,ARM要求中斷向量表必須放置在從0地址開始,連續(xù)8×4字節(jié)的空間內(nèi)。;AREAInit,CODE,READONLYIMPORT _use_no_semihosting_swiIMPORTEnter_UNDEFIMPORTEnter_SWIIMPORTEnter_PABORTIMPORTEnter_DABORTIMPORTEnter_FIQENTRY ; ENTRY是指定編譯器保留這段代碼bColdReset;復(fù)

46、位bEnter_UNDEF;未定義指令bEnter_SWI;軟件中斷bEnter_PABORT;指令預(yù)取中止bEnter_DABORT;數(shù)據(jù)中止b.;保留bIRQ_Handler;中斷請(qǐng)求處理bEnter_FIQ;快中斷請(qǐng)求處理;處理正常的中斷請(qǐng)求EXPORTIRQ_HandlerIRQ_HandlerIMPORTISR_IrqHandlerSTMFDsp!, r0-r12, lrBLISR_IrqHandlerLDMFDsp!, r0-r12, lrSUBSpc, lr,#4;=; ENTRY ;=;處理負(fù)責(zé)操作EXPORT ColdResetColdResetldrr0,=WTCON;關(guān)閉

47、看門狗 ldrr1,=0x0strr1,r0ldrr0,=INTMSKldrr1,=0xffffffff;禁止所有中斷strr1,r0ldrr0,=INTSUBMSKldrr1,=0x7ff;禁止所有的子中斷strr1,r0;*;*堆棧的初始化 * ;*blInitStacks; 為每一種模式初始化堆棧;把異常處理向量表復(fù)制到SRAM中的0x00處;IMPORT|Load$EXCEPTION_EXEC$Base|IMPORT|Image$EXCEPTION_EXEC$Base|IMPORT|Image$EXCEPTION_EXEC$Length|ldrr0,=|Load$EXCEPTION_E

48、XEC$Base|;源數(shù)據(jù)ldrr1,=|Image$EXCEPTION_EXEC$Base|;在0x00處放置異常向量表ldrr2,=|Image$EXCEPTION_EXEC$Length|exception_cploopsubr2,r2,#4ldmiar0!,r3stmiar1!,r3cmpr2, #0bge exception_cploop; 用C語(yǔ)言寫主要的功能; ;IMPORT _mainBL_main ;不能用main();呼叫主應(yīng)用程序B.;*;*初始化堆棧;* 因?yàn)锳RM 處理器有7 種執(zhí)行狀態(tài),每一種狀態(tài)的堆棧指針寄存器(SP)都是獨(dú)立的(System 和User 模式使用

49、相同的SP 寄存器)。因此對(duì)程序中需要用到的每一種模式都要給SP 寄存器定義一個(gè)堆棧地址。方法是改變狀態(tài)寄存器CPSR 內(nèi)的狀態(tài)位,使處理器切換到不同的狀態(tài),然后給SP 賦值。注意不要切換到User模式進(jìn)行User模式的堆棧設(shè)置,因?yàn)檫M(jìn)入U(xiǎn)ser模式后就不能再操作CPSR回到別的模式了。可能會(huì)對(duì)接下去的程序執(zhí)行造成影響。一般堆棧的大小要根據(jù)需要而定,但是要盡可能給堆棧分配快速和高帶寬的存儲(chǔ)器。堆棧性能的提高對(duì)系統(tǒng)整體性能的影響是非常明顯的。;*IMPORT UserStackIMPORT SVCStackIMPORT UndefStackIMPORT IRQStackIMPORT AbortS

50、tackIMPORT FIQStackInitStacks;不要用 DRAM,;SVCstack之前已經(jīng)被初始化mrsr0,cpsrbicr0,r0,#MODEMASKorrr1,r0,#UNDEFMODE|NOINTmsrcpsr_cxsf,r1;未定義模式ldrsp,=UndefStackorrr1,r0,#ABORTMODE|NOINTmsrcpsr_cxsf,r1;中止模式ldrsp,=AbortStackorrr1,r0,#IRQMODE|NOINTmsrcpsr_cxsf,r1;中斷模式ldrsp,=IRQStackorrr1,r0,#FIQMODE|NOINTmsrcpsr_cx

51、sf,r1;快中斷模式ldrsp,=FIQStack;bicr0,r0,#MODEMASK|NOINTorrr1,r0,#SVCMODE|NOINTmsrcpsr_cxsf,r1;SVC模式ldrsp,=SVCStack;用戶模式?jīng)]有被初始化movpc,lr ;在模式轉(zhuǎn)換時(shí),LR寄存器可能無(wú)效。; End of Startup.c;END; 其棧空間在匯編的時(shí)候就分好了,如下stack.s所示: AREA Stacks, DATA, NOINIT EXPORT UserStack EXPORT SVCStack EXPORT UndefStack EXPORT IRQStack EXPORT AbortStack EXPORT FIQStackSPACE4096UserStackSPACE4096SVCStackSPACE4096UndefStackSPACE4096AbortStackSPACE4096IRQStackSPACE4096FIQStackSPACE4096 END下面分析主程序:Release main.c/主邏輯函數(shù)/#include"./ucos-ii/includes.h" /* uC/OS interface */#include ".

溫馨提示

  • 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)論