I2C マスターモード アイドル チェック方法(PIC16F1939)

レジスタSSPCON2のACKEN(bit4),RCEN(bit3),PEN(bit2),RSEN(bit1),SEN(bit0)が全て0であり かつ

レジスタSSPSTATのR/W(bit2),BF(bit0)が全て0の時 アイドル状態である。

<SSPCON2レジスタ>

bit 4 ACKEN: 肯定応答(ACK) シーケンス イネーブルビット(I2C マスタ受信モードのみ)

 1 = SDAピンとSCL ピンで肯定応答(ACK) シーケンスを開始し、ACKDT データビットを送信する。

ハードウェアによって自動的にクリアされる

 0 = 肯定応答(ACK) シーケンスをアイドル状態にする

bit 3 RCEN: 受信イネーブルビット(I2C マスタモードのみ)

 1 = I2C の受信モードを有効にする

 0 = 受信をアイドル状態にする

bit 2 PEN: ストップ条件イネーブルビット(I2C マスタモードのみ)

 1 = SDA ピンとSCL ピンでストップ条件を開始する。ハードウェアによって自動的にクリアされる

 0 = ストップ条件をアイドル状態にする

bit 1 RSEN: 反復スタート条件イネーブルビット(I2C マスタモードのみ)

 1 = SDAピンとSCL ピンで反復スタート条件を開始する。ハードウェアによって自動的にクリアされる

 0 = 反復スタート条件をアイドル状態にする

bit 0 SEN: スタート条件イネーブルビット

 マスタモード:

  1 = SDA ピンとSCL ピンでスタート条件を開始する。ハードウェアによって自動的にクリアされる

  0 = スタート条件をアイドル状態にする

 スレーブモード:

  1 = スレーブ送信とスレーブ受信の両方でクロック ストレッチを有効にする( ストレッチ イネーブル)

  0 = クロック ストレッチを無効にする

<SSPSTATレジスタ>

bit 2 R/W: Read/Write ビット情報(I2C モードのみ)

 I2 C スレーブモード:

  1 = 読み出し

  0 = 書き込み

 I2 C マスタモード:

  1 = 送信動作中である

  0 = 送信動作中ではない

このビットとSEN、RSEN、PEN、RCEN、ACKEN のいずれかをOR 演算すると、MSSP がアイドルモードであるかどうか分かります。

bit 0 BF: バッファフル ステータスビット

 受信(I2 C モード):

  1 = 受信が完了し、SSPBUF はフルである

  0 = 受信は未完了で、SSPBUF は空である

 送信(I2 C モード):

  1 = データ送信中(ACK およびストップビットを含まない) であり、SSPBUF はフルである

  0 = データ送信が完了(ACK およびストップビットを含まない) し、SSPBUF は空である

PIC32MX370F512H I2Cスレーブレジスタ

<I2C2XCONレジスタ>

 bit 15 ON: I2C イネーブルビット
1 = I2C モジュールを有効にし、SDAx およびSCLx ピンをシリアルポート ピンとして設定する
0 = I2C モジュールを無効にする
bit 12 SCLREL: SCKx リリース制御ビット
このビットは I2C スレーブモード専用です。モジュールをリセット(ON = 0) すると、SCLREL ビットは「1」にセットされます。
STREN = 1 の場合:
1 = クロックをリリースする
0 = クロックをLOW に保持する( クロック ストレッチング)。ユーザはこのビットに「0」を書き込む事で,次のSCLx LOW を ストレッチできる
このビットはスレーブ送信の開始時またはスレーブ受信の終了時に自動的に「0」にクリアされます。
bit 10 A10M: 10 ビット スレーブアドレス フラグビット
1 = I2CxADDレジスタは10 ビット スレーブアドレスを格納する
0 = I2CxADDレジスタは7 ビット スレーブアドレスを格納する
bit 9 DISSLW: スルーレート制御ディセーブル ビット
1 = スルーレート制御を無効にする( 標準速度モード(100 kHz) および1 MHz モード用)
0 = スルーレート制御を有効にする( 高速モード(400 kHz) 用)
bit 6 STREN: SCLx クロック ストレッチング イネーブルビット 
このビットは I2C スレーブモード専用です(SCLREL ビットと組み合わせて使用)。
1 = クロック ストレッチングを有効にする
0 = クロック ストレッチングを無効にする

<I2C2STATレジスタ>

bit 15 ACKSTAT: 肯定応答ステータスビット 
このビットはI2C マスタおよびスレーブモードの送信および受信に適用されます。
1 = 肯定応答は受信しなかった
0 = 肯定応答を受信した
bit 10 BCL: マスタバス衝突検出ビット
このビットは I2C モジュールが無効(ON = 0) になるとクリアされます。
1 = マスタ動作中にバス衝突を検出した
0 = バス衝突は検出していない
bit 7 IWCOL: 書き込みコリジョン検出ビット
1 = I2C モジュールがビジーであるため、I2CxTRN レジスタへの書き込みコリジョンが発生した 
( このビットはソフトウェアでクリアする必要がある)
0 = 書き込みコリジョンは発生していない
bit 6 I2COV: I2C 受信オーバーフロー ステータスビット
1 = I2CxRCV レジスタが先に受信したバイトをまだ保持している時に次のバイトを受信した
このビットはソフトウェアでクリアする必要があります。
0 =オーバーフローは発生していない
bit 5 D/A: データ/ アドレスビット 
1 = 最後に受信または送信したバイトはデータであった
0 = 最後に受信または送信したバイトはアドレスであった
bit 4 P: STOP ビット 
このビットはSTART、リセット、STOP を検出すると更新され、 I2C モジュールが無効(ON = 0) になるとクリアされます。
1 = STOPビットを検出した
0 = STOPビットは検出していない
bit 3 S: START ビット 
このビットはSTART、リセット、STOP を検出すると更新され、 I2C モジュールが無効(ON = 0) になるとクリアされます。
1 = STARTビット( または反復START ビット) を検出した
0 = STARTビットは検出していない
bit 2 R/W: 読み/ 書き情報ビット 
1 = 読み出し - スレーブからマスタへのデータ転送
0 = 書き込み - マスタからスレーブへのデータ転送
bit 1 RBF: 受信バッファフル ステータスビット
1 = 受信は完了した(I2CxRCV レジスタはフル)
0 = 受信は完了していない(I2CxRCV レジスタはエンプティ)
bit 0 TBF: 送信バッファフル ステータスビット
1 = 送信は完了していない(I2CxTRN レジスタはフル) (8 ビットのデータが残っている)
0 = 送信は完了した(I2CxTRN レジスタはエンプティ)