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