I2C / マスターモードのときのプログラミング手順

pp.602-603

非公式訳
マスターモードのときは、I2Cの初期化、STARTコンディションの送信、データの送信(または受信)、STOPコンディションの送信ができなければなりません。それぞれについてもう少し詳しく説明します。

初期化する

I2Cモジュールをマスターモードとして初期化するときは、下の手順を実行しなければなりません。

  1. TWBRレジスタの値とTWSRレジスタTWPSビットとを設定してI2Cモジュールのクロック周波数を設定する。(訳註: BRはBit Rate Register、SRはStatus Register、PSはPrescaler)
  2. TWCRレジスタのTWENビットを1にセットしてI2Cモジュールを有効化する。(訳註:CRはControl Register)

STARTコンディションを送信する

マスターモードでデータ転送を開始するためには、STARTコンディションを送信しなければなりません。TWCRレジスタTWENTWSTATWINTの各ビットを1にセットすればSTARTコンディションが送信されます。TWSTAビットを1にセットすると、バスの解放されているときにSTARTコンディションが開始されます。TWINTを1にセットすると、割り込みフラグがクリアされ、I2Cモジュールの動作が始まって、STARTコンディションが送信されます。そのあとは、STARTコンディションの送信が完了したかどうかを確かめる手段として、TWCRレジスタTWINTフラグをポーリングで監視する必要があります。

データを送信する

1バイトのデータを送信するときは、STARTコンディションを送信したあと、下の手順を実行しなければなりません。

  1. 送信するデータバイトをTWDRレジスタにコピーする。(訳註: DRはData Register)
  2. TWCRレジスタTWENビットおよびTWINTビットを1にセットしてバイトデータの送信を開始する。
  3. バイトデータの送信が完了したかどうかを確かめる手段として、TWCRレジスタTWINTフラグをポーリングで監視する。

STARTコンディションの直後は、SLA+W (スレーブアドレス+Write)またはSLA+R (スレーブアドレス+Read)を送信しなければなりません。最初のセクションで述べたように、SLA+Wを送信した直後はスレーブに何かを書き込まなければならず、SLA+Rを送信した直後はスレーブに何かを読み出さなければなりません。SLA+R、SLA+Wを送信するとき、およびバイトデータをスレーブに書き込むときは、I2C_WRITE函数を使います。(訳註: I2C_WRITE函数はテキストの中で作っている函数の名前)

データを受信する

バイトデータを受信するときは、SLA+Rを送信したあと、下の手順を実行しなければなりません。

  1. TWCRレジスタTWENビットおよびTWINTビットを1にセットして1バイトの受信を開始する。データを受信したあとにACKを返したい場合は、TWCRレジスタTWEAビットもセットしなければなりません。(訳註: EAはEnable Acknowledge)
  2. バイトデータの受信が完了したかどうかを確かめる手段として、TWCRレジスタTWINTフラグをポーリングで監視する。
  3. 受信した1バイトをTWDRレジスタから別のレジスタ(または別の変数)へコピーして保存する。

STOPコンディションを送信する

データ転送を停止するときは、STOPコンディションを送信しなければなりません。TWCRレジスタTWENTWSTOTWINTの各ビットを1にセットすると、STOPコンディションが送信されます。STOPコンディションを送信したあとは、TWINTフラグはポーリングでは監視できないことに注意してください。