Microchip PIC24FJ64GA008 處理器內置兩個 I2C(I2C1 和 I2C2)的模組,I2C(I²C,Inter-Integrated Circuit)模組是一種串列通訊匯流排,PIC24FJ64GA008 I2C 模組具有 7 個可由用戶訪問的寄存器用於操作。所有寄存器均可通過位元組或字模式訪問。
Microchip PIC24FJ64GA008 I2C 模組的框圖 |
- I2CxCON:I2Cx 控制寄存器(Control Register):該寄存器用於控制模組的操作。
- I2CXSTAT:I2CX 狀態寄存器(Status Register):該寄存器包含狀態標誌,指示模組在操作期間的狀態。
- I2CxMSK:I2Cx 位址遮罩寄存器(Slave Mode Address Mask Register):該寄存器指定I2CxADD 中的哪些位可以忽略,從而提供了多地址支援。
- I2CxRCV 接收緩衝寄存器(Receive Buffer Register):這是可從中讀取資料位元組的緩衝寄存器。I2CxRCV 寄存器是唯讀寄存器。I2CxTRN 寄存器是讀/ 寫寄存器。
- I2CxTRN 發送寄存器(Transmit Register):這是發送寄存器,在發送操作期間位元組寫入該寄存器。
- I2CxADD 位址寄存器(Address Register):該寄存器且來裝從器件位址。
- I2CxBRG 串列傳輸速率發生器重載寄存器(Baud Rate Generator Reload Register):用來裝I2C 模組串列傳輸速率發生器的串列傳輸速率發生器重載值。
PIC24FJ64GA008 I2CxCON:I2Cx 控制寄存器 |
PIC24FJ64GA008
I2CxCON:I2Cx
控制寄存器:
bit
|
Description
|
bit 15
|
I2CEN:I2Cx 使能位
1 = 使能 I2Cx 模組並將 SDAx 和 SCLx 引腳配置為序列埠引腳
0 = 禁止 I2Cx 模組。所有 I2C 引腳都由埠功能控制。
|
bit 14
|
未實現:讀為0
|
bit 13
|
I2CSIDL:在空閒模式停止位元
1 = 當器件進入空閒模式後,模組停止工作
1 = 在空閒模式下模組繼續工作
|
bit 12
|
SCLREL:SCLx 釋放控制位(作為 I2C 從器件工作時)
1 = 釋放 SCLx 時鐘
0 = 保持 SCLx 時鐘為低電平(時鐘延長)
如果 STREN = 1:
該位元為 R/W (即可由軟體寫入 0 啟動時鐘延長,寫入1 釋放時鐘)。
在從器件開始發送時由硬體清零。
在從器件接收結束時由硬體清零。
如果 STREN = 0:
該位元為 R/S (即只能由軟體寫入1 釋放時鐘)。
在從器件開始發送時由硬體清零。
|
bit 11
|
IPMIEN:IPMI 使能位
1 = 使能 IPMI 支援模式;對所有地址做出應答
0 = 禁止 IPMI 模式
|
bit 10
|
A10M:10 位從器件地址位
1 = I2CxADD 是一個 10 位從器件位址
1 = I2CxADD 是一個 7 位從器件位址
|
bit 9
|
DISSLW:變化率控制禁止位
1 = 禁止變化率控制
0 = 使能變化率控制
|
bit 8
|
SMEN:SMBus 輸入電平位
1 = 使能符合 SMBus 規範的 I/O
引腳門限值
0 = 禁止 SMBus 輸入門限
|
bit 7
|
GCEN:廣播呼叫使能位(當作為 I2C 從器件工作時)
1 = 允許在 I2CxRSR 接收到廣播呼叫位址時產生中斷
(已使能模組接收模式)
0 = 禁止廣播呼叫地址
|
bit 6
|
STREN:SCLx 時鐘延長使能位元(當作為 I2C 從器件工作時)
與 SCLREL 位一起使用。
1 = 使能軟體或接收時鐘延長
1 = 禁止軟體或接收時鐘延長
|
bit 5
|
ACKDT:應答資料位元(當作為 I2C 主器件工作時。適用於主器件接收操作。)
當軟體啟動應答序列時將發送的值。
1 = 在應答時發送 NACK
0 = 在應答時發送 ACK
|
bit 4
|
ACKEN:應答序列使能位
(當作為 I2C
主器件工作時。適用於主器件接收操作。)
1 = 在 SDAx 和 SCLx 引腳啟動應答序列,並發送 ACKDT 資料位元。
在主器件應答序列結束時由硬體清零。
0 = 沒有啟動應答序列
|
bit 3
|
RCEN:接收使能位(當作為 I2C 主器件工作時)
1 = 使能 I2C 接收模式
在主器件接收到資料位元組的 8 位元後由硬體清零。
0 = 沒有啟動接收序列
|
bit 2
|
PEN:停止條件使能位(當作為 I2C 主器件工作時)
1 = 在 SDAx 和 SCLx 引腳上產生停止條件
在主器件停止序列結束時由硬體清零。
0 = 沒有啟動停止條件
|
bit 1
|
RSEN:重複啟動條件使能位(當作為 I2C 主器件工作時)
1 = 在 SDAx 和 SCLx 引腳產生重複啟動條件
在主器件重複啟動序列結束時由硬體清零。
0 = 沒有發起重複啟動條件
|
bit 0
|
SEN:啟動條件使能位(當作為 I2C 主器件工作時)
1 = 在 SDAx 和 SCLx 引腳上產生啟動條件
在主器件啟動序列結束時由硬體清零。
0 = 沒有發起啟動條件
|
PIC24FJ64GA008 I2CXSTAT:I2CX 狀態寄存器 |
PIC24FJ64GA008
I2CXSTAT:I2CX 狀態寄存器:
bit
|
Description
|
bit 15
|
ACKSTAT:應答狀態位元
1 = 接收到來自從器件的 NACK
0 = 接收到來自從器件的 ACK
在從器件應答結束時由硬體置 1 或清零。
|
bit 14
|
TRSTAT:發送狀態位元
(當作為 I2C
主器件工作時。適用於主器件發送操作。)
1 = 主器件正在進行發送(8 位 + ACK)
0 = 主器件未進行發送
在主器件發送開始時由硬體置 1。
在從器件應答結束時由硬體清零。
|
bit 13 ~ 11
|
未實現:讀為 0
|
bit 10
|
BCL:主器件匯流排衝突檢測位元
1 = 在主器件工作期間檢測到了匯流排衝突
0 = 未發生衝突
在檢測到匯流排衝突時由硬體置 1。
|
bit 9
|
GCSTAT:廣播呼叫狀態位元
1 = 接收到了廣播呼叫位址
0 = 未接收到廣播呼叫位址
當位址與廣播呼叫位址匹配時由硬體置 1。
在檢測到停止條件時由硬體清零。
|
bit 8
|
ADD10:10 位元位址狀態位元
1 = 10 位地址匹配
0 = 10 位地址不匹配
當與 10 位元位址的第二個位元組匹配時由硬體置 1。
在檢測到停止條件時由硬體清零。
|
bit 7
|
IWCOL:寫衝突檢測位
1 = 由於 I2C 匯流排忙,嘗試寫 I2CxTRN
寄存器的操作失敗
0 = 未發生衝突
當在匯流排忙的情況下寫 I2CxTRN 時由硬體置 1 (由軟體清零)。
|
bit 6
|
I2COV:接收溢出標誌位元
1 = 當 I2CxRCV 寄存器仍然保存原先的位元組時又接收了新位元組
0 = 未發生溢出
嘗試將資料從 I2CxRSR
傳輸到 I2CxRCV
時由硬體置 1 (由軟體清零)。
|
bit 5
|
D/A:資料/ 位址位元(當作為 I2C 從器件工作時)
1 = 表示上次接收的位元組是資料
0 = 表示上次接收的位元組是器件位址
器件位址匹配時由硬體清零。
通過寫 I2CxTRN
或接收從器件位元組由硬體置 1。
|
bit 4
|
P:停止位
1 = 上一次檢測到了停止位
0 = 上一次沒有檢測到停止位
當檢測到啟動、重複啟動或停止條件時由硬體置 1 或清零。
|
bit 3
|
S:啟動位
1 = 上一次檢測到了啟動(或重複啟動)位
0 = 上一次未檢測到啟動位
當檢測到啟動、重複啟動或停止條件時由硬體置 1 或清零。
|
bit 2
|
R/W:讀/ 寫資訊位元(當作為 I2C 從器件工作時)
1 = 讀——表示從器件輸出資料
0 = 寫——表示從器件接收資料
當接收到 I2C
器件位址位元組後由硬體置1 或清零。
|
bit 1
|
RBF:接收緩衝器滿狀態位元
1 = 接收完成, I2CxRCV 滿
0 = 接收沒有完成, I2CxRCV 空
當接收到的位元組寫入 I2CxRCV
後由硬體置1。
當軟體讀 I2CxRCV
時由硬體清零。
|
bit 0
|
TBF:發送緩衝器滿狀態位元
1 = 正在發送, I2CxTRN 滿
0 = 發送完成, I2CxTRN 空
當軟體寫 I2CxTRN
時由硬體置 1。
當資料發送完成時由硬體清零。
|
PIC24FJ64GA008 I2CxMSK:I2Cx 從動模式位址遮罩寄存器 |
PIC24FJ64GA008
I2CxMSK:I2Cx
從動模式位址遮罩寄存器:
bit
|
Description
|
bit 15 ~ 10
|
未實現:讀為 0
|
bit 9 ~ 0
|
AMSKx:位址位 x 遮罩選擇位
對於 10 位地址:
1 = 對進入報文的地址位 Ax 使能遮罩;在該位置不要求位匹配
0 = 禁止對Ax 位的遮罩;在該位置要求位匹配
對於 7 位地址(僅 I2CxMSK<6:0>6:0>):
1 = 對進入報文的地址位 Ax + 1 使能遮罩;在該位置不要求位匹配
0 = 禁止對 Ax + 1 位的遮罩;在該位置要求位匹配
|
PIC24F I2C 模組相關的寄存器 |
沒有留言:
張貼留言