• 検索結果がありません。

ソフトウェア例

ドキュメント内 LPC111x UM Rev0015 Japanese (ページ 168-176)

(パワーマネージメントユニット)

10.12 ソフトウェア例

10.12.1 初期化ルーチン

I2Cインターフェースをスレーブまたはマスタ、あるいはその両方として初期化するため の例

1. I2ADR を自身のスレーブアドレスとともにロードし、必要であればゼネラルコー

ル認識をイネーブルにします。

2. I2C割り込みサービスをイネーブルにします。

3. I2CONSETに0x44を書き込んでI2ENおよびAAビットを設定し、スレーブ機能を イネーブルにします。マスタのみの機能については、0x40を I2CONSET に書き込 みます。

10.12.2 マスタ送信機能の開始

バッファ、ポインタ、データカウントを設定した後、STARTを起動することによってマス タ送信動作を開始します。

1. マスタデータカウンタを初期化します。

2. データの送信先とするスレーブアドレスを設定し、書き込みビットを追加します。

3. I2CONSETに0x20を書き込んでSTAビットを設定します。

4. 送信するデータをマスタ送信バッファに設定します。

5. 送信するメッセージの長さに合わせてマスタデータカウンタを初期化します。

6. 終了します。

10.12.3 マスタ受信機能の開始

バッファ、ポインタ、データカウントを設定した後、STARTを起動することによってマス タ受信動作を開始します。

1. マスタデータカウンタを初期化します。

2. データの送信先とするスレーブアドレスを設定し、読み取りビットを追加します。

3. I2CONSETに0x20を書き込んでSTAビットを設定します。

4. マスタ受信バッファを設定します。

5. 受信するメッセージの長さに合わせてマスタデータカウンタを初期化します。

FT D RAF FT DR

AFT DRA

FT D FT D

RA FT D

RA FT D

RA FT DR

A 6. 終了します。

10.12.4 I

2

C 割り込みルーチン

I2Cの状態とそれを処理するためにどの状態ルーチンを使用するかを判定します。

1. I2STAからI2Cステータスを読み取ります。

2. ステータス値を使用して、26の可能な状態ルーチンのうちの1つに分岐します。

10.12.5 モード共通の状態

10.12.5.1 状態: 0x00

バスエラー。アドレス指定されていないスレーブモードに切り替えて、バスを解放しま す。

1. I2CONSETに0x14を書き込んで、STOビットとAAビットを設定します。

2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. 終了します。

10.12.5.2 マスタの状態

状態08と状態10は、どちらもマスタ送信モードとマスタ受信モードに関するものです。

R/W ビットは、次の状態がマスタ送信モードとマスタ受信モードのどちらであるかを決 定します。

10.12.5.3 状態: 0x08

START状態を送信済み。スレーブアドレス+R/Wビットを送信し、ACKビットを受信しま す。

1. I2DATにスレーブアドレスとR/Wビットを書き込みます。

2. I2CONSETに0x04を書き込んで、AAビットを設定します。

3. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

4. マスタ送信モードデータバッファを設定します。

5. マスタ受信モードデータバッファを設定します。

6. マスタデータカウンタを初期化します。

7. 終了します。

10.12.5.4 状態: 0x10

Repeated START状態を送信済み。スレーブアドレス+R/Wビットを送信し、ACK ビット を受信します。

にスレーブアドレスと ビットを書き込みます。

FT D RAF FT DR

AFT DRA

FT D FT D

RA FT D

RA FT D

RA FT DR

A 6. マスタデータカウンタを初期化します。

7. 終了します。

10.12.6 マスタトランスミッタの状態

10.12.6.1 状態: 0x18

前の状態は状態8または状態10、スレーブアドレス+書き込み送信済み、ACK受信済み。

最初のデータバイトを送信し、ACKビットを受信します。

1. I2DATをマスタ送信バッファからの最初のデータバイトとともにロードします。

2. I2CONSETに0x04を書き込んで、AAビットを設定します。

3. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

4. マスタ送信バッファのポインタをインクリメントします。

5. 終了します。

10.12.6.2 状態: 0x20

スレーブアドレス+書き込みを送信済み。NOT ACKを受信済み。 STOP状態を送信します。

1. I2CONSETに0x14を書き込んで、STOビットとAAビットを設定します。

2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. 終了します。

10.12.6.3 状態: 0x28

データを送信済み。ACKを受信済み。送信したデータが最後のデータバイトであった場合 はSTOP状態を送信し、そうでない場合は次のデータバイトを送信します。

1. マスタデータカウンタをデクリメントします。最後のデータバイトでない場合は ステップ5に進みます。

2. I2CONSETに0x14を書き込んで、STOビットとAAビットを設定します。

3. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

4. 終了します。

5. I2DATをマスタ送信バッファの次のデータバイトとともにロードします。

6. I2CONSETに0x04を書き込んで、AAビットを設定します。

7. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

8. マスタ送信バッファのポインタをインクリメントします。

9. 終了します。

10.12.6.4 状態: 0x30

データを送信済み。NOT ACKを受信済み。 STOP状態を送信します。

1. I2CONSETに0x14を書き込んで、STOビットとAAビットを設定します。

2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. 終了します。

FT D RAF FT DR

AFT DRA

FT D FT D

RA FT D

RA FT D

RA FT DR

A 10.12.6.5 状態: 0x38

