当前位置:首页 >> 信息与通信 >>

HT56R678使用IIC进行资料传输


HT56R678 使用 I2C 進?資?傳輸的方法

HT56R678 使用 I2C 進?資?傳輸的方法
文件編碼:HA0181T

簡介
HT56R678 內建有 SIM 功能,其中包括? SPI 和 I2C ?種通信介面,本文以 HT56R678 為母 體,介紹使用 I2C 進?資?傳輸的方法和注意事項。

/>
I2C 介面
I C 總線是用?和外部設備如感測器、EEPROM 等進?通信的,I C 總線最初是由飛?浦半 導體公司開發的雙向?線通信介面,只通過 2 個引腳?實現資?的發送和接收,將 I2C 總線 集成到微控制器內,可為 MCU 擴展?多新的應用機會。 I C 總線介面有?個接口,一個是??資?線 SDA,一個是??時鐘線 SCL,可同時將多個 設備並接在總線上,由於 SDA 和 SCL 都是開?輸出,因此需要外接提升電阻。I2C 總線? 存在片選線,總線上的每個設備都擁有一個唯一的地址編號,主機和從幾都通過?別地址 碼完成資?的發送和接收,主機具有總線控制權,對於在從機模式下運?的元件,I2C 總線 有?種資?傳輸方式,從元件發送模式和從元件接收模式。I2C 模組功能示意圖如下:
D a ta B u s I2C D a ta R e g is te r (S IM D R ) S la v e A d d r e s s R e g is te r (S IM A R ) A d d re s s C o m p a ra to r A d d re s s M a tc h H A A S B it
2 2 2

H T X B it
S C L P in S D A P in M U X

D ir e c tio n C o n tr o l
S h ift R e g is te r

I2C

In te rru p t

D a ta in L S B D a ta O u t M S B

R e a d /w r ite S la v e

S R W

B it

E n a b le /D is a b le A c k n o w le d g e T r a n s m it/R e c e iv e C o n tr o l U n it
2

8 - b it D a ta C o m p le te D e te c t S ta rt o r S to p

H C F B it H B B B it

I C Block Diagram 1

HT56R678 使用 I2C 進?資?傳輸的方法

工作原?
開啓 I2C 功能需要首先在配置選項裏選擇 SIM Function 為 Enable,然後設定好 SIMCTL0 和 SIMCTL1 這?個暫存器裏相應的位元即可。 HT56R678 中與 I2C 功能相關的有 4 個暫存器:SIMCTL0、SIMCTL1、SIMAR 和 SIMDR。 SIMDR 暫存器用?記憶馬上要傳輸或者剛接收到的資?。它是和 SPI 共用的,在 HT56R678 中,SPI 與 I2C ?能同時運作。 發送資?時只需要將資?寫入 SIMDR 即可。

SIMDR 暫存器 SIMAR 暫存器用於記憶從機的 7 位元地址碼。主機通過 I2C 總線發送資?時,將首先發出 地址碼,如果該地址碼和記憶在 SIMAR 暫存器的地址碼匹配,則表明該從機設備被選中, 可以和主機通信。
b 7 S A 6 b 0 S A 5 S A 4 S A 3 S A 2 S A 1 S A 0 S IM A R R e g is te r N o t im p le m e n te d , r e a d a s " 0 " I2 C d e v ic e s la v e a d d r e s s

I C Slave Address Register -- SIMAR SIMCTL0 暫存器也是 SPI 和 I C 共用的,用?打開或者關閉??總線功能,設定 SIM 模式。
b 7 S IM 2 b 0 S IM 1 S IM 0 P C K E N P C K P S C 1 P C K P S C 0 S IM E N S IM C T L 0 R e g is te r N o t im p le m e n t e d , r e a d a s '0 " S P I/I2C O n /O f c o n tro l 1 : e n a b le 0 : d is a b le P e r ip h e r a l C lo c k C o n tr o l - d e s c r ib e d e ls e w h e r e S P I/I2 C M a s te r /S la S IM 2 S IM 1 S 0 0 0 0 1 0 1 0 0 1 0 1 1 1 1 1 v e a n d C lo c k IM 0 0 m a s te r, 1 m a s te r, 0 m a s te r, 1 m a s te r, 0 m a s te r, 1 S la v e I2C m o d 0 N o t u s e 1 C o n tro l fS fS fS fS e d
Y S Y S Y S U B

