国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

1、I2C概述

I2C總線是一種用于內(nèi)部IC控制的具有多端控制能力的雙線雙向串行數(shù)據(jù)總線系統(tǒng)。能夠用于替代標(biāo)準(zhǔn)的并行總線,連接各種集成電路和功能模塊。I2C器件的應(yīng)用能夠減少電路間連線,減少電路板尺寸,降低硬件成本,并提高了系統(tǒng)可靠性。

雖然I2C總線始終與先進(jìn)技術(shù)保持同步,但仍具有向下兼容性,高速模式下速度可達(dá)3.4Mbps,例如EEPROM和FLASH存儲(chǔ)器。

I2C傳輸模塊存在于MSP430F15/16X中,能夠?yàn)镸SP430和I2C兼容的設(shè)備互連提供接口。

I2C中關(guān)于設(shè)備的基本概念如下:

  • 發(fā)送設(shè)備:發(fā)送數(shù)據(jù)到總線上的設(shè)備。

  • 接收設(shè)備:從總線上接收數(shù)據(jù)的設(shè)備。

  • 主設(shè)備:?jiǎn)?dòng)數(shù)據(jù)傳送并產(chǎn)生時(shí)鐘信號(hào)的設(shè)備。

  • 從設(shè)備:被主器件尋址的設(shè)備。

I2C是一個(gè)多主總線,即它可以由多個(gè)互連的器件控制。所以任何一個(gè)設(shè)備都能像主控器一樣工作,并控制總線。支持I2C的設(shè)備有微控制器,,A/D、D/A轉(zhuǎn)換器,儲(chǔ)存器,LCD控制器,LED驅(qū)動(dòng)器,I/O端口擴(kuò)展器以及實(shí)時(shí)時(shí)鐘。在互連的系統(tǒng)中,每個(gè)設(shè)備都有自己的唯一地址,可以作為發(fā)送設(shè)備(LCD驅(qū)動(dòng)器)、接收設(shè)備,或同時(shí)具有發(fā)送和接收功能(存儲(chǔ)器)。根據(jù)設(shè)備是否必須啟動(dòng)數(shù)據(jù)傳輸還是僅僅被尋址的情況,發(fā)送設(shè)備或接收設(shè)備可以工作于主模式或從模式。

MSP430和有關(guān)設(shè)備互連如圖1所示。

通常的I2C總線包括:

  • SCL:雙向串行時(shí)鐘線。

  • SDA:雙向傳輸?shù)拇袛?shù)據(jù)線。

圖1:I2C總線連接

由于SDA與SCL為雙向 I/O 線,都是開(kāi)漏極端(輸出1時(shí),為高阻狀態(tài)),因此I2C總線上的所有設(shè)備的SDA和SCL引腳都要外接上拉電阻。

MSP430-I2C模塊結(jié)構(gòu)如圖2所示。

圖2:I2C模塊結(jié)構(gòu)

當(dāng)SYNC和I2C都置位的情況下,串行通信模塊USART0工作于I2C模式。由圖2可見(jiàn),MSP430-I2C模塊包括時(shí)鐘產(chǎn)生、數(shù)據(jù)發(fā)送和數(shù)據(jù)接收部件,它們通過(guò)大量的控制寄存器來(lái)實(shí)現(xiàn)靈活的I2C操作。

MSP430系列I2C模塊的主要特征如下:

1)符合I2C規(guī)范。

  • 字/字節(jié)格式傳輸;

  • 7位或者10位設(shè)備尋址模式;

  • 群呼;

  • 開(kāi)始/重新開(kāi)始/停止;

  • 多主傳送/從接收模式;

  • 多主接收/從發(fā)送模式;

  • 主發(fā)送,從發(fā)送,主接收,從接收;

  • 標(biāo)準(zhǔn)模式速度為100Kbps,快速模式速度可以達(dá)到400Kbps。

2)讀寫(xiě)采用先進(jìn)先出緩沖結(jié)構(gòu)。

3)可編程時(shí)鐘發(fā)生器

4)16位數(shù)據(jù)訪問(wèn)可達(dá)到總線的最大吞吐率。

5)自動(dòng)數(shù)據(jù)字節(jié)計(jì)算。

6)支持低功耗模式。

7)從接收根據(jù)檢測(cè)到開(kāi)始信號(hào)自動(dòng)將MSP430從LPMx模式喚醒。

8)兩個(gè)DMA觸發(fā)源。

9)中斷功能豐富。

10)只能用USART0實(shí)現(xiàn)I2C操作。

2、I2C模式

2.1 I2C的尋址模式

早期的I2C總線數(shù)據(jù)傳輸速率最高為I00Kbits/s,采用7位尋址。但是由于數(shù)據(jù)傳輸速率和應(yīng)用功能的迅速增加,I2C總線也增強(qiáng)為快速模式(400Kb1ts/s)和10位尋址以滿足更高速度和更大尋址空間的需求。

