LPC2124有一個標準的I2C總線接口,可配置為主機或從機,總線時鐘速率可調(diào)整,最高可支持400KHZ總線速率。使用I2C總線時,要將相應(yīng)得引腳設(shè)置連接SCL和SDA,并且總線上要上拉電阻,阻值為1~10KΩ,依據(jù)所需要的總線速率而定??偩€速率越高,電阻阻值應(yīng)該越小。I2C總線可接標準I2C接口器件,如串行EEPROM、RAM、LCD、時鐘芯片以及音調(diào)發(fā)生器。
根據(jù)方向位(R/W)狀態(tài)的不同,I2C總線上存在以下兩種類型的數(shù)據(jù)傳輸:
?
⑴從主發(fā)送器向從接收器發(fā)送數(shù)據(jù)。
主機發(fā)送得第一個字節(jié)是從機地址,接下來是數(shù)據(jù)字節(jié)流。從機每接收到一個字節(jié)返回一個應(yīng)答位。
⑵從發(fā)送器向主接收器發(fā)送數(shù)據(jù)。
第一個字節(jié)(從地址)從主機發(fā)送。從機返回一個應(yīng)答位。接下來從機向主機發(fā)送數(shù)據(jù)字節(jié)。主機每接收一個字節(jié)返回一個應(yīng)答位。接收完最后一個字節(jié),主機返回一個“非應(yīng)答位”。主器件產(chǎn)生所有串行時鐘脈沖和起始以及停止條件。出現(xiàn)停止條件或重復(fù)的起始條件時傳輸結(jié)束。由于重復(fù)的起始條件同時是下一個串行發(fā)送的開始,因此I2C總線不會被釋放。
LPC2124的I2C是字節(jié)方式的I2C接口,只要把一字節(jié)數(shù)據(jù)寫入I2C數(shù)據(jù)寄存器I2DAT后,即可由I2C接口自動完成所有的數(shù)據(jù)位發(fā)送。它有4種操作模式:主發(fā)送器模式、主接收器模式、從發(fā)送器模式和從接收器模式。
⑴主發(fā)送器模式
該模式中,數(shù)據(jù)從主機發(fā)送到從機。在進入主發(fā)送器模式之前,I2CONSET(I2C控制置位寄存器)必須按如下設(shè)置進行初始化:
I2CONSET --- I2EN STA STO SI AA --- ---
-- 1 0 0 0 0 -- --
說明如下:
I2EN=1,使能I2C接口;
AA=0,不產(chǎn)生應(yīng)答信號,即不允許進入從機模式;
SI=0,I2C中斷標志為0;
STO=0,停止標志為0;
STA=0,起始標志為0。
在該模式下,數(shù)據(jù)方向位(R/W)應(yīng)為0表示執(zhí)行寫操作。因此第一個發(fā)送的字節(jié)為從地址(7位)和寫方向位。數(shù)據(jù)的發(fā)送每次為8位,每發(fā)送完一字節(jié),都接收到一個由從機返回的應(yīng)答位。該模式的數(shù)據(jù)發(fā)送操作步驟如下:
① 通過軟件置位STA,進入I2C主發(fā)送器模式,I2C邏輯在總線空閑后立即發(fā)送一個起始條件。
② 當發(fā)送完起始條件后,SI位置位。此時I2STAT(狀態(tài)寄存器)中的狀態(tài)代碼為08H,該狀態(tài)代碼用于中斷服務(wù)程序的處理。
③ 把從地址和寫方向位裝入I2DAT(數(shù)據(jù)寄存器),然后清零SI位(向I2CONCLR寄存器中得SIC位寫入1可清零SI),開始發(fā)送從地址和寫方向位。
④ 當從地址和寫方向位已發(fā)送且接收到應(yīng)答位后,SI位再次置位(可能的狀態(tài)代碼為18H,20H或38H)。
⑤ 當狀態(tài)碼為18H時,表明從機已應(yīng)答,則可以將數(shù)據(jù)裝入I2DAT,然后清零SI位,開始發(fā)送數(shù)據(jù)。
⑥ 當正確發(fā)送數(shù)據(jù),SI位再次置位(可能的狀態(tài)碼為28H,30H)。此時可以再次發(fā)送數(shù)據(jù)或者置位STO結(jié)束總線。
⑵主接收器模式
在該模式下,主機所接收的數(shù)據(jù)字節(jié)來自從發(fā)送器,數(shù)據(jù)方向位應(yīng)該為1表示執(zhí)行讀操作。該模式的數(shù)據(jù)接收操作步驟如下:
① 通過軟件置位STA,進入I2C主發(fā)送器模式,I2C邏輯在總線空閑后立即發(fā)送一個起始條件。
② 當發(fā)送完起始條件后,SI位置位。此時I2STAT(狀態(tài)寄存器)中的狀態(tài)代碼為08H,該狀態(tài)代碼用于中斷服務(wù)程序的處理。
③ 把從地址和讀方向位裝入I2DAT(數(shù)據(jù)寄存器),然后清零SI位,開始發(fā)送從地址和讀方向位。
④ 當從地址和讀方向位已發(fā)送且接收到應(yīng)答位后,SI位再次置位(可能的狀態(tài)代碼為38H,40H或48H)。
⑤ 當狀態(tài)碼為40H時,表明從機已應(yīng)答。設(shè)置AA位,用來控制接收到數(shù)據(jù)后是產(chǎn)生應(yīng)答信號還是產(chǎn)生非應(yīng)答信號,然后清零SI位,開始接收數(shù)據(jù)。
⑥ 當正確接收到一個字節(jié)數(shù)據(jù)后,SI位再次置位(可能的狀態(tài)碼為50H或58H)。此時可以再次接收數(shù)據(jù)或者置位STO結(jié)束總線。
⑶從接收器模式
當配置為I2C從機時,I2C主機可以對它進行讀、寫操作。要初始化為從機用戶必須將從地址寫入I2ADR(從地址寄存器),并按如下配置I2CONSET:
I2CONSET --- I2EN STA STO SI AA --- ---
-- 1 0 0 0 1 -- --
在該模式下,從主發(fā)送器接收數(shù)據(jù)字節(jié)。當主機訪問從機時,接收主機發(fā)送過來的數(shù)據(jù),并產(chǎn)生應(yīng)答信號。數(shù)據(jù)方向位應(yīng)該為0表示寫操作。該模式的數(shù)據(jù)接收操作步驟如下:
① 將從地址寫入I2ADR并配置I2CONSET完成初始化。等待它被自身的從地址或通用地址尋址。
② 在接收到地址和方向位后,SI位置位并可從I2STAT中讀出有效的狀態(tài)代碼。
③ 根據(jù)狀態(tài)代碼執(zhí)行相應(yīng)的操作。
⑷從發(fā)送器模式
當主機訪問從機時,向主機發(fā)送數(shù)據(jù),并等待主機的應(yīng)答信號。數(shù)據(jù)方向位應(yīng)該為1表示讀操作。使用該模式時,用戶程序只需根據(jù)各種狀態(tài)碼作出相應(yīng)的操作。
I2C時鐘由SCL占空比寄存器控制(I2SCLH、I2SCLL),分別設(shè)置SCL的高電平和低電平時間,獲得合適的總線時鐘頻率。寄存器I2CONSET則用來控制I2C總線的模式及總線操作,其位SI為I2C中斷標志位,所有總線操作都要依賴于這一標志;同時它又鉗住總線,使總線的數(shù)據(jù)發(fā)送/接收得以同步控制。寄存器I2CONCLR則為對應(yīng)的清零寄存器;I2STAT為I2C狀態(tài)寄存器,用于指示總線處于哪種狀態(tài),以方便控制操作。I2DAT為I2C總線數(shù)據(jù)寄存器,包含要發(fā)送的數(shù)據(jù)或剛收到的數(shù)據(jù)。當系統(tǒng)作為從機時,I2ADR從機地址寄存器有效。當總線對此地址進行訪問時,將會產(chǎn)生I2C中斷。
I2C主機基本操作方法:
①設(shè)置I2C引腳連接;
②設(shè)置I2C時鐘速率(I2SCLH、I2SCLL);
③設(shè)置為主機,并發(fā)送起始信號(I2CONSET的I2EN、STA位為1,AA位為0);
④發(fā)送從機地址(I2DAT),控制I2CONSET發(fā)送;
⑤判斷總線狀態(tài)(I2STAT),進行數(shù)據(jù)傳輸控制;
⑥發(fā)送結(jié)束信號(I2CONSET)。
I2C從機基本操作方法:
①設(shè)置I2C引腳連接;
②設(shè)置自身的從機地址(I2ADR);
③使能I2C(I2CONSET的I2EN、AA位為1);
④判斷SI位或者等待I2C中斷,等待主機操作;
⑤判斷總線狀態(tài)I2STAT,進行數(shù)據(jù)傳輸控制。
評論
查看更多