2

2

/4

/1 6 /6 4

T im e r /E v e n t C o u n te r 0 o u tp u t/2

SPI/I C Control Register -- SIMCTL0 2

2

HT56R678 使用 I2C 進?資?傳輸的方法
SIMEN 位元控制 I2C 的開與關,SIMEN 位元清除為?0?時,I2C 功能關閉。I2C 模組幾乎?耗 電,SIMEN 位元為?1?時,SIM 功能打開。當然需要先在配置選項中打開 SIM 功能 SIMEN 位元的設定才有效。每當 SIMEN 位從?0?變為?1?時,應用程式須重新初始化 I2C 的相關暫 存器。 SIM0~SIM2 位元用於設定 SIM 功能的操作模式和 SPI 的時鐘:

SIMCTL1 暫存器是一個 I2C 專用的暫存器,各位元的功能如下:
b 7 H C F b 0 H A A S H B B H T X T X A K S R W R X A K S IM C T L 1 R e g is te r R e c e iv e a c k n o w le d g e fla g 1 : n o t a c k n o w le d g e d 0 : a c k n o w le d g e d N o t im p le m e n te d , r e a d a s " 0 " M a s te r d a ta r e a d /w r ite r e q u e s t fla g 1 : re q u e s t d a ta re a d 0 : r e q u e s t d a ta w r ite T r a n s m it a c k n o w le d g e fla g 1 : d o n 't a c k n o w le d g e 0 : a c k n o w le d g e T r a n s m it/R e c e iv e m o d e 1 : tr a n s m it m o d e 0 : r e c e iv e m o d e I2 C b u s b u s y fla g 1 : b u s y 0 : n o t b u s y C a llin g a d d r e s s m a tc h e d fla g 1 : m a tc h e d 0 : n o t m a tc h e d D a ta tr a n s fe r fla g 1 : tr a n s fe r c o m p le te 0 : tr a n s fe r n o t c o m p le te

I C Control Register – SIMCTL1

2

3

HT56R678 使用 I2C 進?資?傳輸的方法
? RXAK
RXAK 是一個接收到 ACK 的旗標。當 RXAK 旗標重置到?0?,表示 8 位元的資?傳輸之 後,在第 9 個時鐘收到?正確的 ACK 信號。在傳送模式,傳輸者會檢查 RXAK 位元?判 斷接收者是否想繼續接收下一個位元組,傳輸者會因此繼續發送資?直到 RXAK 被設定 為高位元。RXAK 被設定為高位元後,傳送者會釋放 SDA 線?允許主機發送 STOP 信號 ?釋放總線。 SRW SRW 是一個從機的?取/寫入模式位元。這一位元決定?主機是希望發送或者接收資?。 當主機傳送的地址和從機匹配後,HAAS 位將被設定為高,設備將會檢查 SRW 位元?決 定是應該進入傳送模式或者是接收模式。如果 SRW 為高位元,主機會請求從總線上?取 資?,此時設備應該為傳送模式。反之,主機會寫入資?到總線上,從機要進入接收模 式以?從總線上接收資?。 TXAK TXAK 是傳送 ACK 旗標,當收到 8 位元的資?後,這一位元在第 9 個時鐘被發送到總線 上。在接收到足夠的資?之前,這一位為?0?。 HTX HTX 是從機的?取/寫入模式標準位元。這一位元被設為高位元為傳送模式,設為低位元 為接收模式。 HBB HBB 是 I2C 總線繁忙旗標。偵測到開始信號後,總線繁忙時這一位會被設為高位元。偵 測到停止信號,總線空閒時,這一位會變為低位元。 HAAS HAAS 是一個地址匹配旗標。這個標準位元由從機設備的地址是否同主機發送的地址相 同決定。如果地址匹配,這一位會被設為高位元,反之,為低位元。 HCF HCF 是一個資?傳送旗標。當資?正被傳送時,被設為?0?。當傳送完成後,這一位元會 變為高位元,同時將產生一個中斷。

?

?

?

?

?

?

