版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本章主要介紹的內(nèi)容:
嵌入式系統(tǒng)的串行接口、I2C接口、USB接口、SPI接口、PCI接口、I2S總線接口的基本原理、電路結(jié)構(gòu)與編程方法。重點(diǎn)內(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)兩臺(tái)數(shù)字設(shè)備之間傳輸距離較遠(yuǎn)時(shí),數(shù)據(jù)往往以串行方式傳輸。串行通信的數(shù)據(jù)是一位一位地進(jìn)行傳輸?shù)模趥鬏斨忻恳晃粩?shù)據(jù)都占據(jù)一個(gè)固定的時(shí)間長(zhǎng)度。與并行通信相比,如果n位并行接口傳送n位數(shù)據(jù)需時(shí)間T,則串行傳送的時(shí)間最少為nT。串行通信具有傳輸線少、成本低等優(yōu)點(diǎn),特別適合遠(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)行傳輸,但不能在同一時(shí)刻進(jìn)行雙向傳輸。(3)全雙工通信:數(shù)據(jù)可以在同一時(shí)刻從設(shè)備A傳輸?shù)皆O(shè)備B,或從設(shè)備B傳輸?shù)皆O(shè)備A,即可以同時(shí)雙向傳輸。
②串行通信方式串行通信在信息格式的約定上可以分為同步通信和異步通信兩種方式。(1)異步通信方式異步通信時(shí)數(shù)據(jù)是一幀一幀傳送的,每幀數(shù)據(jù)包含有起始位(“0”)、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位(“1”),每幀數(shù)據(jù)的傳送靠起始位來(lái)同步。一幀數(shù)據(jù)的各位代碼間的時(shí)間間隔是固定的,而相鄰兩幀的數(shù)據(jù)其時(shí)間間隔是不固定的。在異步通信的數(shù)據(jù)傳送中,傳輸線上允許空字符。異步通信對(duì)字符的格式、波特率、校驗(yàn)位有確定的要求。
(a)字符的格式每個(gè)字符傳送時(shí),必須前面加一起始位,后面加上1、1.5或2位停止位。例如ASCII碼傳送時(shí),一幀數(shù)據(jù)的組成是:前面1個(gè)起始位,接著7位ASCII編碼,再接著一位奇偶校驗(yàn)位,最后一位停止位,共10位。8.1.1串行接口基本原理與結(jié)構(gòu)
(b)波特率傳送數(shù)據(jù)位的速率稱為波特率,用位/秒(bit/s)來(lái)表示,稱之為波特。例如,數(shù)據(jù)傳送的速率為120字符/秒,每幀包括10個(gè)數(shù)據(jù)位,則傳送波特率為:
10×120=1200b/s=1200波特每一位的傳送時(shí)間是波特的倒數(shù),如1/1200=0.833ms。異步通信的波特率的數(shù)值通常為:150、300、600、1200、2400、4800、9600、14400、28800等,數(shù)值成倍數(shù)變化。
(c)校驗(yàn)位在一個(gè)有8位的字節(jié)(byte)中,其中必有奇數(shù)個(gè)或偶數(shù)個(gè)的“1”狀態(tài)位。對(duì)于偶校驗(yàn)就是要使字符加上校驗(yàn)位有偶數(shù)個(gè)“1”;奇校驗(yàn)就是要使字符加上校驗(yàn)位有奇數(shù)個(gè)“1”。例如數(shù)據(jù)“00010011”,共有奇數(shù)個(gè)“1”,所以當(dāng)接收器要接收偶數(shù)個(gè)“1”時(shí)(即偶校驗(yàn)時(shí)),則校驗(yàn)位就置為“1”,反之,接收器要接收奇數(shù)個(gè)“1”時(shí)(即奇校驗(yàn)時(shí)),則校驗(yàn)位就置為“0”。8.1.1串行接口基本原理與結(jié)構(gòu)一般校驗(yàn)位的產(chǎn)生和檢查是由串行通信控制器內(nèi)部自動(dòng)產(chǎn)生,除了加上校驗(yàn)位以外,通信控制器還自動(dòng)加上停止位,用來(lái)指明欲傳送字符的結(jié)束。停止位通常取1、1.5或2個(gè)位。對(duì)接收器而言,若未能檢測(cè)到停止位則意味著傳送過(guò)程發(fā)生了錯(cuò)誤。在異步通信方式中,在發(fā)送的數(shù)據(jù)中含有起始位和停止位這兩個(gè)與實(shí)際需要傳送的數(shù)據(jù)毫無(wú)相關(guān)的位。如果在傳送1個(gè)8位的字符時(shí),其校驗(yàn)位、起始位和停止位都為1個(gè)位,則相當(dāng)于要傳送11個(gè)位信號(hào),傳送效率只有約80%。8.1.1串行接口基本原理與結(jié)構(gòu)(2)同步通信方式為了提高通信效率可以采用同步通信方式。同步傳輸采用字符塊的方式,減少每一個(gè)字符的控制和錯(cuò)誤檢測(cè)數(shù)據(jù)位,因而可以具有較高的傳輸速率。與異步方式不同的是,同步通信方式不僅在字符的本身之間是同步的,而且在字符與字符之間的時(shí)序仍然是同步的,即同步方式是將許多的字符聚集成一字符塊后,在每塊信息(常常稱之為信息幀)之前要加上1~2個(gè)同步字符,字符塊之后再加入適當(dāng)?shù)腻e(cuò)誤檢測(cè)數(shù)據(jù)才傳送出去。在同步通信時(shí)必須連續(xù)傳輸,不允許有間隙,在傳輸線上沒(méi)有字符傳輸時(shí),要發(fā)送專用的”空閑”字符或同步字符。在同步方式中產(chǎn)生一種所謂“冗余”字符,防止錯(cuò)誤傳送。假設(shè)欲傳送的數(shù)據(jù)位當(dāng)作一被除數(shù),而發(fā)送器本身產(chǎn)生一固定的除數(shù),將前者除以后者所得的余數(shù)即為該“冗余”字符。當(dāng)數(shù)據(jù)位和“冗余”字符位一起被傳送到接收器時(shí),接收器產(chǎn)生和發(fā)送器相同的除數(shù),如此即可檢查出數(shù)據(jù)在傳送過(guò)程中是否發(fā)生了錯(cuò)誤。統(tǒng)計(jì)數(shù)據(jù)表明采用”冗余”字符方法錯(cuò)誤防止率可達(dá)99%以上。8.1.1串行接口基本原理與結(jié)構(gòu)
2.RS-232C串行接口
RS-232C是美國(guó)電子工業(yè)協(xié)會(huì)EIA制定的一種串行通信接口標(biāo)準(zhǔn)。
(1)RS-232C接口規(guī)格
EIA所制定的傳送電氣規(guī)格如表。RS-232C通常以±12V的電壓來(lái)驅(qū)動(dòng)信號(hào)線,TTL標(biāo)準(zhǔn)與RS-232C標(biāo)準(zhǔn)之間的電平轉(zhuǎn)換電路通常采用集成電路芯片實(shí)現(xiàn),如MAX232等。EIA的所定的傳送電氣規(guī)格狀態(tài)L(低電平)H(高電平)電壓范圍-25V~-3V+3V~+25V邏輯10名稱SPACEMARK8.1.1串行接口基本原理與結(jié)構(gòu)
(2)RS-232C接口信號(hào)
EIA制定的RS-232C接口與外界的相連采用25芯(DB-25)和9芯(DB-9)D型插接件,實(shí)際應(yīng)用中,并不是每只引腳信號(hào)都必須用到,25芯和9芯D型插接件引腳的定義,與信號(hào)之間的對(duì)應(yīng)關(guān)系如圖。
RS-232CDB-9各引腳功能如下:①CD:載波檢測(cè)。主要用于Modem通知計(jì)算機(jī)其處于在線狀態(tài),即Modem檢測(cè)到撥號(hào)音。②RXD:接收數(shù)據(jù)線。用于接收外部設(shè)備送來(lái)的數(shù)據(jù)。③TXD:發(fā)送數(shù)據(jù)線。用于將計(jì)算機(jī)的數(shù)據(jù)發(fā)送給外部設(shè)備。④DTR:數(shù)據(jù)終端就緒。當(dāng)此引腳高電平時(shí),通知Modem可以進(jìn)行數(shù)據(jù)傳輸,計(jì)算機(jī)已經(jīng)準(zhǔn)備好。⑤SG:信號(hào)地。⑥D(zhuǎn)SR:數(shù)據(jù)設(shè)備就緒。此引腳為高電平時(shí),通知計(jì)算機(jī)Modem已經(jīng)準(zhǔn)備好,可以進(jìn)行數(shù)據(jù)通信。⑦RTS請(qǐng)求發(fā)送。此引腳由計(jì)算機(jī)來(lái)控制,用以通知Modem馬上傳送數(shù)據(jù)至計(jì)算機(jī);否則,Modem將收到的數(shù)據(jù)暫時(shí)放人緩沖區(qū)中。⑧CTS清除發(fā)送。此引腳由Modem控制,用以通知計(jì)算機(jī)將要傳送的數(shù)據(jù)送至Mo-dem。⑨RI:振鈴提示。Modem通知計(jì)算機(jī)有呼叫進(jìn)來(lái),是否接聽(tīng)呼叫由計(jì)算機(jī)決定。8.1.1串行接口基本原理與結(jié)構(gòu)25芯D型插接件引腳的定義和信號(hào)之間的對(duì)應(yīng)關(guān)系8.1.1串行接口基本原理與結(jié)構(gòu)1保護(hù)地2發(fā)送數(shù)據(jù)線(TXD)3接收數(shù)據(jù)線(RXD)4請(qǐng)求發(fā)送(RTS)5清除發(fā)送(CTS)6數(shù)據(jù)設(shè)置就緒(DSR)7信號(hào)地(SG)8載波檢測(cè)(CD)910111213141516171819數(shù)據(jù)終端就緒(DTR)2021振鈴提示222324259芯D型插接件引腳的定義和信號(hào)之間的對(duì)應(yīng)關(guān)系8.1.1串行接口基本原理與結(jié)構(gòu)1載波檢測(cè)(CD)2接收數(shù)據(jù)線(RXD)3發(fā)送數(shù)據(jù)線(TXD)4數(shù)據(jù)終端就緒(DTR)5信號(hào)地(SG)數(shù)據(jù)設(shè)置就緒(DSR)6請(qǐng)求發(fā)送(RTS)7清除發(fā)送(CTS)8振鈴提示(RI)9
(3)RS-232C的基本連接方式計(jì)算機(jī)利用RS-232C接口進(jìn)行串口通信,有簡(jiǎn)單連接和完全連接兩種連接方式。簡(jiǎn)單連接又稱三線連接,即只連接發(fā)送數(shù)據(jù)線、接收數(shù)據(jù)線和信號(hào)地如圖。如果應(yīng)用中還需要使用RS-232C的控制信號(hào),則采用完全連接方式如圖。在波特率不高于9600bps的情況下進(jìn)行串口通信時(shí),通信線路的長(zhǎng)度通常要求小于15米,否則可能出現(xiàn)數(shù)據(jù)丟失現(xiàn)象。簡(jiǎ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ù)字接口電路的電氣特性”。允許在相同傳輸線上連接多個(gè)接收節(jié)點(diǎn),最多可接10個(gè)節(jié)點(diǎn),即一個(gè)主設(shè)備(Master),其余10個(gè)為從設(shè)備(Salve),從設(shè)備之間不能通信。RS-422支持一點(diǎn)對(duì)多點(diǎn)的雙向通信。RS-422四線接口由于采用單獨(dú)的發(fā)送和接收通道,因此不必控制數(shù)據(jù)方向,各裝置之間任何必需的信號(hào)交換均可以按軟件方式(XON/XOFF握手)或硬件方式(一對(duì)單獨(dú)的雙絞線)實(shí)現(xiàn)。
RS-422的最大傳輸距離為4000英尺(約1219m),最大傳輸速率為10Mb/s。傳輸速率與平衡雙絞線的長(zhǎng)度有關(guān),只有在很短的距離下才能獲得最高傳輸速率。在最大傳輸距離時(shí),傳輸速率為100Kb/s。一般100m長(zhǎng)的雙絞線上所能獲得的最大傳輸速率僅為1Mb/s。
RS-422需要在傳輸電纜的最遠(yuǎn)端連接一個(gè)電阻,要求電阻阻值約等于傳輸電纜的特性阻抗。在短距離(300m以下)傳輸時(shí)可以不連接電阻。8.1.1串行接口基本原理與結(jié)構(gòu)
4.RS-485串行總線接口在RS-422的基礎(chǔ)上,為擴(kuò)展應(yīng)用范圍,EIA制定了RS-485標(biāo)準(zhǔn),增加了多點(diǎn)、雙向通信能力。在通信距離為幾十米至上千米時(shí),通常采用RS-485收發(fā)器。RS-485收發(fā)器采用平衡發(fā)送和差分接收,即在發(fā)送端,驅(qū)動(dòng)器將TTL電平信號(hào)轉(zhuǎn)換成差分信號(hào)輸出;在接收端,接收器將差分信號(hào)變成TTL電平,因此具有抑制共模干擾的能力。接收器能夠檢測(cè)低達(dá)200mV的電壓,具有高的靈敏度,故數(shù)據(jù)傳輸距離可達(dá)千米以上。
RS-485可以采用二線與四線方式,二線制可實(shí)現(xiàn)真正的多點(diǎn)雙向通信。而采用四線連接時(shí),與RS-422一樣只能實(shí)現(xiàn)點(diǎn)對(duì)多的通信,即只能有一個(gè)主設(shè)備,其余為從設(shè)備。RS-485可以連接多達(dá)32個(gè)設(shè)備。8.1.1串行接口基本原理與結(jié)構(gòu)
RS-485的共模輸出電壓在-7~+12V之間,接收器最小輸入阻抗為12kΩ。RS-485滿足所有RS-422的規(guī)范,所以RS-485的驅(qū)動(dòng)器可以在RS-422網(wǎng)絡(luò)中應(yīng)用
RS-485的最大傳輸速率為10Mb/s。在最大傳輸距離時(shí),傳輸速率為100Kb/s。
RS-485需要兩個(gè)終端電阻,接在傳輸總線的兩端,要求電阻阻值約等于傳輸電纜的特性阻抗。在短距離傳輸(在300m以下)時(shí)可不需終端電阻。8.1.1串行接口基本原理與結(jié)構(gòu)
1.UART簡(jiǎn)介
UART(UniversalAsynchronousReceiverandTransmitter,通用異步收發(fā)器)主要由數(shù)據(jù)線接口、控制邏輯、配置寄存器、波特率發(fā)生器、發(fā)送部分和接收部分組成,采用異步串行通信方式,采用RS-232C9芯接插件(DB-9)連接,是廣泛使用的串行數(shù)據(jù)傳輸方式,UART以字符為單位進(jìn)行數(shù)據(jù)傳輸,每個(gè)字符的傳輸格式如圖,包括線路空閑狀態(tài)(高電平)、起始位(低電平)、5~8位數(shù)據(jù)位、校驗(yàn)位(可選)和停止位(位數(shù)可以是1、1.5或2位)。這種格式通過(guò)起始位和停止位來(lái)實(shí)現(xiàn)字符的同步。UART內(nèi)部一般具有配置寄存器,通過(guò)該寄存器可以配置數(shù)據(jù)位數(shù)(5~8位)、是否有校驗(yàn)位和校驗(yàn)的類型以及停止位的位數(shù)(1位、1.5位或2位)等。8.1.2S3C2410A的UARTUART的字符傳輸格式
8.1.2S3C2410A的UARTI/OI/OI/OI/OI/OI/OI/OI/O最低位最高位空閑位起始位數(shù)據(jù)位校驗(yàn)位停止位空閑位
2.S3C2410A的UART結(jié)構(gòu)
S3C2410A的UART提供3個(gè)獨(dú)立的異步串行I/O口(SIO),它們都可以運(yùn)行于中斷模式或DMA模式。UART可以產(chǎn)生中斷請(qǐng)求或DMA請(qǐng)求,以便在CPU和UART之間傳輸數(shù)據(jù)。在使用系統(tǒng)時(shí)鐘的情況下,UART可以支持最高230.4Kbps的傳輸速率。如果外部設(shè)備通過(guò)UEXTCLK為UART提供時(shí)鐘,那么UART的傳輸速率可以更高。每個(gè)UART通道包含兩個(gè)用于接收和發(fā)送數(shù)據(jù)的16字節(jié)的FIFO緩沖寄存器。
S3C2410A的UART由波特率發(fā)生器、發(fā)送器、接收器以及控制單元組成。波特率發(fā)生器的時(shí)鐘可以由PCLK或UEXTCLK提供。發(fā)送器和接收器包含16字節(jié)的FIFO緩沖寄存器和數(shù)據(jù)移位器。發(fā)送時(shí),數(shù)據(jù)被寫(xiě)入FIFO,然后拷貝到發(fā)送移位器中,接下來(lái)數(shù)據(jù)通過(guò)發(fā)送數(shù)據(jù)引腳(TxDn)被發(fā)送。接收時(shí),接收到的數(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時(shí)鐘RxDn發(fā)送FIFO寄存器(FIFO模式)發(fā)送保持寄存器(非FIFO模式)接收保持寄存器(非FIFO模式)接收FIFO寄存器(FIFO模式)
3.S3C2410AUART的操作
S3C2410A的UART的操作包含有數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、中斷產(chǎn)生、波特率發(fā)生、回送模式、紅外模式和自動(dòng)流控制等。
(1)數(shù)據(jù)發(fā)送(DataTransmission)發(fā)送的數(shù)據(jù)幀是可編程的。它包括1個(gè)起始位、5~8個(gè)數(shù)據(jù)位、1個(gè)可選的奇偶校驗(yàn)位和1~2個(gè)停止位,具體設(shè)置由行控制寄存器(ULCONn)確定。發(fā)送器還可以產(chǎn)生暫停狀態(tài),在一幀發(fā)送期間連續(xù)輸出“0”。在當(dāng)前發(fā)送的字完全發(fā)送完成之后發(fā)出暫停信號(hào)。在暫停信號(hào)發(fā)出后,繼續(xù)發(fā)送數(shù)據(jù)到TxFIFO(發(fā)送保持寄存器在非FIFO模式)。
(2)數(shù)據(jù)接收(DataReception)與數(shù)據(jù)發(fā)送類似,接收的數(shù)據(jù)幀也是可編程的。它包括1個(gè)起始位,5~8個(gè)數(shù)據(jù)位、1個(gè)可選的奇偶校驗(yàn)位和1~2個(gè)停止位,具體設(shè)置由行控制寄存器(ULCONn)確定。接收器可以檢測(cè)溢出錯(cuò)誤和幀錯(cuò)誤。溢出錯(cuò)誤指新數(shù)據(jù)在舊數(shù)據(jù)還沒(méi)有被讀出之前就將其覆蓋了。幀錯(cuò)誤指接收的數(shù)據(jù)沒(méi)有有效的停止位。當(dāng)在3個(gè)字時(shí)間段沒(méi)有接收任何數(shù)據(jù)和在FIFO模式RxFIFO不空時(shí),產(chǎn)生接收暫停狀態(tài)。8.1.2S3C2410A的UART
(3)自動(dòng)流控制(AuroFlowControl,AFC)
S3C2410A的UART0和UART1使用nRTS和nCTS信號(hào)支持自動(dòng)流控制。在這種情況下,它可以連接到外部的UART。如果用戶希望將UART連接到Modem,則需要通過(guò)軟件來(lái)禁止UMCONn寄存器中的自動(dòng)流控制位并控制nRTS信號(hào)。在AFC狀態(tài),nRTS根據(jù)接收器的狀態(tài)和nCTS信號(hào)控制發(fā)送器的操作。只有當(dāng)nCTS信號(hào)是有效時(shí)(在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é)的空閑空間時(shí),nRTS有效;如果其接收FIFO的空閑空間少于1字節(jié),則nRTS無(wú)效(在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信號(hào)。在這個(gè)狀態(tài),用戶可以使用通用的I/O接口,通過(guò)軟件來(lái)控制這些信號(hào),因?yàn)锳FC不支持RS-232C接口。
(5)中斷DMA請(qǐng)求產(chǎn)生(Interrupt/DMARequestGeneration)
S3C2410A的每個(gè)UART有5個(gè)狀態(tài)(Tx/Rx/Error)信號(hào):溢出錯(cuò)誤、幀錯(cuò)誤、接收緩沖數(shù)據(jù)準(zhǔn)備好、發(fā)送緩沖空和發(fā)送移位器空。這些狀態(tài)通過(guò)相關(guān)的狀態(tài)寄存器(UTRSTATn/UERSTATn)指示。8.1.2S3C2410A的UART溢出錯(cuò)誤和幀錯(cuò)誤指示接收數(shù)據(jù)時(shí)發(fā)生的錯(cuò)誤狀態(tài)。如果控制寄存器UCONn中的接收錯(cuò)誤狀態(tài)中斷使能位置1,那么溢出錯(cuò)誤和幀錯(cuò)誤的任何一個(gè)都可以產(chǎn)生接收錯(cuò)誤狀態(tài)中斷請(qǐng)求。當(dāng)檢測(cè)到接收錯(cuò)誤狀態(tài)中斷請(qǐng)求時(shí),可以通過(guò)讀UERSTSTn的值來(lái)確定引起請(qǐng)求的信號(hào)。如果控制寄存器(UCONn)中的接收模式置為“1”(中斷請(qǐng)求模式或查詢模式),那么在FIFO模式,當(dāng)接收器將接收移位器中的數(shù)據(jù)傳送到接收FIFO寄存器中,并且接收的數(shù)據(jù)量達(dá)到RxFIFO的觸發(fā)水平時(shí),則產(chǎn)生Rx中斷。在非FIFO模式,如果采用中斷請(qǐng)求和查詢模式,當(dāng)把接收移位器中的數(shù)據(jù)傳送到接收保持寄存器中時(shí),將產(chǎn)生Rx中斷。8.1.2S3C2410A的UART如果控制寄存器(UCONn)中的發(fā)送模式置為1(中斷請(qǐng)求模式或查詢模式),那么在FIFO模式,當(dāng)發(fā)送器將發(fā)送FIFO寄存器中的數(shù)據(jù)傳送到發(fā)送移位器中,并且發(fā)送FIFO中剩余的發(fā)送數(shù)據(jù)量達(dá)到TxFIFO的觸發(fā)水平時(shí),則產(chǎn)生Tx中斷。在非FIFO模式,如果采用中斷請(qǐng)求和查詢模式,當(dāng)把發(fā)送保持寄存器中的數(shù)據(jù)傳送到發(fā)送移位器時(shí),將產(chǎn)生Tx中斷。如果在控制寄存器中的接收模式和發(fā)送模式選擇了DMAn請(qǐng)求模式,那么在上面提到的情況下將產(chǎn)生DMAn請(qǐng)求,而不是Rx或Tx中斷。8.1.2S3C2410A的UART
(6)波特率的產(chǎn)生(Baud-RateGeneration)每個(gè)UART的波特率發(fā)生器為發(fā)送器和接收器提供連續(xù)的時(shí)鐘。波特率發(fā)生器的時(shí)鐘源可以選擇使用S3C2410A的內(nèi)部系統(tǒng)時(shí)鐘或UEXTCLK。換句話說(shuō),通過(guò)設(shè)置UCONn的時(shí)鐘選擇位可以選擇不同的分頻值。波特率時(shí)鐘可以通過(guò)對(duì)源時(shí)鐘(PCLK或者UEXTCLK)16分頻和對(duì)在UART波特率系數(shù)寄存器(UBRDIVn)中的16位分頻數(shù)設(shè)置得到。
(7)回送模式(LoopbackMode)
S3C2410ADART提供一種測(cè)試模式,即回送模式,用于發(fā)現(xiàn)通信連接中的孤立錯(cuò)誤。這種模式在結(jié)構(gòu)上使UART的RXD與TXD連接。因此,在這個(gè)模式,發(fā)送的數(shù)據(jù)通過(guò)RXD被接收器接收。這一特性使得處理器能夠驗(yàn)證每個(gè)SIO通道內(nèi)部發(fā)送和接收數(shù)據(jù)的正確性。該模式通過(guò)設(shè)置UART控制寄存器(UCONn)的回送位來(lái)進(jìn)行選擇。
(8)紅外模式(Infra-Red(IR)Mode)
S3C2410A的UART模塊支持紅外發(fā)送和接收,該模式可以通過(guò)設(shè)置UART行控制寄存器(ULCONn)中的紅外模式位來(lái)選擇。8.1.2S3C2410A的UART
4.S3C2410AUART專用寄存器的配置要使用S3C2410A的UART進(jìn)行串口通信,需要在程序中配置以下與UART相關(guān)的專用寄存器。
(1)UART行控制寄存器(ULCONn)
UART行控制寄存器是UART通道0~UART通道2行控制寄存器,包含有ULCON0、ULCON1和ULCON2,為可讀/寫(xiě)寄存器,地址為0x50000000、0x50004000和0x50008000,其位功能如表,復(fù)位值為0x00,推薦使用值為0x3。8.1.2S3C2410A的UARTUART行控制寄存器的位功能ULCONn的位功能位設(shè)置保留[7]保留位紅外/正常模式選擇[6]0:正常模式;1:紅外模式奇偶校驗(yàn)?zāi)J竭x擇[5:3]0xx:無(wú)奇偶校驗(yàn);100:奇校驗(yàn)101:偶校驗(yàn)110:強(qiáng)制奇偶校驗(yàn)/校驗(yàn)1;111:強(qiáng)制奇偶校驗(yàn)/校驗(yàn)0停止位選擇[2]0:每幀1個(gè)停止位;1:每幀2個(gè)停止位發(fā)送或者接收字長(zhǎng)設(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,為可讀/寫(xiě)寄存器,地址為0x50000004、0x50004004和0x50008004,其位功能如表,復(fù)位值為0x00,推薦使用值為0x245。8.1.2S3C2410A的UARTUART控制寄存器(UCONn)的位功能(一)UCONn的位功能位設(shè)置波特率時(shí)鐘選擇[10]0:使用PCLK,UBRDIVn=(int)(PCLK/(bpsx16))-1;1:使用UEXTCLK(@GPH8),UBRDIVn=(int)(UEXTCLK/(bps×16))-1發(fā)送中斷請(qǐng)求類型選擇[9]0:脈沖;1:電平接收中斷請(qǐng)求類型選擇[8]0:脈沖;1:電平Rx超時(shí)中斷使能控制[7]0:禁止;1:使能接收錯(cuò)誤狀態(tài)中斷使能控制[6]0:禁止;1:使能回送模式選擇[5]0:正常模式;1:回送模式保留[4]保留位8.1.2S3C2410A的UARTUCONn的位功能位設(shè)置發(fā)送模式選擇[3:2]確定將Tx數(shù)據(jù)寫(xiě)入U(xiǎn)ART發(fā)送緩沖寄存器的模式。00:禁止;01:中斷請(qǐng)求或查詢模式;10:DMA0請(qǐng)求(僅UART0),DMA3請(qǐng)求(僅UART2);11:DMA1請(qǐng)求(僅UART1)接收模式選擇[1:0]確定從UART接收緩沖寄存器讀數(shù)據(jù)的模式。00:禁止;01:中斷請(qǐng)求或查詢模式;10:DMA0請(qǐng)求(僅UART0),DMA3請(qǐng)求(僅UART2);11:DMA1請(qǐng)求(僅UART1)8.1.2S3C2410A的UARTUART控制寄存器(UCONn)的位功能(二)
(3)UARTFIFO控制寄存器(UFCONn)
UARTFIFO控制寄存器(UFCONn)是UART通道0~UART通道2的FIFO控制寄存器,包含有UFCON0、UFCON1和UFCON2,為可讀/寫(xiě)寄存器,地址為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ù)位后自動(dòng)清除0:正常;1:TxFIFO復(fù)位RxFIFO復(fù)位位[1]該位在FIFO復(fù)位后自動(dòng)清除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,為可讀/寫(xiě)寄存器,地址為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ù)位后自動(dòng)清除0:正常;1:TxFIFO復(fù)位RxFIFO復(fù)位位[1]該位在FIFO復(fù)位后自動(dòng)清除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錯(cuò)誤狀態(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),用來(lái)保存發(fā)送和接收數(shù)據(jù)。8.1.2S3C2410A的UART
(7)UART波特率系數(shù)寄存器
UART波特率系數(shù)寄存器(UBRDIVn)包含有UBRDIV0、UBRDIV1和UBRDIV2,用來(lái)設(shè)置UART的發(fā)送與接收波特率。
UBRDIVn的值可以利用下面的表達(dá)式確定:
UBRDIVn=(int)(PCLK/(bps×16))-1
式中,分頻數(shù)值在1~216-1之間。對(duì)于精確的UART操作,S3C2410A也支持對(duì)UEXTCLK進(jìn)行分頻。如果S3C2410A使用由外部的DART設(shè)備或系統(tǒng)提供的UEXTCLK信號(hào),那么UART的連續(xù)的時(shí)鐘將嚴(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的接口電路要完成最基本的串行通信功能,實(shí)際上只需要RXD、TXD和GND即可。由于RS-232C標(biāo)準(zhǔn)所定義的高、低電平信號(hào)與S3C2410A系統(tǒng)的LVTTL電路所定義的高、低電平信號(hào)不同,RS-232C標(biāo)準(zhǔn)采用負(fù)邏輯方式,標(biāo)準(zhǔn)邏輯“1”對(duì)應(yīng)-5V~-15V電平,標(biāo)準(zhǔn)邏輯“0”對(duì)應(yīng)+5V~+15V電平。而LVTTL的標(biāo)準(zhǔn)邏輯“1”對(duì)應(yīng)2~3.3V電平,標(biāo)準(zhǔn)邏輯“0”對(duì)應(yīng)0~0.4V電平。顯然,兩者間要進(jìn)行通信必須經(jīng)過(guò)信號(hào)電平的轉(zhuǎn)換。目前常使用的電平轉(zhuǎn)換電路有MAX232等。S3C2410A與MAX232的接口電路如圖。在圖中,包含有UART0和UART1與RS-232C的接口電路,通過(guò)9芯的D型插頭與外設(shè)連接。也可設(shè)計(jì)數(shù)據(jù)發(fā)送與接收的狀態(tài)指示LED,當(dāng)有數(shù)據(jù)通過(guò)串行口傳輸時(shí),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的接口電路一個(gè)采用MAX487與S3C2410A的UART1連接,構(gòu)成支持RS422和RS485接口電路如圖。RS422至少分別有一個(gè)差分發(fā)送口和差分接收口。兩節(jié)點(diǎn)通信時(shí),一方的發(fā)送口與另一方的接收口相連,需兩根線。RS422不能直接用于三點(diǎn)以上的直接互連,也不能直接用總線連接。電路中采用兩片MAX487E,分別構(gòu)成RS422的發(fā)送和接收通道。
RS485的差分發(fā)送口與自身的差分接收口同相并連,多點(diǎn)間連接通過(guò)RS485總線只需一對(duì)線。電路中采用一片MAX487E構(gòu)成RS485的發(fā)送和接收通道。8.1.3與S3C2410AUART連接的串行接口電路
MAX487E的引腳端功能如下:①引腳端RO為接收器輸出,如果A>B200mV,RO將是高電平;如果A<B200mV,RO將是低電平。②引腳端為接收器輸出使能控制,為低電平時(shí),RO輸出使能;為高電平時(shí),RO輸出為高阻抗?fàn)顟B(tài)。③引腳端DE為驅(qū)動(dòng)器輸出使能控制,DE為高電平時(shí),驅(qū)動(dòng)器輸出使能。④引腳端DI為驅(qū)動(dòng)器輸入。⑤引腳端A為接收器同相輸入和驅(qū)動(dòng)器同相輸出。⑥引腳端B為接收器反相輸入和驅(qū)動(dòng)器反相輸出。⑦引腳端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ū)嵗龑?shí)現(xiàn)從UART0接收數(shù)據(jù),然后分別從UART0和UART1發(fā)送出去。其功能可以把鍵盤(pán)敲擊的字符通過(guò)PC機(jī)的串口發(fā)送給ARM系統(tǒng)上的UART0,ARM系統(tǒng)上的UART0接收到字符后,再通過(guò)UART0和UART1送給PC機(jī),這樣就完成了串口間的收發(fā)數(shù)據(jù)。要實(shí)現(xiàn)以上數(shù)據(jù)的收發(fā)功能,需要編寫(xiě)的主要代碼如下。8.1.4S3C2410AUART編程實(shí)例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錯(cuò)誤狀態(tài)寄存器#definerUFSTAT0(*(volatileunsigned*)0x50000018)
//UART0FIFO狀態(tài)寄存器8.1.4S3C2410AUART編程實(shí)例#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編程實(shí)例#defineUTXH0(0x50000020+3)
//DMA使用的字節(jié)訪問(wèn)地址#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é)訪問(wèn)地址#defineURXH0(0x50000024)#endif8.1.4S3C2410AUART編程實(shí)例
2.初始化操作
參數(shù)pclk為時(shí)鐘源的時(shí)鐘頻率,band為數(shù)據(jù)傳輸?shù)牟ㄌ芈?,初始化函?shù)Uart_Init
()的實(shí)現(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編程實(shí)例rULCON0=0x3;
//行控制寄存器:正常模式,無(wú)奇偶校驗(yàn),//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編程實(shí)例
3.發(fā)送數(shù)據(jù)
其中whichUart為全局變量,指示當(dāng)前選擇的UART通道,使用串口發(fā)送一個(gè)字節(jié)的代碼如下:voidUart_SendByte(intdata){
if(whichUart==0){
if(data=='\n'){
while(?。╮UTRSTAT0&0x2));
Delay(10);//延時(shí),與終端速度有關(guān)
WrUTXH('\r');}8.1.4S3C2410AUART編程實(shí)例
while(!(rUTRSTAT0&0x2));//等待,直到發(fā)送狀態(tài)就緒
Delay(10);
WrUTXH0(data);}
elseif(whichUart==1){
if(data=='\n'){
while(?。╮UTRSTAT1&0x2));
Delay(10);//延時(shí),與終端速度有關(guān)
rUTXH1='\r';}
while(!(rUTRSTAT1&0x2));
//等待,直到發(fā)送狀態(tài)就緒
Delay(10);
rUTXH1=data;}8.1.4S3C2410AUART編程實(shí)例
elseif(whichUart==2){
if(data=='\n'){
while(!(rUTRSTAT2&0x2));
Delay(10);//延時(shí),與終端速度有關(guān)
rUTXH2='\r';}
while(!(rUTRSTAT2&0x2));
//等待,直到發(fā)送狀態(tài)就緒
Delay(10);
rUTXH2=data;}}8.1.4S3C2410AUART編程實(shí)例
4.接收數(shù)據(jù)
如果沒(méi)有接收到字符則返回0。使用串口接收一個(gè)字符的代碼如下:
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編程實(shí)例
elseif(whichUart==2){
if(rUTRSTAT2&0x1)
//UART2接收到數(shù)據(jù)
returnRdURXH2();
elsereturn0;}elsereturn0;}8.1.4S3C2410AUART編程實(shí)例
5.主函數(shù)
實(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編程實(shí)例8.2I2C接口8.2.1I2C接口基本原理與結(jié)構(gòu)
I2CBUS(InterIntegratedCircuitBUS,內(nèi)部集成電路總線)是由Philips公司推出的二線制串行擴(kuò)展總線,用于連接微控制器及其外圍設(shè)備。I2C總線是具備總線仲裁和高低速設(shè)備同步等功能的高性能多主機(jī)總線,直接用導(dǎo)線連接設(shè)備,通信時(shí)無(wú)需片選信號(hào)。在I2C總線上,只需要兩條線—串行數(shù)據(jù)SDA線和串行時(shí)鐘SCL線,它們用于總線上器件之間的信息傳遞。SDA和SCL都是雙向的。每個(gè)器件都有一個(gè)唯一的地址以供識(shí)別,而且各器件都可以作為一個(gè)發(fā)送器或接收器(由器件的功能決定)。
I2C總線有如下操作模式:主發(fā)送模式、主接收模式、從發(fā)送模式、從接收模式。下面介紹其通用傳輸過(guò)程、信號(hào)及數(shù)據(jù)格式。
(1)I2C總線的啟動(dòng)和停止信號(hào)當(dāng)I2C接口處于從模式時(shí),要想數(shù)據(jù)傳輸,必須檢測(cè)SDA線上的啟動(dòng)信號(hào),啟動(dòng)信號(hào)由主器件產(chǎn)生。如圖在SCL信號(hào)為高時(shí),SDA產(chǎn)生一個(gè)由高變低的電平變化,即產(chǎn)生一個(gè)啟動(dòng)信號(hào)。當(dāng)I2C總線上產(chǎn)生了啟動(dòng)信號(hào)后,那么這條總線就被發(fā)出啟動(dòng)信號(hào)的主器件占用了,變成“忙”狀態(tài);如圖在SCL信號(hào)為高時(shí),SDA產(chǎn)生一個(gè)由低變高的電平變化,產(chǎn)生停止信號(hào)。停止信號(hào)也由主器件產(chǎn)生,作用是停止與某個(gè)從器件之間的數(shù)據(jù)傳輸。當(dāng)I2C總線上產(chǎn)生了一個(gè)停止信號(hào)后,那么在幾個(gè)時(shí)鐘周期之后總線就被釋放,變成“閑”狀態(tài)。主器件產(chǎn)生一個(gè)啟動(dòng)信號(hào)后,它還會(huì)立即送出一個(gè)從地址,用來(lái)通知將與它進(jìn)行數(shù)據(jù)通信的從器件。1個(gè)字節(jié)的地址包括7位的地址信息和1位的傳輸方向指示位,如果第7位為“0”,表示馬上要進(jìn)行一個(gè)寫(xiě)操作;如果為“1”,表示馬上要進(jìn)行一個(gè)讀操作。8.2.1I2C接口基本原理與結(jié)構(gòu)I2C總線接口電路結(jié)構(gòu)I2C總線啟動(dòng)和停止信號(hào)的定義8.2.1I2C接口基本原理與結(jié)構(gòu)SCL輸入SCL輸出SCLSDA上拉電阻RR+VCCDATA輸入DATA輸出器件1SCL輸入SCL輸出DATA輸入DATA輸出器件2SDA………SCL開(kāi)始信號(hào)結(jié)束信號(hào)
(2)數(shù)據(jù)傳輸格式
SDA線上傳輸?shù)拿總€(gè)字節(jié)長(zhǎng)度都是8位,每次傳輸中字節(jié)的數(shù)量是沒(méi)有限制的。在起始條件后面的第一個(gè)字節(jié)是地址域,之后每個(gè)傳輸?shù)淖止?jié)后面都有一個(gè)應(yīng)答(ACK)位。傳輸中串行數(shù)據(jù)的MSB(字節(jié)的高位)首先發(fā)送。
(3)應(yīng)答信號(hào)為了完成1個(gè)字節(jié)的傳輸操作,接收器應(yīng)該在接收完1個(gè)字節(jié)之后發(fā)送ACK位到發(fā)送器,告訴發(fā)送器,已經(jīng)收到了這個(gè)字節(jié)。ACK脈沖信號(hào)在SCL線上第9個(gè)時(shí)鐘處發(fā)出(前面8個(gè)時(shí)鐘完成1個(gè)字節(jié)的數(shù)據(jù)傳輸,SCL上的時(shí)鐘都是由主器件產(chǎn)生的)。當(dāng)發(fā)送器要接收ACK脈沖時(shí),應(yīng)該釋放SDA信號(hào)線,即將SDA置高。接收器在接收完前面8位數(shù)據(jù)后,將SDA拉低。發(fā)送器探測(cè)到SDA為低,就認(rèn)為接收器成功接收了前面的8位數(shù)據(jù)。8.2.1I2C接口基本原理與結(jié)構(gòu)
(4)總線競(jìng)爭(zhēng)的仲裁
I2C總線上可以掛接有多個(gè)器件,有時(shí)會(huì)發(fā)生兩個(gè)或多個(gè)主器件同時(shí)想占用總線的情況。I2C總線具有多主控能力,可對(duì)發(fā)生在SDA線上的總線競(jìng)爭(zhēng)進(jìn)行仲裁,其仲裁原則是:當(dāng)多個(gè)主器件同時(shí)想占用總線時(shí),如果某個(gè)主器件發(fā)送高電平,而另一個(gè)主器件發(fā)送低電平,則發(fā)送電平與此時(shí)SDA總線電平不符的那個(gè)器件將自動(dòng)關(guān)閉其輸出級(jí)。總線競(jìng)爭(zhēng)的仲裁是在兩個(gè)層次上進(jìn)行的。首先是地址位的比較,如果主器件尋址同一個(gè)從器件,則進(jìn)入數(shù)據(jù)位的比較,從而確保了競(jìng)爭(zhēng)仲裁的可靠性。由于是利用I2C總線上的信息進(jìn)行仲裁,所以不會(huì)造成信息的丟失。8.2.1I2C接口基本原理與結(jié)構(gòu)
(5)I2C總線的數(shù)據(jù)傳輸過(guò)程①開(kāi)始:主設(shè)備產(chǎn)生啟動(dòng)信號(hào),表明數(shù)據(jù)傳輸開(kāi)始。②地址:主設(shè)備發(fā)送地址信息,包含7位的從設(shè)備地址和1位的數(shù)據(jù)方向指示位(讀或?qū)懳?,表示?shù)據(jù)流的方向)。③數(shù)據(jù):根據(jù)指示位,數(shù)據(jù)在主設(shè)備和從設(shè)備之間進(jìn)行傳輸。數(shù)據(jù)一般以8位傳輸,最重要的位放在前面;具體能傳輸多少量的數(shù)據(jù)并沒(méi)有限制。接收器產(chǎn)生1位的ACK(應(yīng)答信號(hào))表明收到了每個(gè)字節(jié)。傳輸過(guò)程可以被中止和重新開(kāi)始。④停止:主設(shè)備產(chǎn)生停止信號(hào),結(jié)束數(shù)據(jù)傳輸。8.2.1I2C接口基本原理與結(jié)構(gòu)
S3C2410A提供一個(gè)I2C總線接口,其模塊框圖如圖,具有一個(gè)專門(mén)的串行數(shù)據(jù)線和串行時(shí)鐘線。它有主設(shè)備發(fā)送模式、主設(shè)備接收模式、從設(shè)備發(fā)送模式和從設(shè)備接收模式4種操作模式??刂芐3C2410AI2C總線操作,需要寫(xiě)數(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總線控制寄存器)為可讀寫(xiě)寄存器,地址為0x54000000,復(fù)位值為0000xxxx,其位定義如表。IICCON(I2C總線控制寄存器)的位定義功能位描述初始狀態(tài)ACK使能[7]0:禁止產(chǎn)生ACK信號(hào);1:允許產(chǎn)生ACK信號(hào)0Tx時(shí)鐘源選擇[6]0:IICCLK=fPCLK/16;1:IICCLK=fPCLK/5120Tx/Rx中斷使能[5]0:禁止Tx/Rx中斷;1:使能Tx/Rx中斷0中斷標(biāo)記清除/置位[4]寫(xiě)0:清除中斷標(biāo)志并重新啟動(dòng)寫(xiě)操作;讀1:中斷標(biāo)志置位0確定發(fā)送時(shí)鐘頻率[3:0]設(shè)置I2C總線發(fā)送時(shí)鐘前置分頻器,Tx
時(shí)鐘=IICCLK/(IICCON[3:0]+1)未定義8.2.2S3C2410A的I2C接口(2)IICSTAT(I2C總線控制/狀態(tài)寄存器)
IICSTAT(I2C總線控制/狀態(tài)寄存器)為可讀寫(xiě)寄存器,地址為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)忙信號(hào)狀態(tài)/啟動(dòng)/停止條件[5]讀0:I2C總線不忙;寫(xiě)0:產(chǎn)生I2C總線停止信號(hào)讀1:I2C總線忙;寫(xiě)1:產(chǎn)生I2C總線啟動(dòng)信號(hào)0串行輸出使能[4]0:禁止Tx/Rx信號(hào)傳輸;1:使能Tx/Rx信號(hào)傳輸0仲裁狀態(tài)標(biāo)志[3]0:總線仲裁成功;1:總線仲裁不成功0從設(shè)備狀態(tài)標(biāo)志與地址[2]作為從設(shè)備時(shí),0:當(dāng)檢測(cè)到啟動(dòng)或停止信號(hào)時(shí)清零;1:接收到的從地址與在IICADD中的匹配0零地址狀態(tài)標(biāo)志[1]作為從設(shè)備時(shí),0:當(dāng)檢測(cè)到啟動(dòng)或停止信號(hào)時(shí)清零;1:接收到從地址為00000000b0接收到的最后數(shù)據(jù)位狀態(tài)標(biāo)志[0]0:接收到最后數(shù)據(jù)位后,接收到ACK應(yīng)答信號(hào);1:接收到最后數(shù)據(jù)位后,沒(méi)有接收到ACK應(yīng)答信號(hào)08.2.2S3C2410A的I2C接口IICSTAT(I2C總線控制/狀態(tài)寄存器)的位定義(二)
(3)IICADD(I2C總線地址寄存器)
IICADD(I2C總線地址寄存器)為可讀寫(xiě)寄存器,地址為0x54000008,復(fù)位值為xxxxxxxx,其位定義如表。IICADD(I2C總線地址寄存器)的位定義功能位描述初始狀態(tài)從地址[7:0]7位從設(shè)備的地址,從地址=[7:1]。當(dāng)在IICSTAT中的串行輸出使能=0時(shí),IICADD寫(xiě)使能。在任何時(shí)候都可以對(duì)IICADD的值進(jìn)行讀操作xxxxxxxx8.2.2S3C2410A的I2C接口功能位描述初始狀態(tài)數(shù)據(jù)移位[7:0]I2C總線發(fā)送/接收操作的8bit數(shù)據(jù)移位寄存器。當(dāng)在IICSTAT中的串行輸出使能(=1)時(shí),IICDS寫(xiě)使能。任何時(shí)候都可以對(duì)IICDS的值進(jìn)行讀操作xxxxxxxxIICDS(移位數(shù)據(jù)寄存器)的位定義
(4)IICDS(移位數(shù)據(jù)寄存器)
IICDS(移位數(shù)據(jù)寄存器)為可讀寫(xiě)寄存器,地址為0x5400000C,復(fù)位值為xxxxxxxx,其位定義如表。8.2.2S3C2410A的I2C接口
S3C2410AI2C總線與使用I2C總線的EEPROM芯片KS24C080C連接電路(JXARM9-2410教學(xué)實(shí)驗(yàn)系統(tǒng))如圖。S3C2410AI2C總線與KS24C080C連接電路
8.2.3S3C2410A的I2C接口應(yīng)用實(shí)例NC0VDDNC1WPNC2SCLVSSSDA87651234VDD33C13100nFVDD33U6KS24C080CR2610KI2CSCLI2CSDAR2710K
KS24C080C作為I2C從設(shè)備,其地址為0xA0,S3C2410A通過(guò)I2C總線對(duì)該芯片進(jìn)行讀/寫(xiě)操作,程序如下:
(1)I2C接口初始化首先必須進(jìn)行I2C端口初始化,然后配置I2C控制寄存器。I2C接口初始化操作通過(guò)函數(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)用實(shí)例
(2)I2C寫(xiě)操作
I2C寫(xiě)操作通過(guò)函數(shù)voidiic_write_24C08(LJ32slvAddr,U32addr,U8data)完成,其中,slvAddr為從設(shè)備地址,在本系統(tǒng)中為0xA0,addr為待寫(xiě)入數(shù)據(jù)到芯片的地址;data為待寫(xiě)入的數(shù)據(jù)。I2C寫(xiě)操作代碼如下所示。①填寫(xiě)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è)置從設(shè)備地址并啟動(dòng)I2C操作。在I2C輪詢函數(shù)中進(jìn)行讀/寫(xiě)操作,操作完畢,iicdata
txsize將被置為-1。
rIICDS=slvAddr;
rIICSTAT=0xf0; /*MasTx,Start*/③等待寫(xiě)操作完成。
while(iic_data_tx_size!=-1);Run_IicPoll();8.2.3S3C2410A的I2C接口應(yīng)用實(shí)例④等待從設(shè)備應(yīng)答。_iicMode=POLLACK; while(1){
rIICDS=slvAddr; _iicStatus=0x100;
//初始化_iicStatus,以便于檢查_(kāi)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)答時(shí)退出while }
rIICSTAT=0xd0; //MasterTx
condition,Stop(Write),OutputEnable
rIICCON=0xaf; //繼續(xù)I2C操作
Delay(1); //等待直到停止條件生效8.2.3S3C2410A的I2C接口應(yīng)用實(shí)例
(3)I2C讀操作
I2C讀操作通過(guò)函數(shù)voidiic_read_24C08(U32.s1vAddr、U32addr、U8關(guān)data)完成,其中slvAddr為從設(shè)備地址,在本系統(tǒng)中為0xA0;addr為待讀人數(shù)據(jù)的地址;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京工業(yè)職業(yè)技術(shù)大學(xué)《裝配式建筑設(shè)計(jì)與應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 南華大學(xué)船山學(xué)院《數(shù)控加工與編程》2023-2024學(xué)年第一學(xué)期期末試卷
- 南充文化旅游職業(yè)學(xué)院《音樂(lè)文學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 南昌職業(yè)大學(xué)《微電影創(chuàng)作》2023-2024學(xué)年第一學(xué)期期末試卷
- 閩南師范大學(xué)《衛(wèi)生化學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 呂梁學(xué)院《大數(shù)據(jù)原理與實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 洛陽(yáng)文化旅游職業(yè)學(xué)院《人力資源管理創(chuàng)新》2023-2024學(xué)年第一學(xué)期期末試卷
- 瀘州醫(yī)療器械職業(yè)學(xué)院《圖像采集與處理二》2023-2024學(xué)年第一學(xué)期期末試卷
- 隴東學(xué)院《朗讀學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 林州建筑職業(yè)技術(shù)學(xué)院《建筑施工與經(jīng)濟(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海紐約大學(xué)自主招生面試試題綜合素質(zhì)答案技巧
- 辦公家具項(xiàng)目實(shí)施方案、供貨方案
- 2022年物流服務(wù)師職業(yè)技能競(jìng)賽理論題庫(kù)(含答案)
- ?;钒踩僮饕?guī)程
- 連鎖遺傳和遺傳作圖
- DB63∕T 1885-2020 青海省城鎮(zhèn)老舊小區(qū)綜合改造技術(shù)規(guī)程
- 高邊坡施工危險(xiǎn)源辨識(shí)及分析
- 中海地產(chǎn)設(shè)計(jì)管理程序
- 簡(jiǎn)譜視唱15942
- 《城鎮(zhèn)燃?xì)庠O(shè)施運(yùn)行、維護(hù)和搶修安全技術(shù)規(guī)程》(CJJ51-2006)
- 項(xiàng)目付款審核流程(visio流程圖)
評(píng)論
0/150
提交評(píng)論