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

I 2 S モード

ドキュメント内 Section 23. Serial Peripheral Interface (SPI) (ページ 34-44)

シリアル ペリフェラルインターフェイス(S PI ) 23

23.4 オーディオ プロトコル インターフェイス モード

23.4.4 フレーム /LRCK エラー

23.4.5.1 I 2 S モード

I2S (Inter-IC Sound)プロトコルを使うと、2チャンネルのデジタル オーディオデータを1つの シリアル インターフェイスを介して送信できます。I2Sプロトコルは、WS/LRCKラインを使っ てステレオデータを処理する3線式インターフェイスを定義します。I2S仕様は、常に送信ま たは受信のどちらか一方だけをサポートする半二重インターフェイスを定義しています。SPI モジュールはSDOとSDIの両方を備えるため、全二重動作をサポートします(図23-22参照)。

• データ送信のタイミング

- トランスミッタは、LRCKの状態遷移より後の最初のSCK立ち上がりエッジで、オーディ オ サンプルデータのMSbをシフトします。

- レシーバは、2番目のSCK立ち上がりエッジでMSbをサンプリングします。

- 左チャンネルのデータは、LRCKのLOW期間中にシフトアウトされ、右チャンネルのデー タはLRCKのHIGH期間中にシフトアウトされます。

- 左および右チャンネルのデータは1つのフレームにより構成されます。

• 必要な設定

モジュールをI2Sモードに設定するには、下記のビットを設定する必要があります。

- AUDMOD<1:0> = 00 (SPIxCON2<1:0>) - FRMPOL = 0 (SPIxCON<29>)

- CKP = 1 (SPIxCON<6>)

これらのビット設定により、SCK (BCLK)の立ち下がりエッジでSDOとLRCK (SSx)の状態が 遷移し、SCKの立ち上がりエッジでSDIのサンプリングが発生します。図23-22を参照して ください。

23-22: I2S (16ビットデータ/チャンネルまたは32ビットデータ/チャンネル)

Note: 一部のデバイスではこの機能を利用できません。詳細は各デバイスのデータシー

トを参照してください。

SSx (LRCK) SCKx (BCLK)

SDOx/SDIx MSb MSb-1 LSb+1 LSb MSb MSb-1 LSb+1 LSb

LEFT CHANNEL RIGHT CHANNEL

Transmit Sample

Left Channel LSb

Sample Transmit

Right Channel LSb

シリアル ペリフェラル インターフェイス (S PI ) 23

23.4.5.1.1 I2Sオーディオ スレーブモードの動作

SPIモジュールをI2Sオーディオ スレーブモードに設定する手順は下記の通りです。

1. 割り込みが有効になっている場合、対応するIECxレジスタでSPI割り込みを無効にする。

2. ONビット(SPIxCON<15>)をクリアしてSPIモジュールを停止/リセットする。

3. SPIオーディオ コンフィグレーション レジスタ(SPIxCON2)をリセットする。

4. 受信バッファをクリアする。

5. ENHBUFビット(SPIxCON<16>)をクリア(標準バッファモードを使う場合)またはセッ ト(拡張バッファモードを使う場合)する。

6. SPI割り込みを使う場合は下記を行う。

a) 対応するIFSxレジスタのSPIx割り込みフラグ/イベントをクリアする。

b) 対応するIPCxレジスタのSPIx割り込み優先度および副優先ビットを設定する。

c) 対応するIECxレジスタのSPIx割り込みイネーブルビットをセットする。

7. SPIROVビット(SPIxSTAT<6>)をクリアする。

8. SPIxCON2レジスタに適切な設定を書き込む。

a) AUDMOD<1:0>ビット(SPIxCON2<1:0>) = 00 b) AUDENビット(SPIxCON2<7>) = 1

9. SPIxCONレジスタに適切な設定を書き込む。

a) MSTEN (SPIxCON<5>) = 0 b) CKP (SPIxCON<6>) = 1

c) MODE<32,16> (SPIxCON<11:10>) = 0 (16ビット オーディオ チャンネル データ) d) ONビット(SPIxCON<15>)をセットしてSPIの動作を有効にする。

10.マスタがBCLKとLRCKの供給を開始するとただちに送信(および受信)が始まる。

23-3: I2Sスレーブモード(16ビット チャンネルデータ/32ビットフレーム)

/* The following code example will initialize the SPI1 Module in I2S Slave mode.*/

/* It assumes that none of the SPI1 input pins are shared with an analog input.*/

unsigned int rData;

IEC0CLR=0x03800000; // disable all interrupts SPI1CON = 0; // Stops and resets the SPI1.

