I2C / マスターモードのときのプログラミング手順
pp.602-603
非公式訳
マスターモードのときは、I2Cの初期化、STARTコンディションの送信、データの送信(または受信)、STOPコンディションの送信ができなければなりません。それぞれについてもう少し詳しく説明します。
初期化する
I2Cモジュールをマスターモードとして初期化するときは、下の手順を実行しなければなりません。
TWBR
レジスタの値とTWSR
レジスタのTWPS
ビットとを設定してI2Cモジュールのクロック周波数を設定する。(訳註: BRはBit Rate Register、SRはStatus Register、PSはPrescaler)- TWCRレジスタのTWENビットを1にセットしてI2Cモジュールを有効化する。(訳註:CRはControl Register)
STARTコンディションを送信する
マスターモードでデータ転送を開始するためには、STARTコンディションを送信しなければなりません。TWCR
レジスタのTWEN
、TWSTA
、TWINT
の各ビットを1にセットすればSTARTコンディションが送信されます。TWSTA
ビットを1にセットすると、バスの解放されているときにSTARTコンディションが開始されます。TWINT
を1にセットすると、割り込みフラグがクリアされ、I2Cモジュールの動作が始まって、STARTコンディションが送信されます。そのあとは、STARTコンディションの送信が完了したかどうかを確かめる手段として、TWCR
レジスタのTWINT
フラグをポーリングで監視する必要があります。
データを送信する
1バイトのデータを送信するときは、STARTコンディションを送信したあと、下の手順を実行しなければなりません。
- 送信するデータバイトを
TWDR
レジスタにコピーする。(訳註: DRはData Register) TWCR
レジスタのTWEN
ビットおよびTWINT
ビットを1にセットしてバイトデータの送信を開始する。- バイトデータの送信が完了したかどうかを確かめる手段として、
TWCR
レジスタのTWINT
フラグをポーリングで監視する。
STARTコンディションの直後は、SLA+W (スレーブアドレス+Write)またはSLA+R (スレーブアドレス+Read)を送信しなければなりません。最初のセクションで述べたように、SLA+Wを送信した直後はスレーブに何かを書き込まなければならず、SLA+Rを送信した直後はスレーブに何かを読み出さなければなりません。SLA+R、SLA+Wを送信するとき、およびバイトデータをスレーブに書き込むときは、I2C_WRITE
函数を使います。(訳註: I2C_WRITE函数はテキストの中で作っている函数の名前)
データを受信する
バイトデータを受信するときは、SLA+Rを送信したあと、下の手順を実行しなければなりません。
TWCR
レジスタのTWEN
ビットおよびTWINT
ビットを1にセットして1バイトの受信を開始する。データを受信したあとにACKを返したい場合は、TWCR
レジスタのTWEA
ビットもセットしなければなりません。(訳註: EAはEnable Acknowledge)- バイトデータの受信が完了したかどうかを確かめる手段として、
TWCR
レジスタのTWINT
フラグをポーリングで監視する。 - 受信した1バイトをTWDRレジスタから別のレジスタ(または別の変数)へコピーして保存する。
STOPコンディションを送信する
データ転送を停止するときは、STOPコンディションを送信しなければなりません。TWCR
レジスタのTWEN
、TWSTO
、TWINT
の各ビットを1にセットすると、STOPコンディションが送信されます。STOPコンディションを送信したあとは、TWINT
フラグはポーリングでは監視できないことに注意してください。