第8章 嵌入式系統(tǒng)總線接口_第1頁
第8章 嵌入式系統(tǒng)總線接口_第2頁
第8章 嵌入式系統(tǒng)總線接口_第3頁
第8章 嵌入式系統(tǒng)總線接口_第4頁
第8章 嵌入式系統(tǒng)總線接口_第5頁
已閱讀5頁,還剩183頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本章主要介紹的內(nèi)容:

嵌入式系統(tǒng)的串行接口、I2C接口、USB接口、SPI接口、PCI接口、I2S總線接口的基本原理、電路結(jié)構(gòu)與編程方法。重點內(nèi)容:嵌入式系統(tǒng)的串行接口、I2C接口和SPI接口的基本原理、電路結(jié)構(gòu)與編程方法。目的和要求:掌握嵌入式系統(tǒng)的串行接口、I2C接口和SPI接口的基本原理、電路結(jié)構(gòu)與編程方法。了解USB接口、PCI接口、I2S總線接口的基本原理、電路結(jié)構(gòu)與編程方法。第8章嵌入式系統(tǒng)總線接口8.1串行接口8.1.1串行接口基本原理與結(jié)構(gòu)

1.串行通信概述常用的數(shù)據(jù)通信方式有并行通信和串行通信兩種。當(dāng)兩臺數(shù)字設(shè)備之間傳輸距離較遠(yuǎn)時,數(shù)據(jù)往往以串行方式傳輸。串行通信的數(shù)據(jù)是一位一位地進(jìn)行傳輸?shù)?,在傳輸中每一位?shù)據(jù)都占據(jù)一個固定的時間長度。與并行通信相比,如果n位并行接口傳送n位數(shù)據(jù)需時間T,則串行傳送的時間最少為nT。串行通信具有傳輸線少、成本低等優(yōu)點,特別適合遠(yuǎn)距離傳送。

①串行數(shù)據(jù)通信模式串行數(shù)據(jù)通信模式有單工通信、半雙工通信和全雙工通信3種基本的通信模式。(1)單工通信:數(shù)據(jù)僅能從設(shè)備A到設(shè)備B進(jìn)行單一方向的傳輸。(2)半雙工通信:數(shù)據(jù)可以從設(shè)備A到設(shè)備B進(jìn)行傳輸,也可以從設(shè)備B到設(shè)備A進(jìn)行傳輸,但不能在同一時刻進(jìn)行雙向傳輸。(3)全雙工通信:數(shù)據(jù)可以在同一時刻從設(shè)備A傳輸?shù)皆O(shè)備B,或從設(shè)備B傳輸?shù)皆O(shè)備A,即可以同時雙向傳輸。

②串行通信方式串行通信在信息格式的約定上可以分為同步通信和異步通信兩種方式。(1)異步通信方式異步通信時數(shù)據(jù)是一幀一幀傳送的,每幀數(shù)據(jù)包含有起始位(“0”)、數(shù)據(jù)位、奇偶校驗位和停止位(“1”),每幀數(shù)據(jù)的傳送靠起始位來同步。一幀數(shù)據(jù)的各位代碼間的時間間隔是固定的,而相鄰兩幀的數(shù)據(jù)其時間間隔是不固定的。在異步通信的數(shù)據(jù)傳送中,傳輸線上允許空字符。異步通信對字符的格式、波特率、校驗位有確定的要求。

(a)字符的格式每個字符傳送時,必須前面加一起始位,后面加上1、1.5或2位停止位。例如ASCII碼傳送時,一幀數(shù)據(jù)的組成是:前面1個起始位,接著7位ASCII編碼,再接著一位奇偶校驗位,最后一位停止位,共10位。8.1.1串行接口基本原理與結(jié)構(gòu)

(b)波特率傳送數(shù)據(jù)位的速率稱為波特率,用位/秒(bit/s)來表示,稱之為波特。例如,數(shù)據(jù)傳送的速率為120字符/秒,每幀包括10個數(shù)據(jù)位,則傳送波特率為:

10×120=1200b/s=1200波特每一位的傳送時間是波特的倒數(shù),如1/1200=0.833ms。異步通信的波特率的數(shù)值通常為:150、300、600、1200、2400、4800、9600、14400、28800等,數(shù)值成倍數(shù)變化。

(c)校驗位在一個有8位的字節(jié)(byte)中,其中必有奇數(shù)個或偶數(shù)個的“1”狀態(tài)位。對于偶校驗就是要使字符加上校驗位有偶數(shù)個“1”;奇校驗就是要使字符加上校驗位有奇數(shù)個“1”。例如數(shù)據(jù)“00010011”,共有奇數(shù)個“1”,所以當(dāng)接收器要接收偶數(shù)個“1”時(即偶校驗時),則校驗位就置為“1”,反之,接收器要接收奇數(shù)個“1”時(即奇校驗時),則校驗位就置為“0”。8.1.1串行接口基本原理與結(jié)構(gòu)一般校驗位的產(chǎn)生和檢查是由串行通信控制器內(nèi)部自動產(chǎn)生,除了加上校驗位以外,通信控制器還自動加上停止位,用來指明欲傳送字符的結(jié)束。停止位通常取1、1.5或2個位。對接收器而言,若未能檢測到停止位則意味著傳送過程發(fā)生了錯誤。在異步通信方式中,在發(fā)送的數(shù)據(jù)中含有起始位和停止位這兩個與實際需要傳送的數(shù)據(jù)毫無相關(guān)的位。如果在傳送1個8位的字符時,其校驗位、起始位和停止位都為1個位,則相當(dāng)于要傳送11個位信號,傳送效率只有約80%。8.1.1串行接口基本原理與結(jié)構(gòu)(2)同步通信方式為了提高通信效率可以采用同步通信方式。同步傳輸采用字符塊的方式,減少每一個字符的控制和錯誤檢測數(shù)據(jù)位,因而可以具有較高的傳輸速率。與異步方式不同的是,同步通信方式不僅在字符的本身之間是同步的,而且在字符與字符之間的時序仍然是同步的,即同步方式是將許多的字符聚集成一字符塊后,在每塊信息(常常稱之為信息幀)之前要加上1~2個同步字符,字符塊之后再加入適當(dāng)?shù)腻e誤檢測數(shù)據(jù)才傳送出去。在同步通信時必須連續(xù)傳輸,不允許有間隙,在傳輸線上沒有字符傳輸時,要發(fā)送專用的”空閑”字符或同步字符。在同步方式中產(chǎn)生一種所謂“冗余”字符,防止錯誤傳送。假設(shè)欲傳送的數(shù)據(jù)位當(dāng)作一被除數(shù),而發(fā)送器本身產(chǎn)生一固定的除數(shù),將前者除以后者所得的余數(shù)即為該“冗余”字符。當(dāng)數(shù)據(jù)位和“冗余”字符位一起被傳送到接收器時,接收器產(chǎn)生和發(fā)送器相同的除數(shù),如此即可檢查出數(shù)據(jù)在傳送過程中是否發(fā)生了錯誤。統(tǒng)計數(shù)據(jù)表明采用”冗余”字符方法錯誤防止率可達(dá)99%以上。8.1.1串行接口基本原理與結(jié)構(gòu)

2.RS-232C串行接口

RS-232C是美國電子工業(yè)協(xié)會EIA制定的一種串行通信接口標(biāo)準(zhǔn)。

(1)RS-232C接口規(guī)格