スレーブアドレス+書き込みまたはデータの間にアービトレーションを失いました。バス を解放し、アドレス指定されていないスレーブモードに切り替わります。バスが再び空き 状態になったときに、新たにSTART状態を送信します。

1. I2CONSETに0x24を書き込んで、STAビットとAAビットを設定します。

2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. 終了します。

10.12.7 マスタレシーバの状態

10.12.7.1 状態: 0x40

前の状態は状態08または状態10。スレーブアドレス+ 読み取り送信済み、ACK受信済 み。データを受信し、ACKを返します。

1. I2CONSETに0x04を書き込んで、AAビットを設定します。

2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. 終了します。

10.12.7.2 状態: 0x48

スレーブアドレス+読み取りを送信済み。NOT ACKを受信済み。 STOP状態を送信します。

1. I2CONSETに0x14を書き込んで、STOビットとAAビットを設定します。

2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. 終了します。

10.12.7.3 状態: 0x50

データを受信済み、ACKを返送済み。 I2DATからデータを読み取ります。追加のデータを 受信します。これが最後のデータバイトである場合は NOT ACK を返しますが、それ以外 の場合はACKを返します。

1. I2DATからマスタ受信バッファへデータバイトを読み込みます。

2. マスタデータカウンタをデクリメントします。最後のデータバイトでない場合は ステップ5に進みます。

3. I2CONCLRに0x0Cを書き込んで、SIフラグとAAビットをクリアします。

4. 終了します。

5. I2CONSETに0x04を書き込んで、AAビットを設定します。

6. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

7. マスタ受信バッファのポインタをインクリメントします。

FT D RAF FT DR

AFT DRA

FT D FT D

RA FT D

RA FT D

RA FT DR

A

1. I2DATからマスタ受信バッファへデータバイトを読み込みます。

2. I2CONSETに0x14を書き込んで、STOビットとAAビットを設定します。

3. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

4. 終了します。

10.12.8 スレーブレシーバの状態

10.12.8.1 状態: 0x60

自身のスレーブアドレス+書き込みを受信済み、ACKを返送済み。データを受信し、ACK を返します。

1. I2CONSETに0x04を書き込んで、AAビットを設定します。

2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. スレーブ受信モードデータバッファを設定します。

4. スレーブデータカウンタを初期化します。

5. 終了します。

10.12.8.2 状態: 0x68

バスマスタのときにスレーブアドレスおよびR/Wビットでアービトレーションを失いま した。自身のスレーブアドレス+書き込みを受信済み、ACKを返送済み。データを受信し、

ACKを返します。バスが再び解放された後でマスタモードをリスタートするようにSTAを 設定します。

1. I2CONSETに0x24を書き込んで、STAビットとAAビットを設定します。

2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. スレーブ受信モードデータバッファを設定します。

4. スレーブデータカウンタを初期化します。

5. 終了します。

10.12.8.3 状態: 0x70

ゼネラルコールを受信済み、ACKを返送済み。データを受信し、ACKを返します。

1. I2CONSETに0x04を書き込んで、AAビットを設定します。

2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. スレーブ受信モードデータバッファを設定します。

4. スレーブデータカウンタを初期化します。

5. 終了します。

10.12.8.4 状態: 0x78

バスマスタのときにスレーブアドレス+R/Wビットでアービトレーションを失いました。

ゼネラルコールを受信済み、ACKを返送済み。データを受信し、ACKを返します。バスが 再び解放された後でマスタモードをリスタートするようにSTAを設定します。

1. I2CONSETに0x24を書き込んで、STAビットとAAビットを設定します。

FT D RAF FT DR

AFT DRA

FT D FT D

RA FT D

RA FT D

RA FT DR

A 2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. スレーブ受信モードデータバッファを設定します。

4. スレーブデータカウンタを初期化します。

5. 終了します。

10.12.8.5 状態: 0x80

以前は自身のスレーブアドレスでアドレス指定されていました。データを受信済み、ACK を返送済み。追加のデータを読み取ります。

1. I2DATからスレーブ受信バッファへデータバイトを読み込みます。

2. スレーブデータカウンタをデクリメントします。最後のデータバイトでない場合 はステップ5に進みます。

3. I2CONCLRに0x0Cを書き込んで、SIフラグとAAビットをクリアします。

4. 終了します。

5. I2CONSETに0x04を書き込んで、AAビットを設定します。

6. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

7. スレーブ受信バッファのポインタをインクリメントします。

8. 終了します。

10.12.8.6 状態: 0x88

以前は自身のスレーブアドレスでアドレス指定されていました。データを受信済み、NOT ACK を返送済み。受信したデータは保存しません。アドレス指定されていないスレーブ モードに切り替わります。

1. I2CONSETに0x04を書き込んで、AAビットを設定します。

2. I2CONCLRに0x08を書き込んで、SIフラグをクリアします。

3. 終了します。

10.12.8.7 状態: 0x90

以前はゼネラルコールでアドレス指定されていました。データを受信済み、ACKを返送済 み。受信したデータを保存します。最初のデータバイトのみ受信し、ACK を送信します。

追加のデータを受信し、NOT ACKを送信します。

1. I2DATからスレーブ受信バッファへデータバイトを読み込みます。

2. I2CONCLRに0x0Cを書き込んで、SIフラグとAAビットをクリアします。

3. 終了します。

10.12.8.8 状態: 0x98

ドキュメント内 LPC111x UM Rev0015 Japanese (ページ 168-176)