I C 總線通信
I2C 總線通信包含四個部分:起始信號、從元件地址發送、資?發送和停止信號。當起始信 號寫入 I2C 總線時,所有的總線上的從設備都會接收信號並進入接收資?模式。資?的前 7 位元是從設備地址,高位元在前,低位元在後。如果從設備地址匹配,系統會設定 HAAS, 同時產生 I2C 總線中斷。進入中斷服務程式後,系統要檢測 HAAS 位元,以確定 I2C 總線 中斷是?自從設備地址匹配,還是?自 8 位元資?傳送完畢。資?的第 8 位元,是?取/寫 入控制位元,該位元的值會反映到 SRW。從設備通過檢測 SRW 以確定主控制器是要進入 發送模式還是接收模式。

2

4

HT56R678 使用 I2C 進?資?傳輸的方法
I2C 的時序圖如下圖所示:
S C L S ta rt S la v e A d d r e s s S R W A C K

S D A

1

0

1 1

0

1

0

1

0

S C L

D a ta

A C K

S to p

1 S D A S = S S A = S R = M = S D = D A = A P = S S ta rt (1 S la v e S R W la v e d a ta (8 C K (R to p (1 S A

0

0

1

0

1

0

0

b it) A d d r e s s ( 7 b its ) b it ( 1 b it) e v ic e s e n d a c k n o w le d g e b it ( 1 b it) b its ) X A K b it fo r tr a n s m itte r , T X A K b it fo r r e c e iv e r 1 b it) b it) S R M D A D A S S A S R M D A D A P

I2C Communication Timing Diagram

起始信號
起始信號只能由 I2C 總線主控制器產生,總線上的所有從設備必須偵測起始信號,當檢測到 後,表明 I2C 總線處於忙??態,因此會設定 HBB。起始信號是指在 SCL 為高位元時,SDA 發生準位從高到低的變化。

從元件地址
總線上的所有從設備都會偵測由主機發起的起始信號。發送起始信號後,主控制器須發送 從元件地址以選擇要進?資?傳輸的從設備 所有在 I2C 總線上的從設備都會接收到這個從 。 設備地址(7 位元),並與各自內部的從設備地址進?比較。如果地址匹配,該從設備會產生 一個中斷,並將接下?的一位元資? (即第 8 位元) 保存到 SRW 位元,並發出一個應答信 號,即第 9 位元的低準位信號。當從設備地址匹配時,還會設定位元?態旗標 (HAAS)。 由於 I2C 總線有?個中斷源,在中斷服務副程式中,通過檢測 HAAS 位元可以確定 I2C 總線 中斷是?自從設備地址匹配還是?自 8 位元資?傳送完畢。當是從設備地址匹配發生中斷 時,則從設備必定是用於發送模式或接收模式,所以須寫入資?到 SIMDR 或從 SIMDR 虛 擬?取資?以釋放 SCL。

5

HT56R678 使用 I2C 進?資?傳輸的方法

SRW 位元
SIMCTL1 暫存器的 SRW 位元表示主控制器是要從 I2C 總線上?取資?還是要將資?寫到 I2C 總線上。從設備則通過檢測該位元以確定自己是作為發送器還是接收器。SRW 位元設定為 ?1?,表示主控制器要從 I2C 總線?取資?,從設備須將資?寫入到 I2C 總線,即從設備做為 發送器;SRW 清除為?0?,表示主控制器要寫入資?到 I2C 總線,從設備要從總線?取資?, 即從設備做為接收器。

應答位元
在主控制器發送呼叫地址後,當從設備地址與其匹配時,會發送一個應答信號。應答信號 會通知主控制器從設備已經接收?呼叫地址。如果沒有應答信號,主控制器必須發送停止 (STOP)信號以結束通訊。當 I2C 總線?態暫存器的第 6 位元(HAAS)是高位元時,表示地址 匹配,則從設備需檢查 SRW,以確定自己是作為發送器還是作為接收器。如果 SRW 為高 位元,從設備須設定成發送器,這樣需要設定位元 SIMCTL1 暫存器的 HTX 位元。如果 SRW 為低位元,從設備須設定成接收器,這樣會清除為? SIMCTL1 暫存器的 HTX 位元。

資?位元組
在從設備發出應答信號後,就會進?資?傳輸,一個資?長?為 8 位元,高位元在前,低 位元在後。接收器在接收到資?後會發出一個應答信號(?0?)以繼續接收下一個資?。如果 發送器沒檢測到應答信號,發送器將釋放 SDA 線,同時,主控制器將發出 STOP 信號以釋 放 I2C 總線。如果設定成發送器,從機必須將資?寫到 SIMDR;如果設定成接收器,從機 必須從 SIMDR ?取資?。