EIA所制定的傳送電氣規(guī)格如表。RS-232C通常以±12V的電壓來驅(qū)動信號線,TTL標(biāo)準(zhǔn)與RS-232C標(biāo)準(zhǔn)之間的電平轉(zhuǎn)換電路通常采用集成電路芯片實現(xiàn),如MAX232等。EIA的所定的傳送電氣規(guī)格狀態(tài)L(低電平)H(高電平)電壓范圍-25V~-3V+3V~+25V邏輯10名稱SPACEMARK8.1.1串行接口基本原理與結(jié)構(gòu)

(2)RS-232C接口信號

EIA制定的RS-232C接口與外界的相連采用25芯(DB-25)和9芯(DB-9)D型插接件,實際應(yīng)用中,并不是每只引腳信號都必須用到,25芯和9芯D型插接件引腳的定義,與信號之間的對應(yīng)關(guān)系如圖。

RS-232CDB-9各引腳功能如下:①CD:載波檢測。主要用于Modem通知計算機(jī)其處于在線狀態(tài),即Modem檢測到撥號音。②RXD:接收數(shù)據(jù)線。用于接收外部設(shè)備送來的數(shù)據(jù)。③TXD:發(fā)送數(shù)據(jù)線。用于將計算機(jī)的數(shù)據(jù)發(fā)送給外部設(shè)備。④DTR:數(shù)據(jù)終端就緒。當(dāng)此引腳高電平時,通知Modem可以進(jìn)行數(shù)據(jù)傳輸,計算機(jī)已經(jīng)準(zhǔn)備好。⑤SG:信號地。⑥D(zhuǎn)SR:數(shù)據(jù)設(shè)備就緒。此引腳為高電平時,通知計算機(jī)Modem已經(jīng)準(zhǔn)備好,可以進(jìn)行數(shù)據(jù)通信。⑦RTS請求發(fā)送。此引腳由計算機(jī)來控制,用以通知Modem馬上傳送數(shù)據(jù)至計算機(jī);否則,Modem將收到的數(shù)據(jù)暫時放人緩沖區(qū)中。⑧CTS清除發(fā)送。此引腳由Modem控制,用以通知計算機(jī)將要傳送的數(shù)據(jù)送至Mo-dem。⑨RI:振鈴提示。Modem通知計算機(jī)有呼叫進(jìn)來,是否接聽呼叫由計算機(jī)決定。8.1.1串行接口基本原理與結(jié)構(gòu)25芯D型插接件引腳的定義和信號之間的對應(yīng)關(guān)系8.1.1串行接口基本原理與結(jié)構(gòu)1保護(hù)地2發(fā)送數(shù)據(jù)線(TXD)3接收數(shù)據(jù)線(RXD)4請求發(fā)送(RTS)5清除發(fā)送(CTS)6數(shù)據(jù)設(shè)置就緒(DSR)7信號地(SG)8載波檢測(CD)910111213141516171819數(shù)據(jù)終端就緒(DTR)2021振鈴提示222324259芯D型插接件引腳的定義和信號之間的對應(yīng)關(guān)系8.1.1串行接口基本原理與結(jié)構(gòu)1載波檢測(CD)2接收數(shù)據(jù)線(RXD)3發(fā)送數(shù)據(jù)線(TXD)4數(shù)據(jù)終端就緒(DTR)5信號地(SG)數(shù)據(jù)設(shè)置就緒(DSR)6請求發(fā)送(RTS)7清除發(fā)送(CTS)8振鈴提示(RI)9

(3)RS-232C的基本連接方式計算機(jī)利用RS-232C接口進(jìn)行串口通信,有簡單連接和完全連接兩種連接方式。簡單連接又稱三線連接,即只連接發(fā)送數(shù)據(jù)線、接收數(shù)據(jù)線和信號地如圖。如果應(yīng)用中還需要使用RS-232C的控制信號,則采用完全連接方式如圖。在波特率不高于9600bps的情況下進(jìn)行串口通信時,通信線路的長度通常要求小于15米,否則可能出現(xiàn)數(shù)據(jù)丟失現(xiàn)象。簡單連接形式

完全連接形式

8.1.1串行接口基本原理與結(jié)構(gòu)123456789123456789123456789123456789

3.RS-422串行通信接口

RS-422標(biāo)準(zhǔn)是RS-232的改進(jìn)型,RS-422標(biāo)準(zhǔn)全稱是“平衡電壓數(shù)字接口電路的電氣特性”。允許在相同傳輸線上連接多個接收節(jié)點,最多可接10個節(jié)點,即一個主設(shè)備(Master),其余10個為從設(shè)備(Salve),從設(shè)備之間不能通信。RS-422支持一點對多點的雙向通信。RS-422四線接口由于采用單獨(dú)的發(fā)送和接收通道,因此不必控制數(shù)據(jù)方向,各裝置之間任何必需的信號交換均可以按軟件方式(XON/XOFF握手)或硬件方式(一對單獨(dú)的雙絞線)實現(xiàn)。

RS-422的最大傳輸距離為4000英尺(約1219m),最大傳輸速率為10Mb/s。傳輸速率與平衡雙絞線的長度有關(guān),只有在很短的距離下才能獲得最高傳輸速率。在最大傳輸距離時,傳輸速率為100Kb/s。一般100m長的雙絞線上所能獲得的最大傳輸速率僅為1Mb/s。

RS-422需要在傳輸電纜的最遠(yuǎn)端連接一個電阻,要求電阻阻值約等于傳輸電纜的特性阻抗。在短距離(300m以下)傳輸時可以不連接電阻。8.1.1串行接口基本原理與結(jié)構(gòu)

4.RS-485串行總線接口在RS-422的基礎(chǔ)上,為擴(kuò)展應(yīng)用范圍,EIA制定了RS-485標(biāo)準(zhǔn),增加了多點、雙向通信能力。在通信距離為幾十米至上千米時,通常采用RS-485收發(fā)器。RS-485收發(fā)器采用平衡發(fā)送和差分接收,即在發(fā)送端,驅(qū)動器將TTL電平信號轉(zhuǎn)換成差分信號輸出;在接收端,接收器將差分信號變成TTL電平,因此具有抑制共模干擾的能力。接收器能夠檢測低達(dá)200mV的電壓,具有高的靈敏度,故數(shù)據(jù)傳輸距離可達(dá)千米以上。

RS-485可以采用二線與四線方式,二線制可實現(xiàn)真正的多點雙向通信。而采用四線連接時,與RS-422一樣只能實現(xiàn)點對多的通信,即只能有一個主設(shè)備,其余為從設(shè)備。RS-485可以連接多達(dá)32個設(shè)備。8.1.1串行接口基本原理與結(jié)構(gòu)

RS-485的共模輸出電壓在-7~+12V之間,接收器最小輸入阻抗為12kΩ。RS-485滿足所有RS-422的規(guī)范,所以RS-485的驅(qū)動器可以在RS-422網(wǎng)絡(luò)中應(yīng)用

RS-485的最大傳輸速率為10Mb/s。在最大傳輸距離時,傳輸速率為100Kb/s。

RS-485需要兩個終端電阻,接在傳輸總線的兩端,要求電阻阻值約等于傳輸電纜的特性阻抗。在短距離傳輸(在300m以下)時可不需終端電阻。8.1.1串行接口基本原理與結(jié)構(gòu)

1.UART簡介

UART(UniversalAsynchronousReceiverandTransmitter,通用異步收發(fā)器)主要由數(shù)據(jù)線接口、控制邏輯、配置寄存器、波特率發(fā)生器、發(fā)送部分和接收部分組成,采用異步串行通信方式,采用RS-232C9芯接插件(DB-9)連接,是廣泛使用的串行數(shù)據(jù)傳輸方式,UART以字符為單位進(jìn)行數(shù)據(jù)傳輸,每個字符的傳輸格式如圖,包括線路空閑狀態(tài)(高電平)、起始位(低電平)、5~8位數(shù)據(jù)位、校驗位(可選)和停止位(位數(shù)可以是1、1.5或2位)。這種格式通過起始位和停止位來實現(xiàn)字符的同步。UART內(nèi)部一般具有配置寄存器,通過該寄存器可以配置數(shù)據(jù)位數(shù)(5~8位)、是否有校驗位和校驗的類型以及停止位的位數(shù)(1位、1.5位或2位)等。8.1.2S3C2410A的UARTUART的字符傳輸格式

8.1.2S3C2410A的UARTI/OI/OI/OI/OI/OI/OI/OI/O最低位最高位空閑位起始位數(shù)據(jù)位校驗位停止位空閑位

2.S3C2410A的UART結(jié)構(gòu)

S3C2410A的UART提供3個獨(dú)立的異步串行I/O口(SIO),它們都可以運(yùn)行于中斷模式或DMA模式。UART可以產(chǎn)生中斷請求或DMA請求,以便在CPU和UART之間傳輸數(shù)據(jù)。在使用系統(tǒng)時鐘的情況下,UART可以支持最高230.4Kbps的傳輸速率。如果外部設(shè)備通過UEXTCLK為UART提供時鐘,那么UART的傳輸速率可以更高。每個UART通道包含兩個用于接收和發(fā)送數(shù)據(jù)的16字節(jié)的FIFO緩沖寄存器。

S3C2410A的UART由波特率發(fā)生器、發(fā)送器、接收器以及控制單元組成。波特率發(fā)生器的時鐘可以由PCLK或UEXTCLK提供。發(fā)送器和接收器包含16字節(jié)的FIFO緩沖寄存器和數(shù)據(jù)移位器。發(fā)送時,數(shù)據(jù)被寫入FIFO,然后拷貝到發(fā)送移位器中,接下來數(shù)據(jù)通過發(fā)送數(shù)據(jù)引腳(TxDn)被發(fā)送。接收時,接收到的數(shù)據(jù)從接收數(shù)據(jù)引腳(RxDn)移入,然后從移位器拷貝到FIFO中。8.1.2S3C2410A的UARTS3C2410A的UART方框圖(具有FIFO)8.1.2S3C2410A的UART發(fā)送緩沖寄存器(16字節(jié))發(fā)送移位器接收移位器接收緩沖寄存器(16字節(jié))波特率發(fā)生器發(fā)送器接收器控制單元外圍總線TxDn時鐘RxDn發(fā)送FIFO寄存器(FIFO模式)發(fā)送保持寄存器(非FIFO模式)接收保持寄存器(非FIFO模式)接收FIFO寄存器(FIFO模式)

3.S3C2410AUART的操作

S3C2410A的UART的操作包含有數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、中斷產(chǎn)生、波特率發(fā)生、回送模式、紅外模式和自動流控制等。

(1)數(shù)據(jù)發(fā)送(DataTransmission)發(fā)送的數(shù)據(jù)幀是可編程的。它包括1個起始位、5~8個數(shù)據(jù)位、1個可選的奇偶校驗位和1~2個停止位,具體設(shè)置由行控制寄存器(ULCONn)確定。發(fā)送器還可以產(chǎn)生暫停狀態(tài),在一幀發(fā)送期間連續(xù)輸出“0”。在當(dāng)前發(fā)送的字完全發(fā)送完成之后發(fā)出暫停信號。在暫停信號發(fā)出后,繼續(xù)發(fā)送數(shù)據(jù)到TxFIFO(發(fā)送保持寄存器在非FIFO模式)。

(2)數(shù)據(jù)接收(DataReception)與數(shù)據(jù)發(fā)送類似,接收的數(shù)據(jù)幀也是可編程的。它包括1個起始位,5~8個數(shù)據(jù)位、1個可選的奇偶校驗位和1~2個停止位,具體設(shè)置由行控制寄存器(ULCONn)確定。接收器可以檢測溢出錯誤和幀錯誤。溢出錯誤指新數(shù)據(jù)在舊數(shù)據(jù)還沒有被讀出之前就將其覆蓋了。幀錯誤指接收的數(shù)據(jù)沒有有效的停止位。當(dāng)在3個字時間段沒有接收任何數(shù)據(jù)和在FIFO模式RxFIFO不空時,產(chǎn)生接收暫停狀態(tài)。8.1.2S3C2410A的UART

(3)自動流控制(AuroFlowControl,AFC)

S3C2410A的UART0和UART1使用nRTS和nCTS信號支持自動流控制。在這種情況下,它可以連接到外部的UART。如果用戶希望將UART連接到Modem,則需要通過軟件來禁止UMCONn寄存器中的自動流控制位并控制nRTS信號。在AFC狀態(tài),nRTS根據(jù)接收器的狀態(tài)和nCTS信號控制發(fā)送器的操作。只有當(dāng)nCTS信號是有效時(在AFC狀態(tài),nCTS表示其他UART的FIFO已經(jīng)準(zhǔn)備好接收數(shù)據(jù)),UART的發(fā)送器才發(fā)送在FIFO中的數(shù)據(jù)。在UART接收數(shù)據(jù)之前,當(dāng)其接收FIFO具有多余2字節(jié)的空閑空間時,nRTS有效;如果其接收FIFO的空閑空間少于1字節(jié),則nRTS無效(在AFC狀態(tài),nRTS指示它自己的接收FIFO已經(jīng)準(zhǔn)備好接收數(shù)據(jù))。8.1.2S3C2410A的UARTUARTAFC接口8.1.2S3C2410A的UARTUARTATxDnCTSUARTBRxDnRTSUARTARxDnRTSUARTBTxDnCTSUARTA發(fā)送UARTA接收

(4)RS-232接口(RS-232Cinterface)如果用戶希望將UART連接到Modem接口,則需要使用nRTS、nCTS、nDSR、nDTR、DCD和nRI信號。在這個狀態(tài),用戶可以使用通用的I/O接口,通過軟件來控制這些信號,因為AFC不支持RS-232C接口。

(5)中斷DMA請求產(chǎn)生(Interrupt/DMARequestGeneration)

S3C2410A的每個UART有5個狀態(tài)(Tx/Rx/Error)信號:溢出錯誤、幀錯誤、接收緩沖數(shù)據(jù)準(zhǔn)備好、發(fā)送緩沖空和發(fā)送移位器空。這些狀態(tài)通過相關(guān)的狀態(tài)寄存器(UTRSTATn/UERSTATn)指示。8.1.2S3C2410A的UART溢出錯誤和幀錯誤指示接收數(shù)據(jù)時發(fā)生的錯誤狀態(tài)。如果控制寄存器UCONn中的接收錯誤狀態(tài)中斷使能位置1,那么溢出錯誤和幀錯誤的任何一個都可以產(chǎn)生接收錯誤狀態(tài)中斷請求。當(dāng)檢測到接收錯誤狀態(tài)中斷請求時,可以通過讀UERSTSTn的值來確定引起請求的信號。如果控制寄存器(UCONn)中的接收模式置為“1”(中斷請求模式或查詢模式),那么在FIFO模式,當(dāng)接收器將接收移位器中的數(shù)據(jù)傳送到接收FIFO寄存器中,并且接收的數(shù)據(jù)量達(dá)到RxFIFO的觸發(fā)水平時,則產(chǎn)生Rx中斷。在非FIFO模式,如果采用中斷請求和查詢模式,當(dāng)把接收移位器中的數(shù)據(jù)傳送到接收保持寄存器中時,將產(chǎn)生Rx中斷。8.1.2S3C2410A的UART如果控制寄存器(UCONn)中的發(fā)送模式置為1(中斷請求模式或查詢模式),那么在FIFO模式,當(dāng)發(fā)送器將發(fā)送FIFO寄存器中的數(shù)據(jù)傳送到發(fā)送移位器中,并且發(fā)送FIFO中剩余的發(fā)送數(shù)據(jù)量達(dá)到TxFIFO的觸發(fā)水平時,則產(chǎn)生Tx中斷。在非FIFO模式,如果采用中斷請求和查詢模式,當(dāng)把發(fā)送保持寄存器中的數(shù)據(jù)傳送到發(fā)送移位器時,將產(chǎn)生Tx中斷。如果在控制寄存器中的接收模式和發(fā)送模式選擇了DMAn請求模式,那么在上面提到的情況下將產(chǎn)生DMAn請求,而不是Rx或Tx中斷。8.1.2S3C2410A的UART

(6)波特率的產(chǎn)生(Baud-RateGeneration)每個UART的波特率發(fā)生器為發(fā)送器和接收器提供連續(xù)的時鐘。波特率發(fā)生器的時鐘源可以選擇使用S3C2410A的內(nèi)部系統(tǒng)時鐘或UEXTCLK。換句話說,通過設(shè)置UCONn的時鐘選擇位可以選擇不同的分頻值。波特率時鐘可以通過對源時鐘(PCLK或者UEXTCLK)16分頻和對在UART波特率系數(shù)寄存器(UBRDIVn)中的16位分頻數(shù)設(shè)置得到。

(7)回送模式(LoopbackMode)

S3C2410ADART提供一種測試模式,即回送模式,用于發(fā)現(xiàn)通信連接中的孤立錯誤。這種模式在結(jié)構(gòu)上使UART的RXD與TXD連接。因此,在這個模式,發(fā)送的數(shù)據(jù)通過RXD被接收器接收。這一特性使得處理器能夠驗證每個SIO通道內(nèi)部發(fā)送和接收數(shù)據(jù)的正確性。該模式通過設(shè)置UART控制寄存器(UCONn)的回送位來進(jìn)行選擇。

(8)紅外模式(Infra-Red(IR)Mode)

S3C2410A的UART模塊支持紅外發(fā)送和接收,該模式可以通過設(shè)置UART行控制寄存器(ULCONn)中的紅外模式位來選擇。8.1.2S3C2410A的UART

4.S3C2410AUART專用寄存器的配置要使用S3C2410A的UART進(jìn)行串口通信,需要在程序中配置以下與UART相關(guān)的專用寄存器。

(1)UART行控制寄存器(ULCONn)

UART行控制寄存器是UART通道0~UART通道2行控制寄存器,包含有ULCON0、ULCON1和ULCON2,為可讀/寫寄存器,地址為0x50000000、0x50004000和0x50008000,其位功能如表,復(fù)位值為0x00,推薦使用值為0x3。8.1.2S3C2410A的UARTUART行控制寄存器的位功能ULCONn的位功能位設(shè)置保留[7]保留位紅外/正常模式選擇[6]0:正常模式;1:紅外模式奇偶校驗?zāi)J竭x擇[5:3]0xx:無奇偶校驗;100:奇校驗101:偶校驗110:強(qiáng)制奇偶校驗/校驗1;111:強(qiáng)制奇偶校驗/校驗0停止位選擇[2]0:每幀1個停止位;1:每幀2個停止位發(fā)送或者接收字長設(shè)置[1:0]00:5位;01:6位;10:7位;11:8位8.1.2S3C2410A的UART

(2)UART控制寄存器(UCONn)

UART控制寄存器(UCONn)是UART通道0~UART通道2控制寄存器,包含有UCON0、UCON1和UCON2,為可讀/寫寄存器,地址為0x50000004、0x50004004和0x50008004,其位功能如表,復(fù)位值為0x00,推薦使用值為0x245。8.1.2S3C2410A的UARTUART控制寄存器(UCONn)的位功能(一)UCONn的位功能位設(shè)置波特率時鐘選擇[10]0:使用PCLK,UBRDIVn=(int)(PCLK/(bpsx16))-1;1:使用UEXTCLK(@GPH8),UBRDIVn=(int)(UEXTCLK/(bps×16))-1發(fā)送中斷請求類型選擇[9]0:脈沖;1:電平接收中斷請求類型選擇[8]0:脈沖;1:電平Rx超時中斷使能控制[7]0:禁止;1:使能接收錯誤狀態(tài)中斷使能控制[6]0:禁止;1:使能回送模式選擇[5]0:正常模式;1:回送模式保留[4]保留位8.1.2S3C2410A的UARTUCONn的位功能位設(shè)置發(fā)送模式選擇[3:2]確定將Tx數(shù)據(jù)寫入UART發(fā)送緩沖寄存器的模式。00:禁止;01:中斷請求或查詢模式;10:DMA0請求(僅UART0),DMA3請求(僅UART2);11:DMA1請求(僅UART1)接收模式選擇[1:0]確定從UART接收緩沖寄存器讀數(shù)據(jù)的模式。00:禁止;01:中斷請求或查詢模式;10:DMA0請求(僅UART0),DMA3請求(僅UART2);11:DMA1請求(僅UART1)8.1.2S3C2410A的UARTUART控制寄存器(UCONn)的位功能(二)

(3)UARTFIFO控制寄存器(UFCONn)

UARTFIFO控制寄存器(UFCONn)是UART通道0~UART通道2的FIFO控制寄存器,包含有UFCON0、UFCON1和UFCON2,為可讀/寫寄存器,地址為0x50000008、0x50004008和0x50008008,其位功能如表,復(fù)位值為0x0,推薦使用值為0x0。8.1.2S3C2410A的UARTUARTFIFO控制寄存器(UFCONn)的位功能UFCONn的位功能位描述發(fā)送FIFO的觸發(fā)條件選擇[7:6]00:空;01:4字節(jié);10:8字節(jié);11:12字節(jié)接收FIFO的觸發(fā)條件選擇[5:4]00:4字節(jié);01:8字節(jié);10:12字節(jié);11:16字節(jié)保留[3]保留位TxFIFO復(fù)位位[2]該位在FIFO復(fù)位后自動清除0:正常;1:TxFIFO復(fù)位RxFIFO復(fù)位位[1]該位在FIFO復(fù)位后自動清除0:正常;1:RxFIFO復(fù)位FIFO使能控制[0]0:禁止;1:使能8.1.2S3C2410A的UART

(4)UARTModem控制寄存器(UMCONn)

UARTModem控制寄存器(UMCONn)是UART通道0和UART通道1調(diào)制解調(diào)器控制寄存器,包含有UMCON0和UMCON1,為可讀/寫寄存器,地址為0x5000000C、0x5000400C和0x5000800C,其中0x5000800C為保留寄存器,其位功能如表,復(fù)位值為0x0,推薦使用值為0x0。8.1.2S3C2410A的UARTUARTModem控制寄存器(UMCONn)的位功能UFCONn的位功能位描述發(fā)送FIFO的觸發(fā)條件選擇[7:6]00:空;01:4字節(jié);10:8字節(jié);11:12字節(jié)接收FIFO的觸發(fā)條件選擇[5:4]00:4字節(jié);01:8字節(jié);10:12字節(jié);11:16字節(jié)保留[3]保留位TxFIFO復(fù)位位[2]該位在FIFO復(fù)位后自動清除0:正常;1:TxFIFO復(fù)位RxFIFO復(fù)位位[1]該位在FIFO復(fù)位后自動清除0:正常;1:RxFIFO復(fù)位FIFO使能控制[0]0:禁止;1:使能8.1.2S3C2410A的UART

(5)UART的狀態(tài)寄存器與UART相關(guān)的狀態(tài)寄存器包含有UARTTX/RX狀態(tài)寄存器(UTRSTATn)、UART錯誤狀態(tài)寄存器(UERSTATn)、UARTFIFO狀態(tài)寄存器(UFSTATn)和UART調(diào)制解調(diào)器狀態(tài)寄存器(UMSTATn),這些狀態(tài)寄存器中各功能位反映UART的工作狀態(tài)。

(6)UART發(fā)送和接收數(shù)據(jù)的緩沖寄存器

UART發(fā)送和接收數(shù)據(jù)的緩沖寄存器包含有UART發(fā)送緩沖寄存器(UTXHn)和UART接收緩沖寄存器(URXHn),用來保存發(fā)送和接收數(shù)據(jù)。8.1.2S3C2410A的UART

(7)UART波特率系數(shù)寄存器

UART波特率系數(shù)寄存器(UBRDIVn)包含有UBRDIV0、UBRDIV1和UBRDIV2,用來設(shè)置UART的發(fā)送與接收波特率。

UBRDIVn的值可以利用下面的表達(dá)式確定:

UBRDIVn=(int)(PCLK/(bps×16))-1

式中,分頻數(shù)值在1~216-1之間。對于精確的UART操作,S3C2410A也支持對UEXTCLK進(jìn)行分頻。如果S3C2410A使用由外部的DART設(shè)備或系統(tǒng)提供的UEXTCLK信號,那么UART的連續(xù)的時鐘將嚴(yán)格與UEXTCLK同步。用戶可以得到更精確的UART操作。

UBRDIVn的值可以利用下面的表達(dá)式確定:

UBRDIVn=(int)(UEXTCLK/(bps×16))–1

式中,分頻數(shù)值在1~216-1之間,并且UEXTCLK應(yīng)該小于PCLK。

例如,如果波特率是115200bps,PCLK或者UEXTCLK是40MHz,UBRDIVn的值為:

UBRDIVn=(int)(40000000/(115200×16))-1=(int)(21.7)-1=21-1=208.1.2S3C2410A的UART

1.S3C2410AUART與RS-232C的接口電路要完成最基本的串行通信功能,實際上只需要RXD、TXD和GND即可。由于RS-232C標(biāo)準(zhǔn)所定義的高、低電平信號與S3C2410A系統(tǒng)的LVTTL電路所定義的高、低電平信號不同,RS-232C標(biāo)準(zhǔn)采用負(fù)邏輯方式,標(biāo)準(zhǔn)邏輯“1”對應(yīng)-5V~-15V電平,標(biāo)準(zhǔn)邏輯“0”對應(yīng)+5V~+15V電平。而LVTTL的標(biāo)準(zhǔn)邏輯“1”對應(yīng)2~3.3V電平,標(biāo)準(zhǔn)邏輯“0”對應(yīng)0~0.4V電平。顯然,兩者間要進(jìn)行通信必須經(jīng)過信號電平的轉(zhuǎn)換。目前常使用的電平轉(zhuǎn)換電路有MAX232等。S3C2410A與MAX232的接口電路如圖。在圖中,包含有UART0和UART1與RS-232C的接口電路,通過9芯的D型插頭與外設(shè)連接。也可設(shè)計數(shù)據(jù)發(fā)送與接收的狀態(tài)指示LED,當(dāng)有數(shù)據(jù)通過串行口傳輸時,LED閃爍,便于用戶掌握其工作狀態(tài),以及進(jìn)行軟、硬件的調(diào)試。8.1.3與S3C2410AUART連接的串行接口電路S3C2410A的RS-232C接口電路(UART0)8.1.3與S3C2410AUART連接的串行接口電路C1+C1-C2+C2-T1OUTR1INT2OUTR2INVDDV+V-GNDT1INR1OUTT2INR2OUT13451413781626151112109C511100nFC512100nFC509100nFC510100nFVDD33U506RS232_TXD0RS232_RXD0R5160ΩR5170ΩMAX3232RTS0CTS0912345678J505DB9C513100nFVDD33S3C2410A的RS-232C接口電路(UART1)

8.1.3與S3C2410AUART連接的串行接口電路C2-C2+C1-C1+R2INT2OUTR1INT1OUTGNDV-V+VDDT2OUTR2INT1OUTR1IN54318713141562169101211C517100nFC518100nFC515100nFC516100nFVDD33U507RS232_RTS1RS232_CXS1R5180ΩMAX3232CTS1912345678J506DB9C514100nFVDD33RS232_RXD1RS232_TXD1

2.S3C2410AUART與RS422和RS485的接口電路一個采用MAX487與S3C2410A的UART1連接,構(gòu)成支持RS422和RS485接口電路如圖。RS422至少分別有一個差分發(fā)送口和差分接收口。兩節(jié)點通信時,一方的發(fā)送口與另一方的接收口相連,需兩根線。RS422不能直接用于三點以上的直接互連,也不能直接用總線連接。電路中采用兩片MAX487E,分別構(gòu)成RS422的發(fā)送和接收通道。

RS485的差分發(fā)送口與自身的差分接收口同相并連,多點間連接通過RS485總線只需一對線。電路中采用一片MAX487E構(gòu)成RS485的發(fā)送和接收通道。8.1.3與S3C2410AUART連接的串行接口電路

MAX487E的引腳端功能如下:①引腳端RO為接收器輸出,如果A>B200mV,RO將是高電平;如果A<B200mV,RO將是低電平。②引腳端為接收器輸出使能控制,為低電平時,RO輸出使能;為高電平時,RO輸出為高阻抗?fàn)顟B(tài)。③引腳端DE為驅(qū)動器輸出使能控制,DE為高電平時,驅(qū)動器輸出使能。④引腳端DI為驅(qū)動器輸入。⑤引腳端A為接收器同相輸入和驅(qū)動器同相輸出。⑥引腳端B為接收器反相輸入和驅(qū)動器反相輸出。⑦引腳端VCC為電源電壓正端輸入,電壓范圍為4.75V~5.25V。⑧引腳端GND為地。8.1.3與S3C2410AUART連接的串行接口電路S3C2410A的RS422接口電路8.1.3與S3C2410AUART連接的串行接口電路ROVCCREBDEADIGNDU501MAX487E87651234VDD50VDD50RS422_TXDROVCCREBDEADIGNDU502MAX487E87651234VDD50RS422_RXDR501120ΩR503120ΩVDD50R502240ΩR505240ΩT+T-R+T-GNDV+RS422J501R5040Ω654321S3C2410A的RS485接口電路

8.1.3與S3C2410AUART連接的串行接口電路ROVCCREBDEADIGNDU503MAX487E87651234VDD50RS485_RXDR508120ΩVDD50R506240ΩR509240ΩBUS+BUS-V+GNDRS485J502R5100Ω1234R5230ΩR5070Ω(unload)RS485_RTSRS485_TXD本程序?qū)嵗龑崿F(xiàn)從UART0接收數(shù)據(jù),然后分別從UART0和UART1發(fā)送出去。其功能可以把鍵盤敲擊的字符通過PC機(jī)的串口發(fā)送給ARM系統(tǒng)上的UART0,ARM系統(tǒng)上的UART0接收到字符后,再通過UART0和UART1送給PC機(jī),這樣就完成了串口間的收發(fā)數(shù)據(jù)。要實現(xiàn)以上數(shù)據(jù)的收發(fā)功能,需要編寫的主要代碼如下。8.1.4S3C2410AUART編程實例1.定義與UART相關(guān)的寄存器以UART0為例,需要定義的寄存器如下:#definerULCON0(*(volatileunsigned*)0x50000000)

//UART0行控制寄存器#definerUCON0(*(volatileunsigned*)0x50000004)

//UART0控制寄存器#definerUFCON0(*(volatileunsigned*)0x50000008)

//UART0FIFO控制寄器#definerUMCON0(*(volatileunsigned*)0x5000000c)

//UART0Modem控制寄存器#definerUTRSTAT0(*(volatileunsigned*)0x50000010)

//UART0Tx/Rx狀態(tài)寄存器#definerUERSTAT0(*(volatileunsigned*)0x50000014)

//UART0Rx錯誤狀態(tài)寄存器#definerUFSTAT0(*(volatileunsigned*)0x50000018)

//UART0FIFO狀態(tài)寄存器8.1.4S3C2410AUART編程實例#definerUMSTAT0(*(volatileunsigned*)0x5000001c)

//UART0Modem狀態(tài)寄存器#definerUBRDIV0(*(volatileunsigned*)0x50000028)

//UART0波特率系數(shù)寄存器#ifdef__BIG_ENDIAN

//大端模式#definerURXH0(*(volatileunsignedchar*)0x50000023)

//UART0發(fā)送緩沖寄存器#definerURXH0(*(volatileunsignedchar*)0x50000027)

//UART0接收緩沖寄存器#defineWrUTXH0(ch)(*(volatileunsignedchar*)0x50000023)=(unsignedchar)(ch)#defineRdURXH0()(*(volatileunsignedchar*)0x50000027)8.1.4S3C2410AUART編程實例#defineUTXH0(0x50000020+3)

//DMA使用的字節(jié)訪問地址#defineURXH0(0x50000024+3)#else//小端模式#definerUTXH0(*(volatileunsignedchar*)0x50000020)

//UART0TransmissionHold#definerURXH0(*(volatileunsignedchar*)0x50000024)//UART0Receivebuffer#defineWrUTXH0(ch)(*(volatileunsignedchar*)0x50000020)=(unsignedchar)(ch)#defineRdURXH0()(*(volatileunsignedchar*)0x50000024)#defineUTXH0(0x50000020)

//DMA使用的字節(jié)訪問地址#defineURXH0(0x50000024)#endif8.1.4S3C2410AUART編程實例

2.初始化操作

參數(shù)pclk為時鐘源的時鐘頻率,band為數(shù)據(jù)傳輸?shù)牟ㄌ芈?,初始化函?shù)Uart_Init

()的實現(xiàn)如下:voidUart_Init(int

pclk,intbaud){

inti;if(pclk==0)

pclk=PCLK;rUFCON0=0x0;//UARTOFIFO控制寄存器,F(xiàn)IFO禁止

rUFCON1=0x0;//UART1FIFO控制寄存器,F(xiàn)IFO禁止

rUFCON2=0x0;//UART2FIFO控制寄存器,F(xiàn)IFO禁止

rUMCON0=0x0;//UARTOMODEM控制寄存器,AFC禁止

rUMCONI=0x0;//UART1MODEM控制寄存器,AFC禁止

//UART08.1.4S3C2410AUART編程實例rULCON0=0x3;

//行控制寄存器:正常模式,無奇偶校驗,//1位停止位,8位數(shù)據(jù)位

rUCON0=0x245;

//控制寄存器

rUBRDIV0=((int)(pclk/16./baud+0.5)-1)

;

//波特率因子寄存器

//UART1rULCON1=0x3;rUCON1=0x245;rUBRDIV1=((int)(pclk/16./baud)-1);

//UART2rULCON2=0x3;rUCON2=0x245;rUBRDIV2=((int)(pclk/16./baud)-1);for(i=0;i<100;i++);}8.1.4S3C2410AUART編程實例

3.發(fā)送數(shù)據(jù)

其中whichUart為全局變量,指示當(dāng)前選擇的UART通道,使用串口發(fā)送一個字節(jié)的代碼如下:voidUart_SendByte(intdata){

if(whichUart==0){

if(data=='\n'){

while(?。╮UTRSTAT0&0x2));

Delay(10);//延時,與終端速度有關(guān)

WrUTXH('\r');}8.1.4S3C2410AUART編程實例

while(!(rUTRSTAT0&0x2));//等待,直到發(fā)送狀態(tài)就緒

Delay(10);

WrUTXH0(data);}

elseif(whichUart==1){

if(data=='\n'){

while(!(rUTRSTAT1&0x2));

Delay(10);//延時,與終端速度有關(guān)

rUTXH1='\r';}

while(!(rUTRSTAT1&0x2));

//等待,直到發(fā)送狀態(tài)就緒

Delay(10);

rUTXH1=data;}8.1.4S3C2410AUART編程實例

elseif(whichUart==2){

if(data=='\n'){

while(?。╮UTRSTAT2&0x2));

Delay(10);//延時,與終端速度有關(guān)

rUTXH2='\r';}

while(!(rUTRSTAT2&0x2));

//等待,直到發(fā)送狀態(tài)就緒

Delay(10);

rUTXH2=data;}}8.1.4S3C2410AUART編程實例

4.接收數(shù)據(jù)

如果沒有接收到字符則返回0。使用串口接收一個字符的代碼如下:

charUart_GetKey(void){

if(whichUart==0){

if(rUTRSTAT0&0x1)//UARTO接收到數(shù)據(jù)

returnRdURXH0();

else return0;}

elseif(whichUart==1){

if(rUTRSTAT1&0x1)//UART1接收到數(shù)據(jù)

returnRdURXH1();

elsereturn0;}8.1.4S3C2410AUART編程實例

elseif(whichUart==2){

if(rUTRSTAT2&0x1)

//UART2接收到數(shù)據(jù)

returnRdURXH2();

elsereturn0;}elsereturn0;}8.1.4S3C2410AUART編程實例

5.主函數(shù)

實現(xiàn)的功能為從UART0接收字符,然后將接收到的字符再分別從UART0和UART1送出去,其中Uart_Select(n)用于選擇使用的傳輸通道為UARTn。代碼如下:#include<string.h>#include”..\INC\config.h”voidMain(void){

chardata;

Target_Init();

while(1){

data=Uart

GetKey();//接收字符

if(data?。?x0){

Uart_Select(0);.//從UART0發(fā)送出去

Uart_Printf(”key=%c\n”,data);

Uart_elect

(1);//從UART1發(fā)送出去

Uart_Printf(”key=%c\n”,data);

Uart_Select(0);}}}8.1.4S3C2410AUART編程實例8.2I2C接口8.2.1I2C接口基本原理與結(jié)構(gòu)

I2CBUS(InterIntegratedCircuitBUS,內(nèi)部集成電路總線)是由Philips公司推出的二線制串行擴(kuò)展總線,用于連接微控制器及其外圍設(shè)備。I2C總線是具備總線仲裁和高低速設(shè)備同步等功能的高性能多主機(jī)總線,直接用導(dǎo)線連接設(shè)備,通信時無需片選信號。在I2C總線上,只需要兩條線—串行數(shù)據(jù)SDA線和串行時鐘SCL線,它們用于總線上器件之間的信息傳遞。SDA和SCL都是雙向的。每個器件都有一個唯一的地址以供識別,而且各器件都可以作為一個發(fā)送器或接收器(由器件的功能決定)。

I2C總線有如下操作模式:主發(fā)送模式、主接收模式、從發(fā)送模式、從接收模式。下面介紹其通用傳輸過程、信號及數(shù)據(jù)格式。

(1)I2C總線的啟動和停止信號當(dāng)I2C接口處于從模式時,要想數(shù)據(jù)傳輸,必須檢測SDA線上的啟動信號,啟動信號由主器件產(chǎn)生。如圖在SCL信號為高時,SDA產(chǎn)生一個由高變低的電平變化,即產(chǎn)生一個啟動信號。當(dāng)I2C總線上產(chǎn)生了啟動信號后,那么這條總線就被發(fā)出啟動信號的主器件占用了,變成“忙”狀態(tài);如圖在SCL信號為高時,SDA產(chǎn)生一個由低變高的電平變化,產(chǎn)生停止信號。停止信號也由主器件產(chǎn)生,作用是停止與某個從器件之間的數(shù)據(jù)傳輸。當(dāng)I2C總線上產(chǎn)生了一個停止信號后,那么在幾個時鐘周期之后總線就被釋放,變成“閑”狀態(tài)。主器件產(chǎn)生一個啟動信號后,它還會立即送出一個從地址,用來通知將與它進(jìn)行數(shù)據(jù)通信的從器件。1個字節(jié)的地址包括7位的地址信息和1位的傳輸方向指示位,如果第7位為“0”,表示馬上要進(jìn)行一個寫操作;如果為“1”,表示馬上要進(jìn)行一個讀操作。8.2.1I2C接口基本原理與結(jié)構(gòu)I2C總線接口電路結(jié)構(gòu)I2C總線啟動和停止信號的定義8.2.1I2C接口基本原理與結(jié)構(gòu)SCL輸入SCL輸出SCLSDA上拉電阻RR+VCCDATA輸入DATA輸出器件1SCL輸入SCL輸出DATA輸入DATA輸出器件2SDA………SCL開始信號結(jié)束信號

(2)數(shù)據(jù)傳輸格式

SDA線上傳輸?shù)拿總€字節(jié)長度都是8位,每次傳輸中字節(jié)的數(shù)量是沒有限制的。在起始條件后面的第一個字節(jié)是地址域,之后每個傳輸?shù)淖止?jié)后面都有一個應(yīng)答(ACK)位。傳輸中串行數(shù)據(jù)的MSB(字節(jié)的高位)首先發(fā)送。

(3)應(yīng)答信號為了完成1個字節(jié)的傳輸操作,接收器應(yīng)該在接收完1個字節(jié)之后發(fā)送ACK位到發(fā)送器,告訴發(fā)送器,已經(jīng)收到了這個字節(jié)。ACK脈沖信號在SCL線上第9個時鐘處發(fā)出(前面8個時鐘完成1個字節(jié)的數(shù)據(jù)傳輸,SCL上的時鐘都是由主器件產(chǎn)生的)。當(dāng)發(fā)送器要接收ACK脈沖時,應(yīng)該釋放SDA信號線,即將SDA置高。接收器在接收完前面8位數(shù)據(jù)后,將SDA拉低。發(fā)送器探測到SDA為低,就認(rèn)為接收器成功接收了前面的8位數(shù)據(jù)。8.2.1I2C接口基本原理與結(jié)構(gòu)

(4)總線競爭的仲裁

I2C總線上可以掛接有多個器件,有時會發(fā)生兩個或多個主器件同時想占用總線的情況。I2C總線具有多主控能力,可對發(fā)生在SDA線上的總線競爭進(jìn)行仲裁,其仲裁原則是:當(dāng)多個主器件同時想占用總線時,如果某個主器件發(fā)送高電平,而另一個主器件發(fā)送低電平,則發(fā)送電平與此時SDA總線電平不符的那個器件將自動關(guān)閉其輸出級??偩€競爭的仲裁是在兩個層次上進(jìn)行的。首先是地址位的比較,如果主器件尋址同一個從器件,則進(jìn)入數(shù)據(jù)位的比較,從而確保了競爭仲裁的可靠性。由于是利用I2C總線上的信息進(jìn)行仲裁,所以不會造成信息的丟失。8.2.1I2C接口基本原理與結(jié)構(gòu)

(5)I2C總線的數(shù)據(jù)傳輸過程①開始:主設(shè)備產(chǎn)生啟動信號,表明數(shù)據(jù)傳輸開始。②地址:主設(shè)備發(fā)送地址信息,包含7位的從設(shè)備地址和1位的數(shù)據(jù)方向指示位(讀或?qū)懳?,表示?shù)據(jù)流的方向)。③數(shù)據(jù):根據(jù)指示位,數(shù)據(jù)在主設(shè)備和從設(shè)備之間進(jìn)行傳輸。數(shù)據(jù)一般以8位傳輸,最重要的位放在前面;具體能傳輸多少量的數(shù)據(jù)并沒有限制。接收器產(chǎn)生1位的ACK(應(yīng)答信號)表明收到了每個字節(jié)。傳輸過程可以被中止和重新開始。④停止:主設(shè)備產(chǎn)生停止信號,結(jié)束數(shù)據(jù)傳輸。8.2.1I2C接口基本原理與結(jié)構(gòu)

S3C2410A提供一個I2C總線接口,其模塊框圖如圖,具有一個專門的串行數(shù)據(jù)線和串行時鐘線。它有主設(shè)備發(fā)送模式、主設(shè)備接收模式、從設(shè)備發(fā)送模式和從設(shè)備接收模式4種操作模式??刂芐3C2410AI2C總線操作,需要寫數(shù)據(jù)到IICCON(I2C總線控制寄存器)、IICSTAT(I2C總線控制/狀態(tài)寄存器)、IICDS(I2C總線Tx/Rx數(shù)據(jù)寄存器)和IICADD(I2C總線地址寄存器)。8.2.2S3C2410A的I2C接口S3C2410A處理器I2C串行總線框圖8.2.2S3C2410A的I2C接口IIC總線控制邏輯IICCONIICSTAT4位預(yù)分頻器地址寄存器比較器移位寄存器移位寄存器(IICDS)數(shù)據(jù)總線SDAMCLKSCL

(1)IICCONIICCON(I2C總線控制寄存器)為可讀寫寄存器,地址為0x54000000,復(fù)位值為0000xxxx,其位定義如表。IICCON(I2C總線控制寄存器)的位定義功能位描述初始狀態(tài)ACK使能[7]0:禁止產(chǎn)生ACK信號;1:允許產(chǎn)生ACK信號0Tx時鐘源選擇[6]0:IICCLK=fPCLK/16;1:IICCLK=fPCLK/5120Tx/Rx中斷使能[5]0:禁止Tx/Rx中斷;1:使能Tx/Rx中斷0中斷標(biāo)記清除/置位[4]寫0:清除中斷標(biāo)志并重新啟動寫操作;讀1:中斷標(biāo)志置位0確定發(fā)送時鐘頻率[3:0]設(shè)置I2C總線發(fā)送時鐘前置分頻器,Tx

時鐘=IICCLK/(IICCON[3:0]+1)未定義8.2.2S3C2410A的I2C接口(2)IICSTAT(I2C總線控制/狀態(tài)寄存器)

IICSTAT(I2C總線控制/狀態(tài)寄存器)為可讀寫寄存器,地址為0x54000004,復(fù)位值為00000000,其位定義如表。IICSTAT(I2C總線控制/狀態(tài)寄存器)的位定義(一)

功能位描述初始狀態(tài)模式選擇[7:6]IIC總線主/從Tx/Rx模式選擇位00:從接收模式;01:主接收模式;10:從發(fā)送模式;11:主發(fā)送模式08.2.2S3C2410A的I2C接口功能位描述初始狀態(tài)忙信號狀態(tài)/啟動/停止條件[5]讀0:I2C總線不忙;寫0:產(chǎn)生I2C總線停止信號讀1:I2C總線忙;寫1:產(chǎn)生I2C總線啟動信號0串行輸出使能[4]0:禁止Tx/Rx信號傳輸;1:使能Tx/Rx信號傳輸0仲裁狀態(tài)標(biāo)志[3]0:總線仲裁成功;1:總線仲裁不成功0從設(shè)備狀態(tài)標(biāo)志與地址[2]作為從設(shè)備時,0:當(dāng)檢測到啟動或停止信號時清零;1:接收到的從地址與在IICADD中的匹配0零地址狀態(tài)標(biāo)志[1]作為從設(shè)備時,0:當(dāng)檢測到啟動或停止信號時清零;1:接收到從地址為00000000b0接收到的最后數(shù)據(jù)位狀態(tài)標(biāo)志[0]0:接收到最后數(shù)據(jù)位后,接收到ACK應(yīng)答信號;1:接收到最后數(shù)據(jù)位后,沒有接收到ACK應(yīng)答信號08.2.2S3C2410A的I2C接口IICSTAT(I2C總線控制/狀態(tài)寄存器)的位定義(二)

(3)IICADD(I2C總線地址寄存器)

IICADD(I2C總線地址寄存器)為可讀寫寄存器,地址為0x54000008,復(fù)位值為xxxxxxxx,其位定義如表。IICADD(I2C總線地址寄存器)的位定義功能位描述初始狀態(tài)從地址[7:0]7位從設(shè)備的地址,從地址=[7:1]。當(dāng)在IICSTAT中的串行輸出使能=0時,IICADD寫使能。在任何時候都可以對IICADD的值進(jìn)行讀操作xxxxxxxx8.2.2S3C2410A的I2C接口功能位描述初始狀態(tài)數(shù)據(jù)移位[7:0]I2C總線發(fā)送/接收操作的8bit數(shù)據(jù)移位寄存器。當(dāng)在IICSTAT中的串行輸出使能(=1)時,IICDS寫使能。任何時候都可以對IICDS的值進(jìn)行讀操作xxxxxxxxIICDS(移位數(shù)據(jù)寄存器)的位定義

(4)IICDS(移位數(shù)據(jù)寄存器)

IICDS(移位數(shù)據(jù)寄存器)為可讀寫寄存器,地址為0x5400000C,復(fù)位值為xxxxxxxx,其位定義如表。8.2.2S3C2410A的I2C接口

S3C2410AI2C總線與使用I2C總線的EEPROM芯片KS24C080C連接電路(JXARM9-2410教學(xué)實驗系統(tǒng))如圖。S3C2410AI2C總線與KS24C080C連接電路

8.2.3S3C2410A的I2C接口應(yīng)用實例NC0VDDNC1WPNC2SCLVSSSDA87651234VDD33C13100nFVDD33U6KS24C080CR2610KI2CSCLI2CSDAR2710K

KS24C080C作為I2C從設(shè)備,其地址為0xA0,S3C2410A通過I2C總線對該芯片進(jìn)行讀/寫操作,程序如下:

(1)I2C接口初始化首先必須進(jìn)行I2C端口初始化,然后配置I2C控制寄存器。I2C接口初始化操作通過函數(shù)voidiic_init()完成。rPCONF=(rPCONF&0xFFFFFF0)|0xa;/*PF0:IICSCL,PF1:IICSDA*/rPUPF|=0x3; /*pull-updisable*/rIICCON=(1<<7)|(0<<6)|(1<<5)|(0xf);/*Enableinterrupt,IICCLK=MCLK/16*/rIICADD=0x10;/*S3C2410Xaddress*/rIICSTAT=0x10;8.2.3S3C2410A的I2C接口應(yīng)用實例

(2)I2C寫操作

I2C寫操作通過函數(shù)voidiic_write_24C08(LJ32slvAddr,U32addr,U8data)完成,其中,slvAddr為從設(shè)備地址,在本系統(tǒng)中為0xA0,addr為待寫入數(shù)據(jù)到芯片的地址;data為待寫入的數(shù)據(jù)。I2C寫操作代碼如下所示。①填寫I2C命令I(lǐng)2C緩沖區(qū)數(shù)據(jù)及大小。

iic_command=WRDATA;

iic_data_tx_index=0;iic_buffer[0]=(U8)addr;iic_buffer[1]=data;

iic_data_tx_size=2;8.2.3S3C2410A的I2C接口應(yīng)用實例②設(shè)置從設(shè)備地址并啟動I2C操作。在I2C輪詢函數(shù)中進(jìn)行讀/寫操作,操作完畢,iicdata

txsize將被置為-1。

rIICDS=slvAddr;

rIICSTAT=0xf0; /*MasTx,Start*/③等待寫操作完成。

while(iic_data_tx_size!=-1);Run_IicPoll();8.2.3S3C2410A的I2C接口應(yīng)用實例④等待從設(shè)備應(yīng)答。_iicMode=POLLACK; while(1){

rIICDS=slvAddr; _iicStatus=0x100;

//初始化_iicStatus,以便于檢查_iicStatus是否改變

rIICSTAT=0xf0;

//MasterTx,Start,Output//Enable,Sucessful,Cleared,Cleared,0

rIICCON=0xaf; //繼續(xù)I2C操作

while(_iicStatus==0x100)

Run_IicPoll();

if(!(_iicStatus&0x1)) break; //當(dāng)受到應(yīng)答時退出while }

rIICSTAT=0xd0; //MasterTx

condition,Stop(Write),OutputEnable

rIICCON=0xaf; //繼續(xù)I2C操作

Delay(1); //等待直到停止條件生效8.2.3S3C2410A的I2C接口應(yīng)用實例

(3)I2C讀操作

I2C讀操作通過函數(shù)voidiic_read_24C08(U32.s1vAddr、U32addr、U8關(guān)data)完成,其中slvAddr為從設(shè)備地址,在本系統(tǒng)中為0xA0;addr為待讀人數(shù)據(jù)的地址;

溫馨提示

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

評論

0/150

提交評論