MSP430-I2C模塊支持7位和10位兩種尋址模式,7位尋址模式最多尋址128個(gè)設(shè)備,10位尋址格式最多尋址1024個(gè)設(shè)備。12C總線理論上可以允許的最大設(shè)備數(shù),是以總線上所有器件的電容總和不超過(guò)400pF為限(其中包括連線本身的電容和其連接端的引出電容),總線上所有器件要依靠SDA發(fā)送的地址信號(hào)尋址,不需要片選信號(hào)。

(1)7位尋址模式

圖3所示為7位地址方式下I2C數(shù)據(jù)傳輸格式。第一個(gè)字節(jié)由7位從地址和R/W區(qū)(讀/寫(xiě)位)組成,不論總線上傳送地址信息還是數(shù)據(jù)信息,每個(gè)字節(jié)傳輸完畢接收設(shè)備都會(huì)發(fā)送響應(yīng)位(ACK)。地址類信息傳輸之后是數(shù)據(jù)信息,直到接收到停止信號(hào)。

圖3:7位尋址模式數(shù)據(jù)格式

(2)10位尋址模式

圖4所示為10位地址方式下I2C數(shù)據(jù)傳輸格式。第一個(gè)字節(jié)由二進(jìn)制位11110和從地址的最高兩位以及讀寫(xiě)控制位R/W組成,第一個(gè)字節(jié)傳輸完畢依然還是響應(yīng)位,第二個(gè)字節(jié)就是10位從地址的低8位,后面是響應(yīng)位和數(shù)據(jù)。

圖4:10位尋址模式數(shù)據(jù)格式

(3)二次發(fā)送從地址模式(重復(fù)產(chǎn)生起始信號(hào))

主設(shè)備可以在不停止傳輸?shù)那闆r下改變SDA上傳輸?shù)臄?shù)據(jù)流方向,方法就是主設(shè)備再次發(fā)送開(kāi)始信號(hào),并重新發(fā)送從地址和讀寫(xiě)控制位R/W。圖5所示為重新產(chǎn)生起始信號(hào)數(shù)據(jù)傳輸格式。

圖5:二次發(fā)送從地址模式數(shù)據(jù)格式

2.2 I2C模塊傳輸特性

I2C模塊能在兩個(gè)設(shè)備之間傳輸信息,采用的方法是總線的電氣特征、總線仲裁和時(shí)鐘同步。

(1)電氣特性

  • 口起始位:SCL=1時(shí),SDA上有下降沿。

  • 口停止位:SCL=1時(shí),SDA上有上升沿。

起始位之后總線被認(rèn)為忙:有數(shù)據(jù)在傳輸。SCL為高電平的時(shí)候,SDA的數(shù)據(jù)必須保持穩(wěn)定,否則由于起始位和停止位的電氣邊沿特性,SDA上數(shù)據(jù)發(fā)生改變將被識(shí)別成起始位或者停止位。所以只有當(dāng)SCL為低電平的時(shí)候才允許SDA上的數(shù)據(jù)改變。停止位之后總線被認(rèn)為空閑,空閑狀態(tài)時(shí)SDA和SCL都是高電平。當(dāng)一個(gè)字節(jié)發(fā)送或接收完畢需要CPU干預(yù)的時(shí)候,SCL一直保持為低。

起始位、停止位和數(shù)據(jù)位在SDA和SCL總線上的關(guān)系如圖6所示。

圖6:I2C模塊數(shù)據(jù)傳輸

起始位和停止位都是主設(shè)備產(chǎn)生的,主設(shè)備為數(shù)據(jù)傳輸產(chǎn)生時(shí)鐘信號(hào):主設(shè)備在傳輸每個(gè)數(shù)據(jù)位時(shí)都會(huì)產(chǎn)生一個(gè)時(shí)鐘脈沖,如圖7所示。

圖7:I2C總線上的位傳輸

(2)總線仲裁

當(dāng)兩個(gè)或多個(gè)主發(fā)送設(shè)備在總線上同時(shí)開(kāi)始發(fā)送數(shù)據(jù)時(shí),總線仲裁過(guò)程能夠避免總線沖突,如圖8所示。

當(dāng)兩個(gè)設(shè)備同時(shí)發(fā)出起始位進(jìn)行數(shù)據(jù)傳輸時(shí),相互競(jìng)爭(zhēng)的設(shè)備使它們的時(shí)鐘保持同步,正常發(fā)送數(shù)據(jù)。沒(méi)有檢測(cè)到?jīng)_突之前,每個(gè)設(shè)備都認(rèn)為只有自己在使用總線。

圖8:兩個(gè)設(shè)備之間的仲裁過(guò)程

