MCF8316D の I2C ペリフェラルは、処理待ちで保留中の I2C 割り込みが存在する特定の条件において、クロック ストレッチングを実行します。クロック ストレッチング中、MCF8316D は SCL を Low にプルし、I2C バスは他のデバイスでは使用できなくなります。クロック ストレッチングが発生する可能性がある条件を以下に示します。
- 開始割り込み保留中:開始割り込みによってクロック ストレッチングが発生する場合には、2 つのシナリオがあります。
- ターゲット ID が一致すると、MCF8316D の I2C ペリフェラルは、開始割り込み要求を発行します。この開始割り込み要求が処理されるまで、クロックはストレッチされます。この要求を処理すると、クロックが解放され、ACK (図 7-65 と 図 7-66 で黄色または灰色で着色) がコントローラに送信されて、トランザクションを続行します。
- 前のトランザクションからの受信割り込みをまだ処理していないときに、新しいトランザクションのスタート (さらに、ターゲット ID 一致) を受信した場合、受信割り込みと開始割り込みの両方が時系列順に処理されるまで、クロックはストレッチされます。この処理により、次のトランザクションを開始する前に、前のトランザクションが正常に実行されます。
- 受信割り込み保留中:受信割り込みの処理待ち状態で、受信レジスタがフルになると、処理対象の 1 バイト目によって生成された受信割り込みが処理されないまま、MCF8316D が 2 バイト (データまたはコントロール) を連続して受信します (図 7-65 と 図 7-66 の青枠で示されている ACK を 1 回挟んで)。2 番目のバイトを受信すると、最初のバイトによって生成された受信割り込みが処理されるまで、クロックがストレッチされます。
- 送信バッファ空:(データをコントローラに送り返すための) 送信割り込み保留中の場合、コントローラへの読み戻しデータが送信バッファに入るのを待っているときに、要求されたデータが送信バッファに入ってくるまで、クロック ストレッチングを行います。バッファにデータが入ると、クロックは解放され、データがコントローラに送信されます。
注: I2C クロック ストレッチングは、MCF8316D によって 5ms 後にタイムアウトし、同じバス上の他のデバイスが I2C バスにアクセスできるようになります。