SPI1CON2 = 0; // Reset audio settings rData=SPI1BUF; // clears the receive buffer IFS0CLR=0x03800000; // clear any existing event IPC5CLR=0x1f000000; // clear the priority

IPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1

IEC0SET=0x03800000; // Enable RX, TX and Error interrupts SPI1STATCLR=0x40; // clear the Overflow

SPI1CON2=0x00000080; // I2S Mode, AUDEN = 1, AUDMON = 0

SPI1CON =0x00008040; // Slave mode, SPI ON, CKP = 1, 16-bit audio data, 32 bits per frame // from here, the device is ready to receive and transmit data

/* Note:A few of bits related to frame settings are not required to be set in the SPI1CON */

/* register during audio mode operation.Please refer to the notes in the SPIxCON2 register.*/

23.4.5.1.2 I2Sオーディオ マスタモードの動作

典型的なアプリケーション例として、コーデック スレーブデバイスに接続してPCMデータ (サンプリング周波数: 8 kHz、16ビットデータ、32ビット フレームサイズ)を再生する場合 を想定します。この場合、256 kbpsのBCLKを生成するようSPIモジュールを初期化します。

周辺モジュール用バスクロックの周波数は40 MHz (FPB = 40e6)とします。baudレートの計算 式を式23-2に示します。

23-2:

上式から、SPIxBRGは式23-3のように計算できます。

23-3:

Baud Rateは256e3です。従ってSPIxBRGの値は式23-4のように求まります。

23-4:

式23-4から求めたSPIxBRGの値に最も近い整数は77です。この値を使って、実効baudレー トは式23-5のように求まります。

23-5:

この結果は目標値よりも0.16%高速ですが、ほとんどのシステムでは許容範囲内です(0.16%

は正確に1/625)。一部のデバイスでは、REFOTRIMレジスタを使ってこの誤差を修正でき、正

確に目標周波数のマスタクロックを出力できます。

SPIモジュールをI2Sオーディオ マスタモード向けに設定する手順は以下の通りです。

1. 割り込みが有効になっている場合、対応するIECxレジスタでSPI割り込みを無効にする。

2. ONビット(SPIxCON<15>)をクリアしてSPIモジュールを停止/リセットする。

3. SPIオーディオ コンフィグレーション レジスタ(SPIxCON2)をリセットする。

4. baudレートレジスタ(SPIxBRG)をリセットする。

5. 受信バッファをクリアする。

6. ENHBUFビット(SPIxCON<16>)をクリア(標準バッファモードを使う場合)またはセッ ト(拡張バッファモードを使う場合)する。

7. 割り込みを使う場合は以下を実行する。

a) 対応するIFSxレジスタのSPIx割り込みフラグ/イベントをクリアする。

b) 対応するIPCxレジスタのSPIx割り込み優先度および副優先ビットを設定する。

c) 対応するIECxレジスタのSPIx割り込みイネーブルビットをセットする。

8. SPIROVビット(SPIxSTAT<6>)をクリアする。

9. SPIxCON2レジスタに適切な設定を書き込む。I2Sモードに設定するには、AUDMOD<1:0>

ビット(SPIxCON2<1:0>)を「00」に設定し、AUDENビット(SPIxCON2<7>)を「1」に セットしてオーディオ プロトコルを有効にする必要がある。

10. SPIxBRG baudレート レジスタを0x4Dに設定する(40 MHzのPBCLKから約256 kbpsの サンプリング レートを生成)。

Baud Rate FPB 2SPIxBRG+1

---=

SPIxBRG FPB 2Baud Rate ---–1

=

SPIxBRG 40e6 2 256e3 

---–1=77.125

=

40e6 277+1

--- 40e6

---156 256410.25 bits per second

= =

シリアル ペリフェラル インターフェイス (S PI ) 23

11. SPIxCONレジスタに適切な設定を書き込む。

a) MSTEN (SPIxCON<5>) = 1 b) CKP (SPIxCON<6>) = 1

c) MODE<32,16> (SPIxCON<11:10>) = 0 (16ビット オーディオ チャンネル データ) d) ONビット(SPIxCON<15>)をセットしてSPIの動作を有効にする。

12. ONビットをセットすると送信(および受信)が即座に始まる。

23-4: I2Sマスタモード(256 kbps BCLK、16ビット チャンネルデータ、32ビットフレーム) /* The following code example will initialize the SPI1 Module in I2S Master mode.*/

/* It assumes that none of the SPI1 input pins are shared with an analog input.*/

unsigned int rData;

IEC0CLR=0x03800000; // disable all interrupts SPI1CON = 0; // Stops and resets the SPI1.

SPI1CON2 = 0; // Reset audio settings SPI1BRG=0; // Reset Baud rate register rData=SPI1BUF; // clears the receive buffer IFS0CLR=0x03800000; // clear any existing event IPC5CLR=0x1f000000; // clear the priority

IPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1

IEC0SET=0x03800000; // Enable RX, TX and Error interrupts SPI1STATCLR=0x40; // clear the Overflow

SPI1CON2=0x00000080; // I2S Mode, AUDEN = 1, AUDMON = 0

SPI1BRG =0x4D; //(to generate 256 kbps sample rate, PBCLK @ 40 MHz) SPI1CON =0x00008060; // Master mode, SPI ON, CKP = 1, 16-bit audio channel

// data, 32 bits per frame

// from here, the device is ready to receive and transmit data

/* Note:A few of bits related to frame settings are not required to be set in the SPI1CON */

/* register during audio mode operation.Please refer to the notes in the SPIxCON2 register.*/

23.4.5.2 左寄せモード

左寄せモードはI2Sモードに似ていますが、SPIはLRCKの遷移と同時に発生するSCKエッジ でオーディオデータのMSbをシフトします。レシーバ側のSPIモジュールは、その次のSCK エッジでMSbをサンプリングします。

一般的に左または右寄せプロトコルを使うコーデックは、「SCK 立ち上がりエッジでデータ送 信/SCK立ち下がりエッジでデータ受信」を既定値とします。

• 必要な設定

モジュールを左寄せモードに設定するには、下記のビットを設定する必要があります。

- AUDMOD<1:0> = 01 (SPIxCON2<1:0>) - FRMPOL = 1 (SPIxCON<29>)

- CKP = 0 (SPIxCON<6>)

これにより、SDOとLRCKはSCK立ち上がりエッジに同期して遷移します。16/24/32ビット オーディオデータ転送のサンプル波形を図23-23と図23-24に示します。

23-23: 左寄せモード(16ビット データ/チャンネルまたは32ビット データ/チャンネル)

23-24: 左寄せモード(16/24ビットデータ、32ビット チャンネル)

SSx (LRCK) SCKx (BCLK)

SDOx/SDIx MSb MSb-1 LSb+1 LSb MSb MSb-1 LSb+1 LSb

LEFT CHANNEL RIGHT CHANNEL

Transmit Sample TransmitSample

SSx (LRCK) SCKx (BCLK)

SDOx/SDIx MSb LSb MSb LSb

LEFT CHANNEL RIGHT CHANNEL

Transmit Sample TransmitSample

0

0 0 0

シリアル ペリフェラル インターフェイス (S PI ) 23

23.4.5.2.1 左寄せオーディオ スレーブモードの動作

SPIモジュールを左寄せオーディオ スレーブモードに設定する手順は下記の通りです。

1. 割り込みを有効にしている場合、対応するIECxレジスタでSPI割り込みを無効にする。

2. ONビット(SPIxCON<15>)をクリアしてSPIモジュールを停止/リセットする。

3. SPIオーディオ コンフィグレーション レジスタ(SPIxCON2)をリセットする。

4. 受信バッファをクリアする。

5. ENHBUFビット(SPIxCON<16>)をクリア(標準バッファモードを使う場合)またはセッ ト(拡張バッファモードを使う場合)する。

6. SPI割り込みを使う場合は下記を行う。

a) 対応するIFSxレジスタのSPIx割り込みフラグ/イベントをクリアする。

b) 対応するIPCxレジスタのSPIx割り込み優先度および副優先ビットを設定する。

c) 対応するIECxレジスタのSPIx割り込みイネーブルビットをセットする。

7. SPIROVビット(SPIxSTAT<6>)をクリアする。

8. SPIxCON2レジスタに適切な設定を書き込む。左寄せモードに設定するには、AUDMOD<1:0>

ビット(SPIxCON2<1:0>)を「01」に設定し、AUDENビット(SPIxCON2<7>)を「1」に セットしてオーディオ プロトコルを有効にする必要がある。

9. SPIxCONレジスタに適切な設定を書き込む。

a) スレーブモード(MSTEN (SPIxCON<5>) = 0)に設定する b) クロック極性を設定する(CKP (SPIxCON<6>) = 0) c) フレーム極性を設定する(FRMPOL (SPIxCON<29>) = 1)

d) 16ビット オーディオ チャンネル データ(MODE<32,16> (SPIxCON<11:10>) = 0)に 設定する

e) ONビット(SPIxCON<15>)をセットしてSPIの動作を有効にする。

10.マスタがBCLKとLRCKの供給を開始するとただちに送信(および受信)が始まる。

23-5: 左寄せスレーブモード(16ビット チャンネルデータ、32ビットフレーム)

/* The following code example will initialize the SPI1 Module in Left-Justified Slave mode.*/

/* It assumes that none of the SPI1 input pins are shared with an analog input.*/

unsigned int rData;

IEC0CLR=0x03800000; // disable all interrupts SPI1CON = 0; // Stops and resets the SPI1.

SPI1CON2 = 0; // Reset audio settings rData=SPI1BUF; // clears the receive buffer IFS0CLR=0x03800000; // clear any existing event IPC5CLR=0x1f000000; // clear the priority

IPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1

IEC0SET=0x03800000; // Enable RX, TX and Error interrupts SPI1STATCLR=0x40; // clear the Overflow

SPI1CON2=0x00000081; // Left-Justified Mode, AUDEN = 1, AUDMON = 0 SPI1CON =0x20008000; // Slave mode, SPI ON, CKP = 0, FRMPOL = 1, // 16-bit audio data, 32 bits per frame // from here, the device is ready to receive and transmit data

/* Note:A few of bits related to frame settings are not required to be set in the SPI1CON */

/* register during audio mode operation.Please refer to the notes in the SPIxCON2 register.*/

23.4.5.2.2 左寄せオーディオ マスタモードの動作

SPIモジュールを左寄せオーディオ マスタモードに設定する手順は下記の通りです。

1. 割り込みを有効にしている場合、対応するIECxレジスタでSPI割り込みを無効にする。

2. ONビット(SPIxCON<15>)をクリアしてSPIモジュールを停止/リセットする。

3. SPIオーディオ コンフィグレーション レジスタ(SPIxCON2)をリセットする。

4. baudレートレジスタ(SPIxBRG)をリセットする。

5. 受信バッファをクリアする。

6. ENHBUFビット(SPIxCON<16>)をクリア(標準バッファモードを使う場合)またはセッ ト(拡張バッファモードを使う場合)する。

7. SPI割り込みを使う場合は下記を行う。

a) 対応するIFSxレジスタのSPIx割り込みフラグ/イベントをクリアする。

b) 対応するIPCxレジスタのSPIx割り込み優先度および副優先ビットを設定する。

c) 対応するIECxレジスタのSPIx割り込みイネーブルビットをセットする。

8. SPIROVビット(SPIxSTAT<6>)をクリアする。

9. SPIxCON2レジスタに適切な設定を書き込む。左寄せモードに設定するには、AUDMOD<1:0>

ビット(SPIxCON2<1:0>)を「01」に設定し、AUDENビット(SPIxCON2<7>)を「1」に セットしてオーディオ プロトコルを有効にする必要がある。

10. SPIxBRG baudレート レジスタを0x4Dに設定する(40 MHzのPBCLKから約256 kbpsの サンプリング レートを生成)。

11. SPIxCONレジスタに適切な設定を書き込む。

a) マスタモード(MSTEN (SPIxCON<5>) = 1)に設定する b) クロック極性を設定する(CKP (SPIxCON<6>) = 0) c) フレーム極性を設定する(FRMPOL (SPIxCON<29>) = 1)

d) 16ビット オーディオ チャンネル データ(MODE<32,16> (SPIxCON<11:10>) = 0)に 設定する

e) ONビット(SPIxCON<15>)をセットしてSPIの動作を有効にする。

12. ONビットをセットすると、送信(および受信)が即座に始まる。

23-6: 左寄せマスタモード(16ビット チャンネルデータ、32ビットフレーム)

/* The following code example will initialize the SPI1 Module in Left-Justified Master mode.*/

/* It assumes that none of the SPI1 input pins are shared with an analog input.*/

unsigned int rData;

IEC0CLR=0x03800000; // disable all interrupts SPI1CON = 0; // Stops and resets the SPI1 SPI1CON2 = 0; // Reset audio settings SPI1BRG = 0;

rData=SPI1BUF; // clears the receive buffer IFS0CLR=0x03800000; // clear any existing event IPC5CLR=0x1f000000; // clear the priority

IPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1

IEC0SET=0x03800000; // Enable RX, TX and Error interrupts SPI1STATCLR=0x40; // clear the Overflow

SPI1CON2=0x00000081; // Left-Justified Mode, AUDEN = 1, AUDMON = 0

SPI1BRG =0x4D; // (to generate 256 kbps sample rate, PBCLK @ 40 MHz) SPI1CON =0x20008040; // Master mode, SPI ON, CKP = 0, FRMPOL = 1, MSTEN = 1

// 16-bit audio data, 32 bits per frame // from here, the device is ready to receive and transmit data

/* Note:A few of bits related to frame settings are not required to be set in the SPI1CON */

/* register during audio mode operation.Please refer to the notes in the SPIxCON2 register.*/

ドキュメント内 Section 23. Serial Peripheral Interface (SPI) (ページ 34-44)

関連したドキュメント