仲裁過(guò)程中使用的數(shù)據(jù)就是相互競(jìng)爭(zhēng)的設(shè)備發(fā)送到SDA線上的數(shù)據(jù)。第一個(gè)檢測(cè)到自己發(fā)送的數(shù)據(jù)和總線上數(shù)據(jù)不匹配的設(shè)備就失去仲裁能力。如果兩個(gè)或更多的設(shè)備發(fā)送的第一個(gè)字節(jié)的內(nèi)容相同,那么仲裁就發(fā)生在隨后傳輸中。也許直到相互競(jìng)爭(zhēng)的設(shè)備已經(jīng)傳輸了許多字節(jié)后,仲裁才會(huì)完成。產(chǎn)生競(jìng)爭(zhēng)的時(shí)候,如果某個(gè)設(shè)備當(dāng)前發(fā)送位的二進(jìn)制數(shù)值和前一個(gè)時(shí)鐘節(jié)拍發(fā)送的內(nèi)容相同,那么它在仲裁過(guò)程中就獲得較高的優(yōu)先級(jí)。圖4中,第一個(gè)主發(fā)送設(shè)備產(chǎn)生的邏輯高電平被第二個(gè)主發(fā)送設(shè)備產(chǎn)生的邏輯低電平否決,因?yàn)榍耙粋€(gè)節(jié)拍總線上是低電平。失去仲裁的第一個(gè)主發(fā)送設(shè)備轉(zhuǎn)變成從接收模式,并且設(shè)置仲裁失效中斷標(biāo)志ALIFG。

如果系統(tǒng)中有多個(gè)主設(shè)備,就必須用仲裁來(lái)避免總線沖突和數(shù)據(jù)丟失。

注童:仲裁不能發(fā)生在以下場(chǎng)合:

  • 重復(fù)起始位和數(shù)據(jù)位之間。

  • 停止位和數(shù)據(jù)位之間。

  • 重復(fù)起始位和停止位之間。

(3)時(shí)鐘同步

仲裁過(guò)程中,要對(duì)來(lái)自不同主設(shè)備的時(shí)鐘進(jìn)行同步處理。在SCL上第一個(gè)產(chǎn)生低電平的主設(shè)備強(qiáng)制其他主設(shè)備也發(fā)送低電平,SCL保持為低,如果某些主設(shè)備已經(jīng)結(jié)束低電平狀態(tài),就開(kāi)始等待,直到所有的主設(shè)備都結(jié)束低電平時(shí)鐘,如圖9所示。

同步過(guò)程某個(gè)快速設(shè)備的速度可能被其他設(shè)備降低。

圖9:I2C上模塊時(shí)鐘同步

2.3 I2C上模塊的傳送模式

I2C模塊的傳送模式為主從式,對(duì)系統(tǒng)中的某一器件來(lái)說(shuō)有4種可能的工作方式:主發(fā)送方式,從發(fā)送方式,主接收方式,從接收方式。

(1)主模式

在主模式,位I2CRM、I2CSTT和I2CSTP控制數(shù)據(jù)的發(fā)送和接收,如圖10所示。

圖10:I2C模塊主模式操作

主模式用I2CNDAT支持自動(dòng)數(shù)據(jù)字節(jié)計(jì)數(shù)。在I2C=0情況下,I2CNDAT被寫(xiě)入的值是將要發(fā)送或者接收的數(shù)據(jù)字節(jié)數(shù)。當(dāng)相關(guān)的所有字節(jié)傳輸完畢之后,停止位能夠自動(dòng)產(chǎn)生。

注意:當(dāng)I2CBB=1并且I2CRM=0時(shí),不能改變I2CNDAT的值。

(2)從模式

在從模式,發(fā)送和接收操作都是由I2C模塊自動(dòng)控制的。

從接收模式:主設(shè)備每產(chǎn)生一個(gè)時(shí)鐘脈沖,SDA總線上就能接收到串行數(shù)據(jù)位。

從發(fā)送模式:從設(shè)備接收到主機(jī)發(fā)送的匹配地址和主設(shè)備的數(shù)據(jù)接收請(qǐng)求后,主設(shè)備每產(chǎn)生一個(gè)時(shí)鐘脈沖,從設(shè)備就向SDA總線上發(fā)送串行數(shù)據(jù)位。

雖然從設(shè)備不產(chǎn)生時(shí)鐘信號(hào),當(dāng)一個(gè)字節(jié)接收或者發(fā)送完畢需要CPU干預(yù)時(shí)可以將SCL信號(hào)拉低。

注意:為了能夠進(jìn)行正確從模式操作,控制位I2CTRX必須被清除。

(3)I2C模塊的中斷

I2C模塊的8個(gè)中斷源共用一個(gè)中斷向量,每個(gè)中斷源有單獨(dú)的中斷使能控制位,當(dāng)某個(gè)中斷被允許,而且GIF置位,對(duì)應(yīng)的中斷標(biāo)志會(huì)產(chǎn)生中斷請(qǐng)求。I2C的中斷事件如圖11所示。

圖11:I2C的中斷事件

(4)I2C模塊的DMA與中斷操作

I2C模塊提供了兩個(gè)DMA觸發(fā)源,準(zhǔn)備接收和發(fā)送新數(shù)據(jù)時(shí)都可以觸發(fā)DMA操作。TXDMAEN和RXDMAEN是I2C模塊的DMA傳輸使能控制位。當(dāng)RXDMAEN置位時(shí),RXRDYIE被忽略,RXRDYIFG標(biāo)志不能引發(fā)中斷。當(dāng)TXDMAEN置位時(shí),TXRDYIE被忽略,TXRDYIFG標(biāo)志不能引發(fā)中斷。

3、I2C模塊寄存器及相關(guān)操作

I2C模塊有豐富的寄存器資源供用戶使用,如圖12所示。

圖12:I2C模塊的寄存器

下面分別介紹:

3.1 U0CTL,I2C模式下USART0控制寄存器

I2C模式只能由USART0實(shí)現(xiàn),所以在MSP430F15/16X系列中,USART0控制寄存器的定義和其他系列定義之間有一些差別,各位定義如下:

RXDMAEN 接收DMA使能,當(dāng)RXDMAEN置位時(shí),允許I2C模塊數(shù)據(jù)傳送給DAM控制器,同時(shí)RXRDYIE位被自動(dòng)清除。

  • 0 禁止DMA操作;

  • 1 使能DMA操作。

TXDMAEN 傳送DMA使能,當(dāng)TXDMAEN置位時(shí),允許數(shù)據(jù)從DMA控制器傳送到I2C模塊,同時(shí)TXRDYIE位被自動(dòng)清除。

  • 0 禁止DMA操作;

  • 1 使能DMA操作。

I2C I2C模式控制位,當(dāng)SYNC=1時(shí),選擇I2C或者SPI模式。

  • 0 SPI模式;

  • 1 I2C模式。

XA 地址擴(kuò)展位。

  • 0 7位尋址方式;

  • 1 10位尋址方式。

LISTEN 選擇反饋模式,該位有效的條件:MST=1同時(shí) I2CTRX=1(主機(jī)發(fā)送)。

  • 0 正常模式(無(wú)反饋);

  • 1 反饋模式(SDA數(shù)據(jù)由內(nèi)部反饋給接收器)。

MST 主機(jī)、從機(jī)模式選擇,當(dāng)仲裁失效時(shí),該位自動(dòng)被清除。

  • 0 從機(jī)模式;

  • 1 主機(jī)模式。

I2CEN I2C模塊使能控制,該位初始狀態(tài)為置位,另外SWRST只對(duì)SPI或UART有效。當(dāng)I2C和SYNC位在PUC后首次置位時(shí),該位是I2CEN功能,并能被自動(dòng)清除。

  • 0 I2C操作被禁止;

  • 1 I2C操作使能。

注意:在I2C模式下,設(shè)置I2CEN=0會(huì)產(chǎn)生如下影響:

  • I2C通信停止。

  • SDA和SCL都是高阻狀態(tài)。

  • I2CTCTL的位3~0被清除,位4~7不變。

  • 奇存器I2CDTCL、I2CDR被清除。

  • 發(fā)送和接收數(shù)據(jù)寄存器被清除。

  • 等存器U0CTL、I2CNDAT、I2CSCLL、I2CSCLH、I2COA、I2CSA、I2CIE、I2CIFG和I2CIV內(nèi)容不變。

U0CTL在I2C模式的一些常見(jiàn)初始化操作如下:

(1)配置USART為I2C操作

USART可進(jìn)行的傳輸模式有UART、SPI和I2C。所以在傳輸之前要正確選擇模式,由U0CTL定義:SYNC=0選擇UART模式,BIT5為SPB;SYNC=1選擇SPI或I2C模式,BIT5為I2C。另外由I2C位來(lái)選擇兩種模式之一:復(fù)位為SPI模式,置位為I2C模式。具體設(shè)置如圖13所示。

圖13:USART模式選擇控制

初始化之后,I2C模塊為接收和發(fā)送數(shù)據(jù)做準(zhǔn)備。如果清除I2CEN,I2C模塊不能進(jìn)行I2C操作。

(2)重新配置12c模塊進(jìn)行UART或者SPI操作

重新配置順序:

  • 清除I2C、I2CEN和SYNC位(CLR.B &U0CTL)。

  • 設(shè)置SWRST位(MOV.B #SWRST,&U0CTL)。

  • 進(jìn)行UART或者SPI模式的初始化。

》》》在SWART=1情況下初始化所有USART寄存器(包括UxCTL):

  • 通過(guò)特殊功能寄存器MEx使能USART模塊(URXEx,UTXEx之一或全部);

  • 軟件清除SWRST位(BIC.B #SWRST,&UxCTL);

  • 通過(guò)特殊功能寄存器IEx中斷使能(URXIEx,UTXIEx之一或全部)(可選)。

(3)復(fù)位條件下配置I2C模式

配置順序:

  • 在SWRST=1情況下選擇I2C模式(BIS.B #SYNC+I2C,&U0CTL)。

  • 清除I2CEN位(BIC.B #I2CEN,&U0CTL)。

  • 在I2C=0情況下重新配置I2C模塊。

  • 軟件設(shè)置I2CEN(BIS.B #I2CEN,&U0CTL)。

注意:配置或者重新配置I2C模塊,必須要在控制位I2C=0的條件下進(jìn)行初始化。

3.2 I2CCTL,I2C傳輸控制寄存器

各位定義如下:

其中陰影部分只有在I2CEN=0時(shí)才能被修改。

I2CWORD 選擇I2C數(shù)據(jù)寄存器是字節(jié)還是字模式。

  • 0 字節(jié)模式;

  • 1 字模式。

I2CCRM I2C重復(fù)模式控制位。

  • 0 傳輸?shù)淖止?jié)數(shù)由寄存器I2CNDAT定義;

  • 1 傳輸?shù)淖止?jié)數(shù)由軟件設(shè)置。

I2CSSELx I2C時(shí)鐘源選擇位,當(dāng)MST=1且仲裁失效時(shí),外部的SCL信號(hào)自動(dòng)被應(yīng)用。

  • 00 無(wú)時(shí)鐘信號(hào)(I2C模塊處于非活動(dòng)狀態(tài));

  • 01 ACLK;

  • 10 SMCLK;

  • 11 SMCLK。

I2CTRX 在MST=1(主機(jī)模式)時(shí),該位選擇I2C設(shè)備的操作類型是接收還是發(fā)送。當(dāng)MST=0(從機(jī)模式)時(shí),地址字節(jié)的R/W位用來(lái)定義數(shù)據(jù)傳輸方向,同時(shí)I2CTRX反映SDA引腳上的數(shù)據(jù)方向。

  • 0 接收模式,SDA引腳接收數(shù)據(jù);

  • 1 發(fā)送模式,SDA引腳發(fā)送數(shù)據(jù)。

I2CSTB 當(dāng)MST=1時(shí),I2CSTB置位可以初始化一個(gè)開(kāi)始字節(jié)。

  • 0 無(wú)操作;

  • 1 發(fā)送開(kāi)始信號(hào),開(kāi)始字節(jié)(03H),沒(méi)有結(jié)束信號(hào)。

I2CSTP 用來(lái)產(chǎn)生結(jié)束信號(hào),結(jié)束信號(hào)發(fā)出后,I2CSTP自動(dòng)被清除。

  • 0 無(wú)信號(hào);

  • 1 發(fā)送結(jié)束信號(hào)。

I2CSTT 用來(lái)產(chǎn)生開(kāi)始信號(hào),開(kāi)始信號(hào)產(chǎn)生后,I2CSTT仃自動(dòng)被清除。

  • 0 無(wú)信號(hào);

  • 1 發(fā)送開(kāi)始信號(hào)。

3.3 I2CDCTL,I2C數(shù)據(jù)控制寄存器

Unused 沒(méi)有定義,讀出值為0。

I2CBUSY I2C模塊是否空閑。

  • 0 I2C模塊空閑;

  • 1 I2C模塊忙。

I2CSCLLOW 當(dāng)MSP430作為主機(jī)且沒(méi)用作從機(jī)模式時(shí),某個(gè)從設(shè)備將SCL線拉為低電平。

  • 0 SCL沒(méi)有被拉為低電平;

  • 1 SCL被拉為低電平。

I2CSBD 該位選擇接收寄存器的數(shù)據(jù)是字還是字節(jié)。當(dāng)I2CWORD=1時(shí),該位有效。

  • 0 接收內(nèi)容為一個(gè)字;

  • 1 I2CDR的低字節(jié)數(shù)據(jù)有效(被接收)。

I2CTXUDF 標(biāo)志I2C發(fā)送是否發(fā)生下溢。

  • 0 沒(méi)有發(fā)生下溢;

  • 1 發(fā)生下溢。

I2CRXOVR 標(biāo)志I2C接收是否發(fā)生上溢。

  • 0 沒(méi)有發(fā)生上溢;

  • 1 發(fā)生上溢。

發(fā)送下溢:在主模式,當(dāng)發(fā)送移位寄存器和發(fā)送緩沖器都空并且I2CNDAT>0時(shí),會(huì)發(fā)生發(fā)送下溢。在從模式,當(dāng)發(fā)送移位寄存器和發(fā)送緩沖器都為空并且另外的I2C主設(shè)備請(qǐng)求接收數(shù)據(jù),會(huì)發(fā)生發(fā)送下溢,I2CTXUDF被置位。I2CTXUDF復(fù)位的方法:向I2CDR寫(xiě)入數(shù)據(jù)或者復(fù)位I2CEN。I2CTXUDF只能用在發(fā)送模式。

接收上溢:當(dāng)接收移位寄存器和接收緩沖器滿,接收上溢發(fā)生,I2CRXOVR被置位,SCL保持低電平,能夠阻止總線的活動(dòng),因此發(fā)生上溢不會(huì)丟失數(shù)據(jù)。I2CRXOVR復(fù)位的方法:讀取I2CDR的數(shù)據(jù)或者復(fù)位I2CEN。I2CRXOVR只能用在接收模式。

I2CBB 判斷I2C總線是否忙。開(kāi)始信號(hào)將該位置1,停止信號(hào)或I2CEN=0時(shí),該位復(fù)位。

  • 0 總線不忙;

  • 1 總線忙。

3.4 I2CDR,I2C數(shù)據(jù)寄存器

通過(guò)位I2CWORD的控制柜,I2C數(shù)據(jù)寄存器可以被選擇作為8位或者16位。圖14就是I2C數(shù)據(jù)寄存器的功能。

圖14:I2C數(shù)據(jù)寄存器的功能

3.5 I2CNDAT,I2C字節(jié)數(shù)寄存器

I2CNDAT 內(nèi)容默認(rèn)為字節(jié)數(shù),當(dāng)I2C模塊工作于字模式時(shí),該寄存器中的值必須為偶數(shù)。

  • 當(dāng)I2CBB=1時(shí),該寄存器值為傳輸過(guò)程的字節(jié)數(shù)。

  • 當(dāng)I2CBB=0時(shí),該寄存器值為將要傳輸?shù)淖止?jié)數(shù)。

注意:當(dāng)I2CBB=1并且I2CRM=0時(shí),不能修改I2CNDAT。

3.6 I2CPSC,I2C分頻寄存器

I2C模塊輸入時(shí)鐘分頻后作為I2C模塊的內(nèi)部時(shí)鐘。分頻因子為I2CPSC的值加1。

000H 1分頻

001H 2分頻

......

0FFH 256分頻

3.7 I2CSCLH,I2C時(shí)鐘高電平調(diào)整寄存器

該寄存器為8位,當(dāng)I2C模塊工作于主模式,I2CSCLH和I2CPSC的值能夠定義SCL上的高電平寬度。

高電平寬度=(I2CSCLH+2)×I2CPSC

  • 000H SCL高電平寬度=5×I2CPSC

  • 001H SCL高電平寬度=5×I2CPSC

  • 002H SCL高電平寬度=5×I2CPSC

  • 003H SCL高電平寬度=5×I2CPSC

  • 004H SCL高電平寬度=6×I2CPSC

  • ......

  • 0FFH SCL高電平寬度=257×I2CPSC

I2CSCLH只有在I2CEN=0時(shí)候才能被修改。

3.8 I2CSCLL,I2C時(shí)鐘低電平調(diào)整寄存器

該寄存器為8位,當(dāng)I2C模塊工作于主模式,I2CSCLL和I2CPSC的值能夠定義SCL的低電平寬度。

低電平寬度=(I2CSCLL+2)×I2CPSC

  • 000H SCL低電平寬度=5×I2CPSC

  • 001H SCL低電平寬度=5×I2CPSC

  • 002H SCL低電平寬度=5×I2CPSC

  • 003H SCL低電平寬度=5×I2CPSC

  • 004H SCL低電平寬度=6×I2CPSC

  • ......

  • 0FFH SCL低電平寬度=257×I2CPSC

I2CSCLL只有在I2CEN=0時(shí)候才能被修改。

I2C模塊所用的時(shí)鐘源由I2CSSELx控制位選擇,寄存器I2CPSC、I2CSCLH和I2CSCLL決定主模式下SCL時(shí)鐘頻率,如圖15所示。不論主模式還是從模式,I2C模塊的時(shí)鐘源頻率至少為10倍的SCL頻率。

圖15:I2C模塊SCL時(shí)鐘產(chǎn)生

3.9 I2COA,I2C本地地址寄存器

I2COA內(nèi)容為MSP430本地 I2C模塊地址,有7位和10位兩種地址格式, I2COA寄存器為右對(duì)齊,最高位分別為位6和位9。

3.10 I2CSA , I2C從設(shè)備地址寄存器

I2CSA內(nèi)容為MSP430所尋址的外部設(shè)備地址, I2CSA只在主機(jī)模式才有效,格式同 I2COA。

3.11 I2CIE,I2C中斷使能寄存器

STTIE 開(kāi)始檢測(cè)中斷使能控制。

  • 0 中斷禁止;

  • 1 中斷使能。

GCIE 群呼中斷使能控制。

  • 0 中斷禁止;

  • 1 中斷使能。

TXRDYIE 傳送準(zhǔn)備好中斷使能控制,當(dāng)TXDMANE=1時(shí),該位自動(dòng)被清除。

  • 0 中斷禁止;

  • 1 中斷使能。

RXRDYIE 接收準(zhǔn)備好中斷使能控制,當(dāng)RXDMANE=1時(shí),該位自動(dòng)被清除。

  • 0 中斷禁止;

  • 1 中斷使能。

ARDYIE 訪問(wèn)準(zhǔn)備好中斷使能控制。

  • 0 中斷禁止;

  • 1 中斷使能。

OAIE 本地地址中斷使能控制。

  • 0 中斷禁止;

  • 1 中斷使能。

NACKIE 沒(méi)有響應(yīng)中斷使能控制。

  • 0 中斷禁止;

  • 1 中斷使能。

ALIE 仲裁失效中斷控制。

  • 0 中斷禁止;

  • 1 中斷使能。

3.12 I2CIFG,I2C中斷標(biāo)志寄存器

STTIFG 開(kāi)始檢測(cè)中斷請(qǐng)求標(biāo)志。

  • 0 沒(méi)有中斷請(qǐng)求;

  • 1 有中斷請(qǐng)求。

GCIFG 群呼中斷請(qǐng)求標(biāo)志。

  • 0 沒(méi)有中斷請(qǐng)求;

  • 1 有中斷請(qǐng)求。

TXRDYIFG 傳送準(zhǔn)備好中斷標(biāo)志。

  • 0 沒(méi)有中斷請(qǐng)求;

  • 1 有中斷請(qǐng)求。

RXRDYIFG 接收準(zhǔn)備好中斷請(qǐng)求標(biāo)志。

  • 0 沒(méi)有中斷請(qǐng)求;

  • 1 有中斷請(qǐng)求。

ARDYIFG 訪問(wèn)準(zhǔn)備好中斷標(biāo)志,圖16為ARDYIFG置位條件。

圖16:ARDYIFG置位條件

OAIFG 本地地址中斷標(biāo)志。

  • 0 沒(méi)有中斷請(qǐng)求;

  • 1 有中斷請(qǐng)求。

NACKIFG 沒(méi)有響應(yīng)中斷標(biāo)志。

  • 0 沒(méi)有中斷請(qǐng)求;

  • 1 有中斷請(qǐng)求。

ALIFG 仲裁失效中斷標(biāo)志。

  • 0 沒(méi)有中斷請(qǐng)求;

  • 1 有中斷請(qǐng)求。

3.13 I2CIV中斷向量寄存器

MSP430的I2C模塊有8個(gè)中斷標(biāo)志,但只有一個(gè)中斷向量。8個(gè)中斷標(biāo)志共用一個(gè)中斷向量,中斷向量寄存器內(nèi)容決定當(dāng)前哪個(gè)中斷標(biāo)志可以引起中斷事件。

MSP430的I2C模塊可以工作在低功耗模式下,只要I2C模塊所需的內(nèi)部時(shí)鐘源出現(xiàn),I2C模塊就進(jìn)入活動(dòng)模式。

當(dāng)I2C模塊工作于從模式,即使沒(méi)有出現(xiàn)內(nèi)部時(shí)鐘源,只要STTIE和GIE中斷允許位置位,當(dāng)I2C模塊檢測(cè)到起始位時(shí),置位STTIFG中斷標(biāo)志,所以CPU被喚醒。此時(shí),SCL保持為低,暫停總線的進(jìn)一步活動(dòng)。中斷服務(wù)程序必須重新使能I2C的內(nèi)部時(shí)鐘源,這樣I2C才能釋放SCL使總線活動(dòng)恢復(fù)正常。

4、I2C應(yīng)用舉例

例:通過(guò)I2C總線互連的兩片MSP430F169之間的通信。

互連的兩片MSP430F169簡(jiǎn)稱主169和從169。

(1)主169讀從169。其中從169發(fā)送的數(shù)據(jù)從0開(kāi)始,依次遞增(所用的時(shí)鐘為默認(rèn)值)。

實(shí)現(xiàn)上述功能代碼如下:

  • /********************main函數(shù)********************/

  • #include "msp430x16x.h"

  • char RXData=0;

  • char TestData=0;

  • void main(void)

  • {

  • WDTCTL = WDTPW + WDTHOLD;

  • P3SEL |= 0X0A; //端口P3作為I2C引腳

  • P1DIR |= 0X01; //P1.0輸出

  • P1OUT &= ~0X01; //清楚P1.0

  • U0CTL |= I2C + SYNC; //推薦的初始化順序

  • U0CTL &= ~I2CEN;

  • I2CTCTL |= I2CSSEL1; //SMCLK

  • I2CNDAT = 0X01; //讀一個(gè)字節(jié)

  • I2CSA = 0X0048; //從地址048h

  • I2CIE = RXRDYIE; //使能RXRDYIFG中斷

  • U0CTL |= I2CEN; //使能I2C

  • _EINT(); //使能總中斷

  • while(1)

  • {

  • U0CTL |= MST; //主模式

  • I2CTCTL |= I2CSTT + I2CSTP; //初始化傳輸

  • _BIS_SR(CPUOff); //進(jìn)入LPM0

  • P1OUT |= 0X01; //置位P1.0

  • if (TestData++ != RXData) break; //測(cè)試接收的數(shù)據(jù)

  • P1OUT &= ~0X01; //數(shù)據(jù)正確清除P1.0

  • }

  • while(1); //接收數(shù)據(jù)不正確

  • }


  • /********************I2C模塊中斷處理子程序********************/

  • #pragma vector = USART0TX_VECTOR

  • __interrupt void I2C_ISR(void)

  • {

  • switch(I2CIV)

  • {

  • case 0: break; //沒(méi)有中斷

  • case 2: break; //仲裁失效

  • case 4: break; //沒(méi)有響應(yīng)

  • case 6: break; //本地地址

  • case 8: break; //寄存器訪問(wèn)準(zhǔn)備好

  • case 10: //接收準(zhǔn)備好

  • RXData = I2CDRB; //接收數(shù)據(jù)

  • _BIC_SR_IRQ(CPUOff); //退出 LPM0

  • break;

  • case 12: break; //發(fā)送準(zhǔn)備好

  • case 14: break; //群呼

  • case 16: break; //起始檢測(cè)

  • }

  • }

接收數(shù)據(jù)正確則P1.0由1變?yōu)?,否則P1.0一直保持置位??衫肞1.0外接示波器來(lái)觀察結(jié)果。

(2)從169讀主169(要求同上)

實(shí)現(xiàn)此功能的代碼如下:

  • /********************main函數(shù)********************/

  • #include "msp430x16x.h"

  • char TXData=0;

  • void main(void)

  • {

  • WDTCTL = WDTPW + WDTHOLD;

  • P3SEL |= 0X0A;

  • U0CTL |= I2C + SYNC;

  • U0CTL &= ~I2CEN;

  • I2CTCTL |= I2CSSEL1;

  • I2COA = 0X0048;

  • I2CIE = TXRDYIE; //使能TXRDYIE中斷

  • U0CTL |= I2CEN;

  • _BIS_SR(LMP0_bits + GIE);

  • }


  • /********************I2C模塊中斷處理子程序********************/

  • #pragma vector = USART0TX_VECTOR

  • __interrupt void I2C_ISR(void)

  • {

  • switch(I2CIV)

  • {

  • case 2: break;

  • case 4: break;

[1] [2]
關(guān)鍵字:MSP430  單片機(jī)系列 引用地址:MSP430單片機(jī)系列通用串行模塊的I2C模式

上一篇:MSP430系列通用串行通信模塊的異步模式(USART)
下一篇:MSP430單片機(jī)中斷的的優(yōu)先級(jí)順序定義

推薦閱讀

讓延續(xù)了幾十年的傳統(tǒng)口腔正畸從“試錯(cuò)”的經(jīng)驗(yàn)?zāi)J阶呦蚓珳?zhǔn)診療。2月5日,中國(guó)科學(xué)院深圳先進(jìn)技術(shù)研究院研究員、八零后博士生導(dǎo)師夏澤洋向記者帶他的博士團(tuán)隊(duì)展示了他的研究團(tuán)隊(duì)的精準(zhǔn)口腔正畸診療機(jī)器人研究成果。正畸不再需要咬牙印做牙模,不再用兩三年時(shí)間不停地到醫(yī)院復(fù)診調(diào)整矯治器。夏澤洋介紹,口腔錯(cuò)頜畸形是危害人類健康的第三大口腔疾病,它不...
在2004年由威爾·史密斯主演的科幻大片《我,機(jī)器人》中,片中的機(jī)器人公司亮出了一句響亮的廣告詞——“2035年,這是個(gè)機(jī)器的時(shí)代。”而現(xiàn)實(shí)生活中,機(jī)器手雖然在自動(dòng)生產(chǎn)線等領(lǐng)域有越來(lái)越廣泛的應(yīng)用,但它依然是冷冰冰工具的形象,具有高度智慧的機(jī)器人離普通人的生活依舊遙遠(yuǎn)。不過(guò),隨著近兩年人工智能迎來(lái)了一段爆發(fā)性成長(zhǎng)之后,機(jī)器具備了更精準(zhǔn)地獲...
第七篇:占先式內(nèi)核(只帶延時(shí)服務(wù))當(dāng)大家理解時(shí)間片輪番調(diào)度法的任務(wù)調(diào)度方式后,占先式的內(nèi)核的原理,已經(jīng)伸手可及了。先想想,占先式內(nèi)核是在什么地方實(shí)現(xiàn)任務(wù)調(diào)度的呢?對(duì)了,它在可以在任務(wù)中進(jìn)行調(diào)度,這個(gè)在協(xié)作式的內(nèi)核中已經(jīng)做到了;同時(shí),它也可以在中斷結(jié)束后進(jìn)行調(diào)度,這個(gè)問(wèn)題,已經(jīng)在時(shí)間片輪番調(diào)度法中已經(jīng)做到了。由于中斷是可以嵌套的,只...
上期大概給大家匯總介紹了,在MSP430環(huán)境下的時(shí)鐘寄存器BCSCTL2,他每個(gè)位的意義以及他們的設(shè)置方法本期將重點(diǎn)介紹下,定時(shí)器模塊,這次先講下看門(mén)狗定時(shí)器和他的寄存器,設(shè)置等1.0 定義1.1 定時(shí)器:MSP430的定時(shí)器大概有4種,看門(mén)狗定時(shí)器,基本定時(shí)器,定時(shí)器A,定時(shí)器B,1.2 基本定時(shí)器功能:基本定時(shí),支持軟件和各種外圍模塊工作在低頻率,低功耗條...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved