---
# System prepended metadata

title: PIC24FJ128GA106_I2C
tags: [I2C, PIC24FJ128GA106]

---

# PIC24FJ128GA106_I2C
[PIC24FJ128GA106 datasheet](https://ww1.microchip.com/downloads/en/DeviceDoc/PIC24FJ256GA110-Family-Data-Sheet-DS30009905F.pdf)
###### tags:`PIC24FJ128GA106` `I2C`
<style> .red {color:red;} </style> 
## IC封裝與腳位
![](https://i.imgur.com/2hcaH8x.jpg)


## 寫入控制暫存器
## ==I2CxCON==
![](https://i.imgur.com/WynZcyu.jpg)
### <span class ="red">I2CEN</span>:I^2^C 智能位
##### ==可讀可寫==
1 =智能I^2^Cx模塊並將SDAx和SCLx引腳配置為串行端口引腳
0 =禁用I^2^Cx模塊； 所有I2C引腳均由端口功能控制

### <span class ="red">I2SIDL</span>:在空閒模式下停止位
##### ==可讀可寫==
1 =當設備進入空閒模式時停止模塊運行
0 =在空閒模式下繼續模塊運行

### <span class ="red">SCLREL</span>:SCLx釋放控制位（slave用）
##### ==可讀可寫==
與STREN位一起使用
1 =釋放SCLx clock
0 =使SCLx clock保持低電平（clock延長）

如果STREN = 1：該位為R / W（即軟件可以寫＂0＂來延長clock，寫＂1＂來釋放clock）； slave發送開始時硬件清除，slave接收結束時硬件清除

如果STREN = 0：該位為R / S（即，軟件只能寫入"1"來釋放clock）；否則，slave傳輸開始時硬件清除

### <span class ="red">IPMIEN</span>:智能外圍設備管理接口（IPMI）啟用位
##### ==可讀可寫==
1 =啟用IPMI支持模式； 確認所有地址
0 =禁用IPMI模式

### <span class ="red">A10M</span>:10位從機尋址位
##### ==可讀可寫==
1 = I2CxADD是10位slave地址
0 = I2CxADD是7位slave地址

### <span class ="red">DISSLW</span>:禁用slaw rate控制位
##### ==可讀可寫==
1 =禁止slew rate控制
0 =智能slew rate控制

### <span class ="red">SMEN</span>:SMBus輸入電平位
##### ==可讀可寫==
1 =啟用符合SMBus規範的I / O引腳閾值
0 =禁用SMBus輸入閾值

### <span class ="red">GCEN</span>:通用呼叫智能位（slave用）
##### ==可讀可寫==
1 =當在I2CxRSR中接收到通用呼叫地址時（智能接收模塊），智能中斷
0 =禁用通用呼叫地址

### <span class ="red">STREN</span>:SCLx clock擴展智能位（slave用）
##### ==可讀可寫==
與SCLREL位一起使用。
1 =啟用軟件或接收clock延長
0 =禁用軟件或接收clock延長
   
### <span class ="red">ACKDT</span>:確認數據位（master接收期間用）
##### ==可讀可寫==
當軟件啟動確認序列時將發送的值
1 =在確認期間發送NACK 
0 =在確認期間發送ACK 

### <span class ="red">ACKEN</span>:應答序列智能位（master接收期間用）
##### ==可讀可寫==
1 =在SDAx和SCLx引腳上啟動應答序列，並發送ACKDT數據位； 主設備確認序列末尾的硬件清除
0 =確認序列未在進行中

### <span class ="red">RCEN</span>:接收智能位（master用）
##### ==可讀可寫==
1 =智能I2C的接收模式； 主設備第八位末尾的硬件清零接收數據字節
0 =接收序列未在進行中

### <span class ="red">PEN</span>:停止條件智能位（master用）
##### ==可讀可寫==
1 =在SDAx和SCLx引腳上啟動停止條件； 在主站結束時清除硬件停止順序
0 =停止條件未在進行中

### <span class ="red">RSEN</span>:重複啟動條件使能位（master用）
##### ==可讀可寫==
1 =在SDAx和SCLx引腳上啟動重複啟動條件；在master結束時清除硬件重複啟動序列
0 =重複啟動條件未在進行中

### <span class ="red">SEN</span>:啟動條件使能位（master用）
##### ==可讀可寫==
1 =在SDAx和SCLx引腳上啟動啟動條件； 在master結束時清除硬件啟動順序
0 =起始條件未在進行中

## ==I2CxSTAT==
![](https://i.imgur.com/UMlQIxe.jpg)
### <span class ="red">ACKSTAT</span>:確認狀態位
##### ==唯讀==
1 =最後檢測到NACK 
0 =最後檢測到ACK
硬體設置或在確認結束時清除。

### <span class ="red">TRSTAT</span>:：發送狀態位（master接收期間用）
##### ==唯讀==
1 =master正在進行發送（8位+ ACK）
0 =master未在進行發送
在master發送開始時設置了硬體。slave應答結束時清除

### <span class ="red">BCL</span>:BUS衝突檢測位
##### ==唯讀==
1 =在master操作期間檢測到bus衝突
0 =無衝突
檢測bus衝突時設置的硬件。

### <span class ="red">GCSTAT</span>:通用呼叫狀態位
##### ==唯讀==
1 =接收到通用呼叫地址
0 =未接收到通用呼叫地址
當地址與通用呼叫地址匹配時進行硬件設置。 停止檢測時清除硬件

### <span class ="red">ADD10</span>:10位地址狀態位
##### ==唯讀==
1 =匹配10位地址
0 =不匹配10位地址
硬件在匹配的10位地址的第二個字節匹配時設置。 停止檢測時清除硬件。

### <span class ="red">IWCOL</span>:寫衝突檢測位
##### ==唯讀==
1 =嘗試寫I2CxTRN寄存器失敗，因為I2C模塊忙
0 =無衝突
忙時對I2CxTRN進行寫操作時硬件置1（由軟件清除）。

### <span class ="red">I2COV</span>:接收溢出標誌位
##### ==唯讀==
1 =當I2CxRCV寄存器仍保留前一個字節時接收到一個字節
0 =無溢出
嘗試將I2CxRSR傳輸到I2CxRCV時由硬件置1（由軟件清零）。

### <span class ="red">$D /\bar A$</span>:數據/$\bar {地址}$位（slave用）
##### ==唯讀==
1 =表示接收到的最後一個字節是數據
0 =表示接收到的最後一個字節是設備地址
硬件在設備地址匹配時清零。 傳輸完成後或通過接收從機字節來設置硬件。

### <span class ="red">P</span>:停止位
##### ==唯讀==
1 =指示最後一次檢測到停止位
0 =上次未檢測到停止位
當檢測到啟動，重複啟動或停止時，硬件置1或清零。

### <span class ="red">S</span>:起始位
##### ==唯讀==
1 =表示最後檢測到起始（或重複起始）位
0 =上次未檢測到起始位
當檢測到起始，重複起始或停止時，硬件置1或清零。

### <span class ="red">$R /\bar W$</span>:讀/$\bar 寫$信息位（slave用）
##### ==唯讀==
1 =讀取,表示從slave輸出數據傳輸
0 =寫,指示將數據傳輸輸入到slave
硬件在接收I2C設備地址字節後置1或清零。

### <span class ="red">RBF</span>:接收緩衝區已滿狀態位
##### ==唯讀==
1 =接收完成，I2CxRCV已滿
0 =接收未完成，I2CxRCV為空
當用接收到的字節寫入I2CxRCV時，硬件置1。 當軟件讀取I2CxRCV時硬件清零

### <span class ="red">TBF</span>:發送緩衝區已滿狀態位
##### ==唯讀==
1 =正在發送，I2CxTRN已滿
0 =發送完成，I2CxTRN為空
當軟件寫入I2CxTRN時，硬件置1。 完成數據傳輸後清除硬件。

## ==I2CxMSK==
![](https://i.imgur.com/hYi55tb.jpg)
### <span class ="red">AMSK [9：0]</span>:x的地址屏蔽位選擇位
##### ==可讀可寫==
1 =使能傳入消息x的地址的屏蔽位； 該位置不需要位匹配
0 =禁用屏蔽； 此位置需要位匹配

## ==IFSx==
![](https://i.imgur.com/ZzcWh6m.jpg)
### <span class ="red">MI2C1IF</span>:I2Cx master事件中斷標誌狀態位
##### ==可讀可寫==
1 =發生中斷請求
0 =未發生中斷請求

### <span class ="red">SI2C1IF</span>:I2Cx slave事件中斷標誌狀態位
##### ==可讀可寫==
1 =發生中斷請求
0 =未發生中斷請求

## ==IECx==
![](https://i.imgur.com/FSyVxEd.jpg)
### <span class ="red">MI2C1IE</span>:主 I2Cx事件中斷使能位
##### ==可讀可寫==
1 =使能中斷請求
0 =未使能中斷請求位

### <span class ="red">SI2C1IE</span>:從 I2Cx事件中斷使能位
##### ==可讀可寫==
1 =使能中斷請求
0 =未使能中斷

<!--
## 使用方式
### 接線方式
畫張圖拉

### 要來寫程式了喔
DATASHEET裡的波型圖

### 程式說明
```c=
用這個啦
```
## 注意~~
-->