接收應答位
當接收器想要繼續接收下一筆資?時,必須在第 9 個時鐘發出應答信號(TXAK)。發送器檢 測應答信號(RXAK)以決定是繼續寫入資?到 I2C 總線,還是改變為接收模式並虛? SIMDR 暫存器以釋放 SDA 線,同時主控制器發出停止信號。

6

HT56R678 使用 I2C 進?資?傳輸的方法

?程圖
在 I2C 總線開始傳送資?前,需要先初始化 I2C 總線,在初始化 I2C 總線時必須注意以下幾 點: 步驟 1 向 I2C 總線地址暫存器 SIMAR 寫入從設備地址。 步驟 2 設定 I2C 總線控制暫存器 SIMCTL0 的 SIMEN 位元,以打開 I2C 總線。 步驟 3
2 2 設定 I C 總線中斷控制暫存器 (INTC1) 的 ESIM 位元,以允許 I C 總線中斷。如果?需要中

斷,可在程式中?斷的檢查 HCF 位元,用?檢測 I2C 是否有資?傳輸完成,建議開啓中斷。 具體過程如下圖所示:
S ta rt

W r ite S la v e A d d re s s to S IM A R

S E T S IM [2 :0 ]= 1 1 0 S E T S IM E N

D is a b le C L R E H I P o ll H IF to d e c id e w h e n to g o to I2C B u s IS R

I2C B u s In te rru p t= ?

E n a b le

S E T E H I W a it fo r In te r r u p t

G o to M a in P r o g r a m

G o to M a in P r o g r a m

I C Bus Initialisation Flow Chart , 。 注意 當 I C 總線中斷被關掉時 必須?斷的去檢查 HCF 位元?確定 I C 有無資?傳輸完成 ,
2 2

2

7

HT56R678 使用 I2C 進?資?傳輸的方法

S ta rt

N o

H A A S = 1 ? Y e s Y e s

Y e s N o

N o

H T X = 1 ?

S R W = 1 ?

R e a d fro m S IM D R

S E T H T X

C L R H T X C L R T X A K

R E T I Y e s R X A K = 1 ? N o C L R H T X C L R T X A K W r ite to S IM D R

W r ite to S IM D R

D u m m y R e a d F ro m S IM D R

R E T I

R E T I

D u m m y R e a d fro m S IM D R

R E T I

R E T I

I2C Bus ISR Flow Chart , , 。 上圖是一個 I C 的中斷服務程式的?程圖 當進入中斷服務程式後 會首先檢查 HAAS 位元 通過檢測 HAAS 位元可以確定 I2C 總線中斷是?自從設備地址匹配,還是?自 8 位元資?傳 送完畢。 如果是地址匹配,檢查 SRW,以確定主機是發送資?還是接收資?。然後寫資?到 SIMDR 或從 SIMDR 虛擬?取資?以釋放 SCL 總線。 如果是 8 位元資?傳送完畢,先判斷從機此時處於接收或者是發送模式(HTX),如果是接收 模式,就要?刻從 SIMDR 中?取資?,如果是發送模式,會繼續檢查 RXAK 位元以決定是 否要繼續發送下一個資?。如果沒檢測到應答信號(RXAK=1),從機要從 SIMDR 虛擬?取資 ?以釋放 SDA 線,同時,主控制器將發出 STOP 信號以釋放 I2C 總線。
2

8

HT56R678 使用 I2C 進?資?傳輸的方法

程式説明
本範?由主程式以及 I2C 的中斷服務程式二部分組成,在主程式中,會對 MCU 進?初始化 操作,主要是對 I2C 的相關暫存器進?初始化操作。 I2C 的中斷服務程式 i2c_sever 中,會將 data1 中的資?發送到 I2C 總線,會將從 I2C 總線上接 收到的資?保存到 data2 中,用戶可以自?修改和進?資?的後續操作。 配置選項中,要使用 I2C 總線,必須打開 SIM Function,其他選項由用戶使用情況決定。

結?
本文講解? HT56R678 的 I2C 相關的操作與注意事項,本範?進? I2C 傳輸正常,用戶可以 直接使用 I C 的中斷服務程式。
2

9


相关文章:
更多相关标签: