セクション 23. シリアル ペリフェラル インターフェイス...

60
© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-1 23 シリアルペリフェラル インターフェイス (SPI) セクション 23. シリアル ペリフェラル インターフェイス (SPI) ハイライト 本セクションには下記の主要項目を記載しています。 23.1 はじめに ...................................................................................................................... 23-2 23.2 ステータス / 制御レジスタ .......................................................................................... 23-7 23.3 動作モード ................................................................................................................ 23-16 23.4 オーディオ プロトコル インターフェイス モード ................................................... 23-30 23.5 割り込み .................................................................................................................... 23-50 23.6 省電力およびデバッグモード中の動作 ..................................................................... 23-53 23.7 各種リセットの影響 .................................................................................................. 23-54 23.8 SPI モジュールを使う周辺モジュール ..................................................................... 23-54 23.9 関連アプリケーション ノート .................................................................................. 23-55 23.10 改訂履歴 .................................................................................................................... 23-56 注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。

Upload: others

Post on 24-Feb-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。

セクション 23. シリアル ペリフェラル インターフェイス (SPI)

23

シリアル

ペリフェラル

インターフェイス

(SP

I)

ハイライト

本セクションには下記の主要項目を記載しています。

23.1 はじめに ...................................................................................................................... 23-2

23.2 ステータス / 制御レジスタ .......................................................................................... 23-7

23.3 動作モード ................................................................................................................ 23-16

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

23.5 割り込み .................................................................................................................... 23-50

23.6 省電力およびデバッグモード中の動作 ..................................................................... 23-53

23.7 各種リセットの影響 .................................................................................................. 23-54

23.8 SPI モジュールを使う周辺モジュール ..................................................................... 23-54

23.9 関連アプリケーション ノート .................................................................................. 23-55

23.10 改訂履歴 .................................................................................................................... 23-56

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-1

Page 2: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.1 はじめにシリアル ペリフェラル インターフェイス (SPI) モジュールは、外部の周辺モジュールまたは他 のマイクロコントローラ デバイスとの通信に便利に使える同期シリアル インターフェイスで す。SPI を使って通信可能な周辺デバイスには EEPROM、シフトレジスタ、ディスプレイ ド ライバ、アナログ / デジタル コンバータ (ADC)、オーディオ コーデック等があります。PIC32 ファミリの SPI モジュールは Motorola® SPI および SIOP インターフェイスとの互換性を持ち ます。図 23-1 に、SPI モジュールのブロック図を示します。

このモジュールの主な特長は以下の通りです。

• マスタモードとスレーブモードをサポート

• 4 種類のクロック フォーマット

• フレーム化 SPI プロトコルをサポート

• 標準および拡張バッファモード ( 拡張バッファモードは一部デバイスにのみ実装 )• データ幅を 8、16、32 ビットに設定可能

• 拡張バッファモードではSPI受信および送信バッファを4/8/16段のFIFOバッファとして構成

• プログラマブルな割り込みイベント (8/16/32 ビットのデータ転送ごとに割り込みを生成 )• オーディオ プロトコル インターフェイス モード

一部の PIC32 デバイスは、各種のオーディオ コーデック シリアル プロトコル (I2S (Inter-IC Sound)、左寄せ、右寄せ、PCM/DSP モード等 ) をサポートし、16/24/32 ビット オーディオ データに対応します。お使いになるデバイスでこれらの機能が利用できるかどうかは、デバイスのデータシートを参照してください。

SPIx シリアル インターフェイスは下記の 4 本のピンを備えます。

• SDIx: シリアルデータ入力

• SDOx: シリアルデータ出力

• SCKx: シフトクロック入力または出力

• SSx: アクティブ LOW スレーブ選択またはフレーム同期 I/O パルス

Note: ファミリ リファレンス マニュアルの本セクションは、デバイス データシートの 補足を目的としています。本書の内容は PIC32 ファミリの一部のデバイスには対応していません。

本書の内容がお客様のご使用になるデバイスに対応しているかどうかは、最新デバイス データシート内の「シリアル ペリフェラル インターフェイス (SPI)」の冒 頭に記載している注意書きでご確認ください。

デバイス データシートとファミリ リファレンス マニュアルの各セクションは、マ イクロチップ社のウェブサイト (http://www.microchip.com) でご覧になれます。

表 23-1: SPI の機能

SPI モード

SPI マスタ

SPI スレーブ

フレーム マスタ

フレーム スレーブ

8/16/32ビットモード

クロック パルス /エッジ

の選択

フレーム同期パルス / エッジ

の選択

スレーブ選択パルス

標準 Yes Yes — — Yes Yes — Yes

フレーム化 Yes Yes Yes Yes Yes Yes Yes No

表 23-2: オーディオ プロトコル インターフェイス モードにおける SPI 機能

サポートするオーディオ プロトコル

SPI マスタ

SPI スレーブ

16/24/32ビット データ

フォーマット

32/64ビット

フレーム

オーバーフロー / アン

ダーフロー検出

モノラル /ステレオ モード

マスタクロック(MCLK)サポート

I2S、左寄せ、右寄せ、PCM/DSP

Yes Yes Yes Yes Yes Yes Yes

Note 1: 一部のデバイスではこの機能を利用できません。詳細は各デバイスのデータシートを参照してください。

DS61106G_JP - p. 23-2 © 2013 Microchip Technology Inc.

Page 3: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

図 23-1: SPI モジュールのブロック図

InternalData Bus

SDIx

SDOx

SSx

SCKx

SPIxSR(2)

bit0

ShiftControl

EdgeSelect

Enable Master Clock

Baud Rate

Slave Select

Sync Control

ClockControl

Transmit

SPIxRXB(1)

Receive

and Frame

Note 1: SPIx 受信バッファ (SPIxRXB) および SPIx 送信バッファ (SPIxTXB) レジスタには、SPIxBUF レジスタを

介してアクセスします。拡張バッファモードでは、これらのバッファはマルチエレメント FIFO バッファ

として機能します ( これらの FIFO バッファのポインタ計算は循環式です )。一部のデバイスだけが拡張

バッファモードを備えます。詳細は各デバイスのデータシートを参照してください。

2: アプリケーション ソフトウェアから SPIx シフトレジスタ (SPIxSR) に直接アクセスはできません。

3: CPU 読み出しポインタ (CRPTR) が SPI 書き込みポインタ (SWPTR) 以下である場合、アプリケーション

が SPIxRXB レジスタからデータエレメントを読み出すと CRPTR がインクリメントし、データエレメン

トが SPIxSR レジスタから SPIxRXB レジスタに転送されると SWPTR がインクリメントします。

4: SPI 読み出しポインタ (SRPTR) が CPU 書き込みポインタ (CWPTR) 以上である場合、アプリケーション

が新しいデータエレメントを SPIxBUF レジスタに書き込むと CWPTR がインクリメントし、データが

SPIxTXB レジスタから SPIxSR レジスタに転送されると SRPTR がインクリメントします。

Registers share address SPIxBUF

SPIxBUF

Generator

WriteRead

SPIxTXB(1)

PBCLK

MCLK

MCLKSEL

CWPTR(4)

SRPTRSWPTR(3)

CRPTR

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-3

Page 4: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.1.1 標準モードの SPI 動作

標準モード動作では、SPI マスタがシリアルクロックの生成を制御します。出力クロックパルスの数は転送データ幅 (8、16、32 ビット ) に対応します。図 23-2 と図 23-3 に、SPI マスタ -スレーブデバイス間の接続と SPI スレーブ - マスタデバイス間の接続を示します。

図 23-2: 標準的な SPI マスタ - スレーブデバイスの接続図

図 23-3: 標準的な SPI スレーブ - マスタデバイスの接続図

SDOx

SDIx

PIC32

Serial Clock

Note 1: 標準モードの場合、スレーブ選択ピン (SSx) は必要に応じて使えます。

2: 受信専用モードでは、SDOx ピンの制御を無効にできます。

GPIO/SSx

SCKx

SlaveSelect(1)

SDIx

SDOx(2)

PROCESSOR2

SSx

SCKx

[SPI Master] [Slave]

SDOx(2)

SDIx

PIC32

Serial Clock

Note 1: 標準モードの場合、スレーブ選択ピン (SSx) は必要に応じて使えます。

2: 受信専用モードでは、SDOx ピンの制御を無効にできます。

SSx

SCKx

SlaveSelect(1)

SDIx

SDOx

PROCESSOR2

SSx/GPIO

SCKx

[SPI Slave] [Master]

DS61106G_JP - p. 23-4 © 2013 Microchip Technology Inc.

Page 5: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.1.2 フレーム化モードの SPI 動作

フレーム化モード動作の場合、フレームマスタがフレーム同期パルスの生成を制御し、SPI マスタは SPI クロックを常時生成します。図 23-4 に SPI フレーム マスタデバイスの接続図を示 し、図 23-5 に SPI フレーム スレーブデバイスの接続図を示します。

図 23-4: 標準的な SPI マスタ / フレームマスタ デバイスの接続図

図 23-5: 標準的な SPI マスタ / フレームスレーブ デバイスの接続図

SDOx

SDIx

PIC32

Serial Clock

Note 1: フレーム化 SPI モードでは、SSx ピンを使ってフレーム同期パルスを送信 / 受信します。

2: フレーム化 SPI モードは、4 本のピンの全てを使います ( つまり SSx ピンを必ず使います )。

SSx

SCKx

FrameSync.Pulse(1,2)

SDIx

SDOx

PROCESSOR2

SSx

SCKx

[SPI Master, Frame Master] [SPI Slave, Frame Slave]

SDOx

SDIx

Serial Clock

Note 1: フレーム化 SPI モードでは、SSx ピンを使ってフレーム同期パルスを送信 / 受信します。

2: フレーム化 SPI モードは、4 本のピンの全てを使います ( つまり SSx ピンを必ず使います )。

SSx

SCKx

FrameSync.

SDIx

SDOx

SSx

SCKx

PIC32[SPI Master, Frame Slave]

PROCESSOR2[SPI Slave, Frame Master]

Pulse(1,2)

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-5

Page 6: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

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

23.1.3.1 オーディオ マスタモードの SPI をコーデック スレーブに接続する 図 23-6 に、PIC32 の SPI モジュールがビットクロック (BCLK) と左 / 右チャンネル クロック (LRCK) を生成する場合の接続図を示します。

図 23-6: SPI マスタがクロックを生成してコーデック スレーブに BCLK と LRCK を供給する

23.1.3.2 オーディオ スレーブモードの SPI をコーデックマスタに接続する 図 23-7 に、コーデックマスタが BCLK と LRCK を生成する場合の接続図を示します。

図 23-7: コーデックマスタが外付け水晶振動子を使ってクロックを生成する

SCKx (BCLK)

SSx (LRCK)

SDIx

SDOx

BCLK

LRCK

ADCDAT

DACDAT

PIC32[SPI Master]

Codec[Slave]

InternalClock

SCK (BCLK)

SSx (LRCK)

SDIx

SDOx

BCLK

LRCK

ADCDAT

DACDAT

PIC32[SPI Slave]

Codec[Master]

DS61106G_JP - p. 23-6 © 2013 Microchip Technology Inc.

Page 7: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.2 ステータス / 制御レジスタ

SPI モジュールは下記の特殊機能レジスタ (SFR) を備えています。

• SPIxCON: SPI 制御レジスタ

• SPIxCON2: SPI 制御レジスタ 2

• SPIxSTAT: SPI ステータスレジスタ

• SPIxBUF: SPI バッファレジスタ

• SPIxBRG: SPI baud レートレジスタ

表 23-3 に、SPI モジュールに関連する全てのレジスタをまとめて示します。各レジスタの詳細な説明は、この表の後に記載しています。

Note: PIC32 ファミリは、デバイスのタイプに応じて 1 つまたは複数の SPI モジュールを内蔵しています。ピン、制御 / ステータスビット、レジスタの名前に含まれる添え字「x」はモジュールの番号を表します。詳細は各デバイスのデータシートを参照してください。

表 23-3: SPI 関連 SFR のまとめ

レジスタ名Bit

レンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

SPIxCON(1,2,3) 31:24 FRMEN FRMSYNC FRMPOL MSSEN(4) FRMSYPW(4) FRMCNT<2:0>(4)

23:16 MCLKSEL(4) — — — — — SPIFE ENHBUF(4)

15:8 ON — SIDL DISSDO MODE32 MODE16 SMP CKE

7:0 SSEN CKP MSTEN DISSDI(4) STXISEL<1:0>(4) SRXISEL<1:0>(4)

SPIxCON2(1,2,3,5) 31:24 — — — — — — — —

23:16 — — — — — — — —

15:8 SPISGNEXT

— — FRMERREN

SPIROVEN SPITUREN IGNROV IGNTUR

7:0 AUDEN — — — AUDMONO — AUDMOD<1:0>

SPIxSTAT(1,2,3) 31:24 — — — RXBUFELM<4:0>(4)

23:16 — — — TXBUFELM<4:0>(4)

15:8 — — — FRMERR(4) SPIBUSY — — SPITUR

7:0 SRMT(4) SPIROV SPIRBE(4) — SPITBE — SPITBF(4) SPIRBF

SPIxBUF 31:24 DATA<31:24>

23:16 DATA<23:16>

15:8 DATA<15:8>

7:0 DATA<7:0>

SPIxBRG(1,2,3) 31:24 — — — — — — — —

23:16 — — — — — — — —

15:8 — — — BRG<12:8>(6)

7:0 BRG<7:0>(6)

凡例 : — = 未実装、「0」として読み出し、アドレス オフセット値は 16 進数で表記Note 1: このレジスタに対応するクリアレジスタのアドレスは 0x4 バイト オフセットしています。クリアレジスタは、対応するレジスタの名前

の後に「CLR」を追加した名前を持ちます ( 例 : SPIxCONCLR)。クリアレジスタの任意のビットに「1」を書き込むと、対応するレジ スタの対応するビットがクリアされます。クリアレジスタからの読み出しは無視されます。

2: このレジスタに対応するセットレジスタのアドレスは 0x8 バイト オフセットしています。セットレジスタは、対応するレジスタの名前 の後に「SET」を追加した名前を持ちます ( 例 : SPIxCONSET)。セットレジスタの任意のビットに「1」を書き込むと、対応するレジス タの対応するビットがセットされます。セットレジスタからの読み出しは無視されます。

3: このレジスタに対応する反転レジスタのアドレスは 0xC バイト オフセットしています。反転レジスタは、対応するレジスタの名前の後 に「INV」を追加した名前を持ちます ( 例 : SPIxCONINV)。反転レジスタの任意のビットに「1」を書き込むと、対応するレジスタの対 応するビットが反転します。反転レジスタからの読み出しは無視されます。

4: 一部のデバイスではこのビットを利用できません。詳細は各デバイスのデータシートを参照してください。

5: 一部のデバイスではこのレジスタを利用できません。詳細は各デバイスのデータシートを参照してください。

6: BRG は最大 13 ビット です ( デバイスによってビット数は異なります )。詳細は各デバイスのデータシートを参照してください。

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-7

Page 8: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

レジスタ 23-1: SPIxCON: SPI 制御レジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

FRMEN FRMSYNC FRMPOL MSSEN(1,2) FRMSYPW(1) FRMCNT<2:0>(1)

23:16 R/W-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0

MCLKSEL — — — — — SPIFE ENHBUF(1)

15:8 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

ON — SIDL DISSDO MODE32 MODE16 SMP CKE

7:0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

SSEN CKP MSTEN DISSDI STXISEL<1:0>(1,3) SRXISEL<1:0>(1,3)

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 31 FRMEN: フレーム化 SPI サポートビット1 = フレーム化 SPI サポートを有効にする (SSx ピンを FSYNC 入力 / 出力として使う )0 = フレーム化 SPI サポートを無効にする

bit 30 FRMSYNC: フレーム同期パルス SSx ピン方向制御ビット ( フレーム化 SPI モード専用 )1 = フレーム同期パルス入力 ( スレーブモード )0 = フレーム同期パルス出力 ( マスタモード )

bit 29 FRMPOL: フレーム同期パルス極性ビット ( フレーム化 SPI モード専用 )1 = フレームパルスはアクティブ HIGH0 = フレームパルスはアクティブ LOW

bit 28 MSSEN: マスタモード スレーブ選択イネーブルビット (1,2)

1 = スレーブ選択 SPI サポートを有効にする SS ピンは、マスタモードでの送信中に自動的に駆動されます。極性は FRMPOL ビットで指定します。

0 = スレーブ選択 SPI サポートを無効にする

bit 27 FRMSYPW: フレーム同期パルス幅ビット (1)

1 = フレーム同期パルスは 1 ワード幅 (MODE<32,16> ビット (SPIxCON<11:10>) の定義に従う )0 = フレーム同期パルスは 1 クロック幅

bit 26-24 FRMCNT<2:0>: フレーム同期パルス カウンタビット このビットは 1 パルスあたりの送信データ キャラクタ数を制御します (1)。111 = 予約済み ( 使用禁止 )110 = 予約済み ( 使用禁止 )101 = 32 データ キャラクタごとにフレーム同期パルスを生成する100 = 16 データ キャラクタごとにフレーム同期パルスを生成する011 = 8 データ キャラクタごとにフレーム同期パルスを生成する010 = 4 データ キャラクタごとにフレーム同期パルスを生成する001 = 2 データ キャラクタごとにフレーム同期パルスを生成する000 = 1 データ キャラクタごとにフレーム同期パルスを生成するこのビットはフレーム化 SPI モード (FRMEN = 1) でのみ効力を持ちます。

bit 23 MCLKSEL: マスタクロック選択ビット (2)

1 = baud レート ジェネレータは MCLK を使う0 = baud レート ジェネレータは PBCLK を使う

bit 22-18 未実装 :「0」を書き込み、読み出しは無視

Note 1: 一部のデバイスはこれらのビットを実装していません。詳細は各デバイスのデータシートを参照してください。

2: FRMEN = 1の場合、MSSEN ビットは使いません。

3: これらのビットは、拡張バッファモードを有効 (ENHBUF = 1) にしている場合にのみ効力を持ちます。

DS61106G_JP - p. 23-8 © 2013 Microchip Technology Inc.

Page 9: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

bit 17 SPIFE: フレーム同期パルスエッジ選択ビット ( フレーム化 SPI モード専用 )1 = フレーム同期パルスは先頭ビットクロックと同時に発生する0 = フレーム同期パルスは先頭ビットクロックに先行して発生する

bit 16 ENHBUF: 拡張バッファ イネーブルビット (1)

1 = 拡張バッファを有効にする0 = 拡張バッファを無効にする

bit 15 ON: SPI モジュール ON ビット1 = SPI モジュールを有効にする0 = SPI モジュールを無効にする

ON = 1の場合、DISSDO および DISSDI ビットだけが変更可能です。1:1 の PBCLK 分周比を使っている 場合、周辺モジュールの ON ビットをクリアした命令の直後の SYSCLK サイクルでは、その周辺モジュールの SFR に対する読み出しまたは書き込みをユーザ ソフトウェアで実行しないでください。

bit 14 未実装 :「0」を書き込み、読み出しは無視

bit 13 SIDL: アイドル中停止ビット1 = CPU がアイドルに移行すると動作を停止する0 = アイドル中も動作を継続する

bit 12 DISSDO: SDOx ピン ディセーブル ビット1 = モジュールは SDOx ピンを使わない ( このピンは対応する PORT レジスタによって制御される )0 = モジュールは SDOx ピンを制御する

bit 11-10 MODE<32,16>: 32/16 ビット通信選択ビットAUDEN = 1の場合 :

MODE32 MODE16 通信1 1 24 ビットデータ、32 ビット FIFO、32 ビット チャンネル /64 ビット フレーム1 0 32 ビットデータ、32 ビット FIFO、32 ビット チャンネル /64 ビット フレーム0 1 16 ビットデータ、16 ビット FIFO、32 ビット チャンネル /64 ビット フレーム0 0 16 ビットデータ、16 ビット FIFO、16 ビット チャンネル /32 ビット フレーム

AUDEN = 0の場合 :

MODE32 MODE16 通信1 x 32 ビット0 1 16 ビット0 0 8 ビット

bit 9 SMP: SPI データ入力サンプル位相ビットマスタモード (MSTEN = 1) の場合 :1 = データ出力時間の最後に入力データをサンプリングする0 = データ出力時間の中間で入力データをサンプリングする

スレーブモード (MSTEN = 0) の場合 :SPI をスレーブモードで使う場合、SMP ビットの値は無視されます。モジュールは常に SMP = 0を使い ます。

bit 8 CKE: SPI クロックエッジ選択ビット1 = クロックのアクティブ状態からアイドル状態への遷移時にシリアル出力データが変化する (CKP ビッ

ト参照 )0 = クロックのアイドル状態からアクティブ状態への遷移時にシリアル出力データが変化する (CKP ビッ

ト参照 )

フレーム化 SPI モードでは CKE ビットを使いません。フレーム化 SPI モード (FRMEN = 1) を使う場合、 ユーザはこのビットを「0」に設定する必要があります。

bit 7 SSEN: スレーブ選択イネーブル ( スレーブモード ) ビット

1 = スレーブモードで SSx ピンを使う0 = スレーブモードで SSx ピンを使わない ( ポート機能がこのピンを制御する )

bit 6 CKP: クロック極性選択ビット

1 = クロックの HIGH レベルをアイドル状態、LOW レベルをアクティブ状態とする0 = クロックの LOW レベルをアイドル状態、HIGH レベルをアクティブ状態とする

レジスタ 23-1: SPIxCON: SPI 制御レジスタ ( 続き )

Note 1: 一部のデバイスはこれらのビットを実装していません。詳細は各デバイスのデータシートを参照してください。

2: FRMEN = 1の場合、MSSEN ビットは使いません。

3: これらのビットは、拡張バッファモードを有効 (ENHBUF = 1) にしている場合にのみ効力を持ちます。

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-9

Page 10: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

bit 5 MSTEN: マスタモード イネーブルビット1 = マスタモード0 = スレーブモード

bit 4 DISSDI: SDI ディセーブル ビット 1 = SPI モジュールは SDIx ピンを使わない ( ポート機能がこのピンを制御する )0 = SPI モジュールが SDIx ピンを制御する

bit 3-2 STXISEL<1:0>: SPI 送信バッファ エンプティ割り込みモードビット (1,3)

11 = バッファがフルではない場合 ( バッファ内に 1 つまたは複数の空きエレメントがある場合 ) に SPIxTXIF をセットする

10 = バッファに 1/2 以上の空き容量がある場合に SPIxTXIF をセットする01 = バッファが完全にエンプティである場合に SPIxTXIF をセットする00 = 最後の転送データを SPISR にシフトアウトして送信動作が完了した時点で SPIxTXIF をセットする

bit 1-0 SRXISEL<1:0>: SP 受信バッファフル割り込みモードビット (1,3)

11 = バッファがフルである場合に SPIxRXIF をセットする10 = バッファ容量の 1/2 以上がデータを格納している場合に SPIxRXIF をセットする01 = バッファがエンプティではない場合に SPIxRXIF をセットする00 = 受信バッファ内の最後のワードを読み出した(つまりバッファがエンプティになった)時点でSPIxRXIF

をセットする

レジスタ 23-1: SPIxCON: SPI 制御レジスタ ( 続き )

Note 1: 一部のデバイスはこれらのビットを実装していません。詳細は各デバイスのデータシートを参照してください。

2: FRMEN = 1の場合、MSSEN ビットは使いません。

3: これらのビットは、拡張バッファモードを有効 (ENHBUF = 1) にしている場合にのみ効力を持ちます。

DS61106G_JP - p. 23-10 © 2013 Microchip Technology Inc.

Page 11: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

レジスタ 23-2: SPIxCON2: SPI 制御レジスタ 2

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

— — — — — — — —

23:16 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

— — — — — — — —

15:8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-1 R/W-1 R/W-0 R/W-0

SPISGNEXT — — FRMERREN SPIROVEN SPITUREN IGNROV IGNTUR

7:0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

AUDEN(1,3) — — — AUDMONO(2) — AUDMOD<1:0>(2,4)

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 31-16 未実装 :「0」を書き込み、読み出しは無視

bit 15 SPISGNEXT: 受信 FIFO からの読み出しデータ符号拡張ビット

1 = 受信 FIFO からのデータを符号拡張する0 = 受信 FIFO からのデータを符号拡張しない

bit 14-13 未実装 :「0」を書き込み、読み出しは無視

bit 12 FRMERREN: FRMERR 割り込みイベント イネーブルビット

1 = フレームエラーはエラー割り込みを生成する0 = フレームエラーはエラー割り込みを生成しない

bit 11 SPIROVEN: SPIROV 割り込みイベント イネーブルビット

1 = 受信オーバーフローはエラー割り込みを生成する0 = 受信オーバーフローはエラー割り込みを生成しない

bit 10 SPITUREN: SPITUR 割り込みイベント イネーブルビット

1 = 送信アンダーランはエラー割り込みを生成する0 = 送信アンダーランはエラー割り込みを生成しない

bit 9 IGNROV: 受信オーバーフロー無視ビット ( オーディオデータ送信用 )

1 = ROVを重大なエラーと見なさない(ROV発生中、FIFO内のデータは受信データによって上書きされない)0 = ROV を重大なエラーと見なし、SPI 動作を停止する

bit 8 IGNTUR: 送信アンダーラン無視ビット ( オーディオデータ送信用 )

1 = TUR を重大なエラーと見なさず、SPIxTXB がエンプティではなくなるまでゼロを送信する0 = TUR を重大なエラーと見なし、SPI 動作を停止する

bit 7 AUDEN: オーディオ コーデック サポート イネーブルビット (1,3)

1 = オーディオ プロトコルを有効にする0 = オーディオ プロトコルを無効にする

bit 6-5 未実装 :「0」を書き込み、読み出しは無視

bit 3 AUDMONO: オーディオデータ送信フォーマット ビット (2)

1 = オーディオデータはモノラル ( 各データワードを左右両方のチャンネルで送信する )0 = オーディオデータはステレオ

Note 1: このビットは ON ビット = 0の場合にのみ書き込み可能です。

2: このビットはONビット = 0の場合にのみ書き込み可能であり、AUDEN = 1の場合にのみ効力を持ちます。

3: オーディオモードを有効 (AUDEN = 1) にすると、SPIxCON レジスタ内の下記のビットはモジュールに よって内部で設定されます。

•ビットクロック (BCLK) と左 / 右チャンネル クロック (LRCK) の方向 ( 入力または出力 ) は、MSTEN ビットに基づいて選択される

•FRMEN = 1、FRMCNT = 1、SMP = 0

•スレーブモードでは MSTEN = 0/FRMSYNC = 1、マスタモードでは MSTEN = 1/FRMSYNC = 0

4: I2SモードではSPIFE = 0、右または左寄せモードではSPIFE = 1、DSP/PCMモード以外ではFRMSYPW = 0

5: 一部のデバイスではこの機能を利用できません。詳細は各デバイスのデータシートを参照してください。

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-11

Page 12: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

bit 2 未実装 :「0」を書き込み、読み出しは無視

bit 1-0 AUDMOD<1:0>: オーディオ プロトコル モードビット (2,4)

11 = PCM/DSP モード10 = 右寄せモード01 = 左寄せモード00 = I2S モード (5)

レジスタ 23-2: SPIxCON2: SPI 制御レジスタ 2 ( 続き )

Note 1: このビットは ON ビット = 0の場合にのみ書き込み可能です。

2: このビットはONビット = 0の場合にのみ書き込み可能であり、AUDEN = 1の場合にのみ効力を持ちます。

3: オーディオモードを有効 (AUDEN = 1) にすると、SPIxCON レジスタ内の下記のビットはモジュールに よって内部で設定されます。

•ビットクロック (BCLK) と左 / 右チャンネル クロック (LRCK) の方向 ( 入力または出力 ) は、MSTEN ビットに基づいて選択される

•FRMEN = 1、FRMCNT = 1、SMP = 0

•スレーブモードでは MSTEN = 0/FRMSYNC = 1、マスタモードでは MSTEN = 1/FRMSYNC = 0

4: I2SモードではSPIFE = 0、右または左寄せモードではSPIFE = 1、DSP/PCMモード以外ではFRMSYPW = 0

5: 一部のデバイスではこの機能を利用できません。詳細は各デバイスのデータシートを参照してください。

DS61106G_JP - p. 23-12 © 2013 Microchip Technology Inc.

Page 13: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

レジスタ 23-3: SPIxSTAT: SPI ステータスレジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24 U-0 U-0 U-0 R-0 R-0 R-0 R-0 R-0

— — — RXBUFELM<4:0>(1)

23:16 U-0 U-0 U-0 R-0 R-0 R-0 R-0 R-0

— — — TXBUFELM<4:0>(1)

15:8 U-0 U-0 U-0 R/C-0, HS R-0 U-0 U-0 R/C-0,HS

— — — FRMERR SPIBUSY — — SPITUR(1)

7:0 R-0 R/C-0,HS R-0 U-0 R-1 U-0 R-0 R-0

SRMT(12) SPIROV SPIRBE(1) — SPITBE — SPITBF(1) SPIRBF

凡例 : C = クリア可能ビット HS = ハードウェアでセット

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 31-29 未実装 :「0」を書き込み、読み出しは無視

bit 28-24 RXBUFELM<4:0>: 受信バッファエレメント カウントビット (ENHBUF = 1の場合にのみ有効 )(1)

FIFO に格納されている受信サンプルの数を示します。

bit 23-21 未実装 :「0」を書き込み、読み出しは無視

bit 20-16 TXBUFELM<4:0>: 送信バッファエレメント カウントビット (ENHBUF = 1の場合にのみ有効 )(1)

FIFO 内に残っている送信サンプルの数を示します。

bit 15-13 未実装 :「0」を書き込み、読み出しは無視

bit 12 FRMERR: SPI フレームエラー ステータスビット

1 = フレームエラーを検出した0 = フレームエラーは検出していない

FRMERR は、FRMEN = 1の場合にのみ効力を持ちます。このビットはハードウェアによってのみセット されます。このビットはゼロを書き込む事によってクリアできます ( 命令 SPIxSTATCLR = 1<<12 の使用 を推奨 )。SPIxCON レジスタの ON ビットを使ってモジュールを一度無効にしてから再度有効にする事によってクリアする事もできます。

bit 11 SPIBUSY: SPI 動作ステータスビット

1 = SPI モジュールはトランザクションを処理中 ( ビジー )0 = SPI モジュールはアイドル中

bit 10-9 未実装 :「0」を書き込み、読み出しは無視

bit 8 SPITUR: 送信アンダーラン ビット (1)

1 = 送信バッファでアンダーラン条件が発生した

0 = 送信バッファでアンダーラン条件は発生していない

このビットは、フレーム化同期モードでのみ効力を持ちます。このビットはハードウェアによってのみセットされます。このビットはゼロを書き込む事によってクリアできます ( 命令 SPIxSTATCLR = 1<<8 の 使用を推奨 )。SPIxCON レジスタの ON ビットを使ってモジュールを一度無効にしてから再度有効にする事によってクリアする事もできます。

bit 7 SRMT: シフトレジスタ エンプティビット (ENHBUF = 1の場合にのみ有効 )(1)

1 = SPI モジュール シフトレジスタはエンプティ

0 = SPI モジュール シフトレジスタはエンプティではない

bit 6 SPIROV: 受信オーバーフロー フラグビット1 = 新しいデータを完全に受信したが破棄した (ユーザ ソフトウェアはSPIxBUFレジスタ内の先に受信し

たデータをまだ読み出していない )0 = オーバーフローは発生していない

このビットはハードウェアによってのみセットされます。このビットはゼロを書き込む事によってクリアできます ( 命令 SPIxSTATCLR = 1<<6 の使用を推奨 )。SPIxCON レジスタの ON ビットを使ってモジュー ルを一度無効にしてから再度有効にする事によってクリアする事もできます。

Note 1: 一部のデバイスはこれらのビットを実装していません。詳細は各デバイスのデータシートを参照してください。

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-13

Page 14: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

bit 5 SPIRBE: 受信 FIFO エンプティビット (ENHBUF = 1の場合にのみ有効 )1 = RX FIFO はエンプティ (CRPTR = SWPTR)0 = RX FIFO はエンプティではない (CRPTR < SWPTR)

bit 4 未実装 :「0」を書き込み、読み出しは無視

bit 3 SPITBE: SPI 送信バッファエンプティ ステータスビット (1)

1 = 送信バッファ (SPIxTXB) はエンプティ0 = 送信バッファ (SPIxTXB) はエンプティではない

SPIがデータをSPIxTXBからSPIxSRに転送すると、このビットはハードウェアで自動的にセットされます。

SPIxBUF にデータを書き込むと (SPIxTXB にデータが転送されると )、このビットはハードウェアで自動的にクリアされます。

bit 2 未実装 :「0」を書き込み、読み出しは無視

bit 1 SPITBF: SPI 送信バッファフル ステータスビット (1)

1 = 送信はまだ開始していない (SPITXB はフル )0 = 送信バッファはフルではない

標準バッファモードの場合 :

コアが SPIBUF にデータを書き込むと ( データが SPITXB に転送されると )、このビットはハードウェアで自動的にセットされます。SPI モジュールがデータを SPITXB から SPISR に転送すると、このビットはハードウェアで自動的にクリアされます。

拡張バッファモードの場合 :

このビットは FIFO 内に空き位置がなくなるとセットされます。

bit 0 SPIRBF: SPI 受信バッファフル ステータスビット

1 = 受信バッファ (SPIxRXB) はフル0 = 受信バッファ (SPIxRXB) はフルではない

標準バッファモードの場合 :

SPI モジュールがデータを SPIxSR から SPIxRXB. に転送すると、このビットはハードウェアで自動的にセットされます。SPIxBUF を読み出すと (SPIxRXB 内のデータが読み出されると )、このビットはハードウェアで自動的にクリアされます。

拡張バッファモードの場合 :

このビットは FIFO 内に空き位置がなくなるとセットされます。

レジスタ 23-3: SPIxSTAT: SPI ステータスレジスタ ( 続き )

Note 1: 一部のデバイスはこれらのビットを実装していません。詳細は各デバイスのデータシートを参照してください。

DS61106G_JP - p. 23-14 © 2013 Microchip Technology Inc.

Page 15: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

レジスタ 23-4: SPIxBUF: SPI バッファレジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

DATA<31:24>

23:16 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

DATA<23:16>

15:8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

DATA<15:8>

7:0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

DATA<7:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 31-0 DATA<31:0>: SPI 送信 / 受信バッファレジスタ

送信レジスタ (SPIxTXB) と受信レジスタ (SPIxRXB) のメモリに割り当てられた値として機能します。

32 ビット データモード (MODE<32,16> (SPIxCON<11:10>) = 1x) の場合 :このレジスタの全 32 ビット (SPIxBUF<31:0>) を使って 32 ビットキャラクタを格納します。

16 ビット データモード (MODE<32,16> (SPIxCON<11:10>) = 01) の場合 :このレジスタの下位 16 ビット (SPIxBUF<15:0>) だけを使って 16 ビットキャラクタを格納します。

8 ビット データモード (MODE<32,16> (SPIxCON<11:10>) = 00) の場合 :このレジスタの下位 8 ビット (SPIxBUF<7:0>) だけを使って 8 ビットキャラクタを格納します。

レジスタ 23-5: SPIXBRG: SPI baud レートレジスタ

ビットレンジ

Bit31/23/15/7

Bit30/22/14/6

Bit29/21/13/5

Bit28/20/12/4

Bit27/19/11/3

Bit26/18/10/2

Bit25/17/9/1

Bit24/16/8/0

31:24 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

— — — — — — — —

23:16 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0

— — — — — — — —

15:8 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

— — — BRG<12:8>

7:0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

BRG<7:0>

凡例 :

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知

bit 31-13 未実装 :「0」を書き込み、読み出しは無視

bit 12-0 BRG<12:0>:baud レート分周比ビット

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-15

Page 16: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.3 動作モードSPI モジュールは下記の動作モードを備えます。

• 8/16/32 ビットデータ送信モード

• 8/16/32 ビットデータ受信モード

• マスタモードとスレーブモード

• フレーム化 SPI モード

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

23.3.1 8/16/32 ビット動作

SPI モジュールは SPI バスを介して 3 通りのデータ幅で送受信できます。データ幅の選択によって SPI データの最小長さが決まります。例えば、32 ビットのデータ幅を選択した場合、全ての送受信は 32 ビット値で実行されます。CPU からの全ての読み / 書きも 32 ビット値で実行されます。従って、最大限のデータスループットが得られるよう、アプリケーション ソフト ウェアで適切なデータ幅を選択する必要があります。 2 つの制御ビット MODE32 と MODE16 (SPIxCON<11:10>) は動作モードを定義します。これ らのビットは MODE<32,16> と表記される場合もあります。実行中に動作モードを変更するには、SP モジュールがアイドル状態 ( トランザクションを一切実行していない状態 ) である事が必要です。SPI モジュールを OFF (SPIxCON<15> = 0) にしてから動作モードを変更した場合、 モジュールを再度 ON にした時点で新しいモードが有効になります。

また、これに関連して下記の点に注意が必要です。

• トランザクションの実行中に MODE<32,16> ビットを変更してはならない • SPIxSR から最初にシフトアウトされるビットは動作モードに応じて下記のように異なる

- 8 ビットモード : bit 7 - 16 ビットモード : bit 15- 32 ビットモード : bit 31

• いずれのモードでもデータは SPIxSR の bit 0 にシフトインされる

• SCKx ピンにおけるクロックパルス数も動作モードに応じて下記のように異なる

- 8 ビットモード : 8 クロック

- 16 ビットモード : 16 クロック

- 32 ビットモード : 32 クロック

23.3.2 バッファモード

SPI は標準バッファモードと拡張バッファモードを備えます。

23.3.2.1 標準バッファモード

SPI データ受信 / 送信バッファ(SPIxBUF) レジスタは、実際には 2 つの内部レジスタ ( 送信バッファレジスタ (SPIxTXB) と受信バッファレジスタ (SPIxRXB)) により構成されます。これら 2 つの単方向レジスタは SPIxBUF の SFR アドレスを共有します。

バイト /ワードの受信が完了すると、受信データはSPIxSRからSPIxRXBに転送され、SPIxRBFフラグがセットされます。SPIxRBF ビットは、ソフトウェアが SPIxBUF バッファを読み出すとクリアされます。 ソフトウェアが SPIxBUF にデータを書き込むと、そのデータは SPIxTXB に転送され、SPIxTBFビットがハードウェアによってセットされます。SPIxTBF フラグは、データが SPIxSR から送信されるとクリアされます。

SPI モジュールは、送信および受信動作をダブル バッファリングする事により、バックグラウ ンドで連続的にデータを転送できます。SPIxSR では送信と受信が同時に発生します。

Note 1: フレーム化 SPI モードでは SDIx、SDOx、SCKx、SSx ピンを全て使います。

2: スレーブ選択機能を使う場合も、上記の 4 本のピンを全て使います。

3: 標準 SPI モードで CKE = 1に設定した場合、スレーブ選択機能を必ず有効にして 使う必要があります。従って、この場合も上記の 4 本のピンを全て使います。

4: 標準 SPI モードで DISSDO = 1に設定し、スレーブ選択機能を有効にしない場合、 2 本のピン (SDIx と SCKx) だけを使います。

5: その他の全ての条件では 3 本のピン (SDIx、SDOx、SCKx) を使います。

Note: 一部のデバイスだけが拡張バッファモードを備えます。詳細は各デバイスのデータシートを参照してください。

DS61106G_JP - p. 23-16 © 2013 Microchip Technology Inc.

Page 17: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.3.2.2 拡張バッファモード

SPI 制御 (SPIxCON<16>) レジスタの拡張バッファ イネーブル (ENHBUF) ビットをセットする と、拡張バッファモードが有効になります。

拡張バッファモードでは、2 つの 128 ビット FIFO バッファを送信バッファ (SPIxTXB) と受信バッファ (SPIxRXB) として使います。受信および送信 FIFO には SPIxBUF を介してアクセスできます。SPISR バッファでのデータ送受信方法は標準バッファモードと同じです。FIFO の深さは、SPI 制御 (SPIxCON<11:10>) レジスタの 32/16 ビット通信選択 (MODE<32,16>) ビットで選択したデータ幅によって決まります。MODE フィールドで 32 ビットデータ幅を選択した場合の FIFO の深さは 4 段、16 ビットデータ幅を選択した場合は 8 段、8 ビットデータ幅を選択した場合は 16 段です。 送信 FIFO バッファ内の全てのエレメントにデータが格納されると ( バッファがフルになると )、SPITBF ステータスビットがセットされます。このビットは、1 つまたは複数のエレメントが空き状態になるとクリアされます。受信 FIFO バッファ内の全てのエレメントにデータが格納されると ( バッファがフルになると )、SPIRBF ステータスビットがセットされます。このビットは、ソフトウェアが SPIxBUF バッファを読み出すとクリアされます。

送信 FIFO バッファ内の全てのエレメントが空き状態になると ( バッファがエンプティになると )、SPITBE ステータスビットがセットされます。それ以外の場合、このビットはクリアされます。受信 FIFO バッファ内の全てのエレメントが空き状態になると ( バッファがエンプティになると )、SPIRBE ビットがセットされます。それ以外の場合、このビットはクリアされます。シフトレジスタ エンプティ (SRMT) ビットは、拡張バッファモードにおいてのみ効力を持 ち、シフトレジスタがエンプティになるとセットされ、それ以外の場合はクリアされます。

受信 FIFO 内の空きエレメントの読み出しまたは送信 FIFO 内のデータ格納済みエレメントへの上書きに対するアンダーラン /オーバーフロー保護措置は備えていません。しかし、SPIxSTATレジスタの送信アンダーラン ステータスビット (SPITUR)および受信オーバーフロー ステータ スビット (SPIROV) をその他のステータスビットと一緒に監視する事ができます。

SPI ステータス (SPIxSTAT<28:24>) レジスタ内の受信バッファ エレメント カウントビット (RXBUFELM<4:0>) は、受信 FIFO 内の未読み出しエレメントの数を示します。SPI ステータス (SPIxSTAT<20:16>)レジスタ内の送信バッファ エレメント カウントビット (TXBUFELM<4:0>) は、送信 FIFO 内の未送信エレメントの数を示します。

23.3.3 マスタモードとスレーブモード

図 23-8: SPI マスタ / スレーブ接続図

Serial Receive Buffer(SPIxRXB)

Shift Register(SPIxSR)

LSbMSb

SDIx

SDOx

PROCESSOR 2

SCKx

SSx(1)

Serial Transmit Buffer(SPIxTXB)

Serial Receive Buffer(SPIxRXB)(2)

Shift Register(SPIxSR)

MSb LSb

SDOx

SDIx

PIC32

Serial Clock

SSEN (SPIxCON<7>)=1 andMSTEN (SPIxCON<5>)=0

Note 1: スレーブモード動作では SSx ピンを必ずしも使う必要はありません。

2: ユーザは送信データを SPIxBUF に書き込み、受信データを SPIxBUF から読み出す必要あります。SPIxTXB お

よび SPIxRXB レジスタは共に SPIxBUF のメモリアドレスを共有します。

GPIO/SSx

SCKx

Serial Transmit Buffer(SPIxTXB)(2)

MSTEN (SPIxCON<5>)=1

SPI Buffer(SPIxBUF)

SPI Buffer(SPIxBUF)

[SPI Master] [SPI Slave]

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-17

Page 18: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.3.3.1 マスタモード動作

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

1. 対応する IECx レジスタで SPI 割り込みを無効にする。

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

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

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

5. SPI 割り込みを使わない場合、このステップを飛ばしてステップ 6 に進む。SPI 割り込みを使うなら下記を行う。

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

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

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

6. baud レートレジスタ (SPIxBRG) を設定する。

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

8. SPIxCON レジスタに適切な値を書き込み、MSTEN ビット (SPIxCON<5>) を「1」にセットする。

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

10. 送信データを SPIxBUF レジスタに書き込む。データを SPIxBUF レジスタに書き込むと送信 ( および受信 ) がただちに始まる。

マスタモードでは、PBCLK を分周してシリアルクロックとして使います。分周比は SPIxBRGレジスタの設定に基づきます。シリアルクロックは SCKx ピンを介してスレーブデバイスへ出力します。クロックパルスは送信すべきデータが存在する場合にのみ生成します。例外としてフレーム化モードではクロックを常時生成します。詳細は 23.3.7「SPI マスタモードのクロック周波数」を参照してください。

マスタモードで SPI 制御レジスタ (SPIxCON<28>) のマスタモード スレーブ選択イネーブル (MSSEN) ビットをセットすると、スレーブ選択信号 (SS) を自動的に駆動できます。このビットをクリアすると、マスタモードでのスレーブ選択信号サポートは無効になります。FRMPOLビット (SPIxCON<29>) はマスタモードでのスレーブ選択信号の極性を指定します。

MSSEN ビットを備えないデバイスでは、非フレーム化 SPI モードでのスレーブ選択信号は、ソフトウェア制御の下に SSx ピンまたは他の汎用 I/O ピンを使って生成する必要があります。

CKP (SPIxCON<6>) および CKE (SPIxCON<8>) ビットは、クロックのどちらのエッジでデー タ送信が発生するのかを指定します。

送信するデータは SPIxBUF レジスタに書き込み、受信したデータは SPIxBUF レジスタから読み出します。

マスタモードにおける SPI モジュールの動作は以下の通りです。

1. モジュールをマスタモード動作向けに設定して有効にすると、送信データが SPIxBUF レジスタに書き込まれ、SPITBE ビット (SPIxSTAT<3>) がクリアされる。

2. SPIxTXB の内容がシフトレジスタ (SPIxSR) に転送され ( 図 23-8 参照 )、モジュールは SPITBE ビットをセットする。

3. 連続した 8/16/32 発のクロックパルスにより、送信データの 8/16/32 ビットが SPIxSR からSDOx ピンへシフトアウトされ、同時に SDIx ピン上のデータが SPIxSR へシフトインされる。

Note: モードをスレーブからマスタに変更する場合、あらかじめ SPI デバイスを OFF にしておく必要があります。 ( スレーブ選択モードを使う場合、SSx ピンまたは別の GPIO ピンを使ってスレーブの SSx 入力を制御します。このピンはソフトウェアで制御する必要があります )

Note: MSSEN ビットは一部のデバイスだけが備えます。詳細は各デバイスのデータシートを参照してください。SPI フレーム化モードを有効 (FRMEN = 1) にしている場 合、このビットをセットしないでください。

Note: CKE または CKP ビットを変更する場合、あらかじめ SPI デバイスを OFF にしておく必要があります。そうしないと、デバイスの挙動は保証されません。

DS61106G_JP - p. 23-18 © 2013 Microchip Technology Inc.

Page 19: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

4. 転送が完了すると下記が発生する。

a) SPIxRXIF 割り込みフラグがセットされる。SPI 割り込みを有効にするには SPIxRXIE割り込みイネーブルビットをセットする必要がある。SPIxRXIF フラグビットはハードウェアで自動的にクリアされない。

b) 送信および受信動作が完了すると、SPIxSR の内容が SPIxRXB に転送される。

c) モジュールは SPIRBF ビット (SPIxSTAT<0>) をセットし、受信バッファがフルである事を示す。ユーザコードが SPIxBUF を読み出すと、ハードウェアが SPIRBF ビットをクリアする。拡張バッファモードの場合、SPIxRXB FIFO バッファが完全にエン プティになると SPIRBE ビット (SPIxSTAT<5>) がセットされる。このビットは、バッファがエンプティではなくなるとクリアされる。

5. SPIモジュールがSPIxSRからSPIxRXBにデータを転送しようとした時にSPIRBFビットがセットされていると(受信バッファがフルだと)、モジュールはSPIROVビット(SPIxSTAT<6>)をセットしてオーバーフロー条件が発生した事を示す。

6. SPITBE ビット (SPIxSTAT<3>) がセットされていれば、ユーザ ソフトウェアはいつでも送 信データを SPIxBUF に書き込める。SPIxSR が先に書き込まれたデータをシフトアウトしている間に SPIxBUF に次のデータを書き込めるため、データは連続的に送信できる。拡張バッファモードの場合、SPIxTXB FIFO バッファが完全にフルになると SPITBF ビット (SPIxSTAT<1>) がセットされる。このビットは、バッファがフルではなくなるとクリアされる。

例 23-1: 16 ビット SPI マスタモードの初期化コード

Note: ユーザ ソフトウェアで SPIxSR レジスタに直接書き込む事はできません。SPIxSR レジスタへの書き込みは、常に SPIxBUF レジスタを経由する必要があります。

/*The following code example will initialize the SPI1 in Master mode.It assumes that none of the SPI1 input pins are shared with an analog input.If so, the

AD1PCFG and corresponding TRIS registers have to be properly configured.*/intrData;

IEC0CLR=0x03800000; // disable all interruptsSPI1CON = 0; // Stops and resets the SPI1. rData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL=3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interrupts

SPI1BRG=0x1; // use FPB/4 clock frequencySPI1STATCLR=0x40; // clear the OverflowSPI1CON=0x8220; // SPI ON, 8 bits transfer, SMP=1, Master mode

// from now on, the device is ready to transmit and receive dataSPI1BUF=’A’; // transmit an A character

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-19

Page 20: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

図 23-9: 8 ビットモードでの SPI マスタモード動作 (MODE32 = 0, MODE16 = 0)

SCKx(CKP=0

SCKx(CKP=1

SCKx(CKP=0

SCKx(CKP=1

4 Clock modes

InputSample(2)

InputSample

SDIx(2)

bit7 bit0

SDOx bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

bit7 bit0

SDIx

SPIxRXIF

(SMP=1)

(SMP=0)

(SMP=1)

CKE=1)

CKE=0)

CKE=1)

CKE=0)

(SMP=0)

User writesto SPIxBUF

SDOx bit 7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

(CKE=0)

(CKE=1)

approximately 2 sysclk latency to setSPIxRXIF flag bit

Note 1: この図には 4 種類の SPI クロックモードにおける CKP (SPIxCON<6>) ビットと CKE (SPIxCON<8>) ビットの

機能を示しています。実際には、この中の 1 つのモードだけを選択します。

2: 説明のため、SDI と入力サンプルは、 SMP ビット (SPIxCON<9>) が「1」の場合と「0」の場合の両方を記載し

ています。実際には、どちらか一方の SMP ビット設定を選択します。

3: 未完了の送信が存在しなければ、ユーザ アプリケーションが SPIxBUF にデータを書き込むと、ただちに SPIxTXB の内容が SPIxSR に転送されます。

4: 図は 8 ビットモードでの動作を示しています。16 ビットおよび 32 ビットモードの動作も同様です。

SPIxSR movedinto SPIxRXB

user reads SPIxBUF

(clock outputat the SCKx pin in Master mode)(1)

(SPIxSTAT<0>)

SPITBE

SPIxTXB to SPIxSR(3)

User writes new dataduring transmission

SPIRBF

Two modesavailable forSMP controlbit(4)

SSx

DS61106G_JP - p. 23-20 © 2013 Microchip Technology Inc.

Page 21: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.3.3.2 スレーブモード動作

SPI モジュールをスレーブモード動作向けに設定する手順は以下の通りです。

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

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

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

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

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

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

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

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

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

7. SPIxCON レジスタに適切な値を書き込み、MSTEN ビット (SPIxCON<5>) を「0」にクリアする。

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

9. マスタがシリアルクロックの供給を開始すると、送信 ( および受信 ) がただちに始まる。

スレーブモードでは、外部から SCKx ピンに供給されるクロックパルスに従ってデータを送受信します。CKP ビット (SPIxCON<6>) と CKE ビット (SPIxCON<8>) は、クロックのどちらのエッジでデータ送信が発生するのかを指定します。

送信するデータは SPIxBUF レジスタに書き込み、受信したデータは SPIxBUF レジスタから読み出します。

拡張バッファモードを含むモジュールのその他の動作はマスタモードと同じです。

23.3.3.2.1 スレーブモードの追加機能

スレーブモードは下記の追加機能を備えます。

• スレーブ選択同期

SSx ピンを使う事で同期スレーブモードが可能になります。スレーブモードで SSEN ビット(SPIxCON<7>) をセットすると、SSx ピンが LOW 状態に駆動されている場合にのみ送受信が有効になります。SSx ピンを入力として機能させる必要があるため、このピンを使ってポート出力または他の周辺モジュール出力を駆動しない事が必要です。SSEN ビットをセットした状態で SSx ピンが HIGH に駆動されると、モジュールが送信の途中であっても SDOxピンは駆動されなくなり、3 ステートになります。中止された送信は、再び SSx ピンが LOWに駆動された時に、SPIxTXB レジスタで保持されていたデータを使って再試行されます。SSEN ビットをセットしなければ、SSx ピンはスレーブモードのモジュール動作に影響しません。

• SPITBE ステータスフラグの動作

スレーブモードでは、SPITBEビット (SPIxSTAT<3>)の機能がマスタモードとは異なります。スレーブモード動作の各種設定に応じて SPITBE は下記のように機能します。

- SSEN (SPIxCON<7>) がクリアされている場合、ユーザコードが SPIxBUF にデータ を書き込むと SPITBE はクリアされます。このビットは、モジュールが SPIxTXB の内容を SPIxSR に転送するとセットされます。これはマスタモードにおける SPITBEビットの機能と同様です。

- SSEN がセットされている場合、やはりユーザコードが SPIxBUF にデータを書き込むと SPITBE はクリアされますが、SPIx モジュールがデータ送信を完了するまでセットされません。このため、SSx ピンが HIGH に遷移して中止された送信を後で再試行できます。つまり、各データワードは全てのビットがレシーバへ送信されるまでSPIxTXB で保持されるという事です。

Note: モードをマスタからスレーブに切り換えるには、SPIモジュールをあらかじめOFFにしておく必要があります。

Note: フレーム化モードで動作する場合、スレーブ選択は使えません。

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-21

Page 22: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

例 23-2: 16 ビット SPI スレーブモードの初期化コード

図 23-10: 8 ビットモードでの SPI スレーブモード動作 ( スレーブ選択ピンは無効、MODE32 = 0、MODE16 = 0、SSEN = 0)

/*The following code example will initialize the SPI1 in Slave mode.It assumes that none of the SPI1 input pins are shared with an analog input.If so, the

AD1PCFG and corresponding TRIS registers have to be properly configured.*/int rData;

IEC0CLR=0x03800000; // disable all interruptsSPI1CON = 0; // Stops and resets the SPI1. rData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL=3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interrupts

SPI1STATCLR=0x40; // clear the OverflowSPI1CON=0x8000; // SPI ON, 8 bits transfer, Slave mode

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

SCKxInput(1)

(CKP=1

SCKxInput(1)

(CKP=0

InputSample

SDIxInput

bit7 bit0

SDOx bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

SPIxRXIF

(SMP=0)

CKE=0)

CKE=0)

(SMP=0)

User writes toSPIxBUF(2)

SPIxSRtoSPIxRXB

SPITBE

SPIRBF

Output

Note 1: この図には 4 種類の SPI クロックモードにおける CKP (SPIxCON<6>) ビットと CKE (SPIxCON<8>) ビットの機

能を示しています。モジュールの動作には、CKP ビットと CKE ビットの任意の組み合わせ ( 全部で 4 通り ) のいずれかを選択できます。

2: 未完了または実行中の送信が存在しなければ、ユーザ アプリケーションが SPIxBUF にデータを書き込むとただ

ちに SPIxBUF の内容が SPIxSR に転送されます。

3: 図には 8 ビットモードでの動作を示しています。16 ビットおよび 32 ビットモードの動作も同様です。

Approximately2SYSCLKlatencytosetSPIxRXIFflagbit

(3)

DS61106G_JP - p. 23-22 © 2013 Microchip Technology Inc.

Page 23: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

図 23-11: 8 ビットモードでの SPI スレーブモード動作 ( スレーブ選択ピンは有効、MODE32 = 0、MODE16 = 0、SSEN = 1)

SCKx(CKP=1

SCKx(CKP=0

InputSample

SDIx

bit7 bit0

SDOx bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

SPIxRXIF

(SMP=0)

CKE=0)

CKE=0)

(SMP=0)

User Writes

SPIxBUF

SPIxSRtoSPIxBUF

SSx(1)

Note 1: SSEN (SPIxCON1<7>) ビットを「 1」にセットした場合、スレーブモードでの送受信を有効にするには SSx ピ

ンを LOW に駆動する必要があります。

2: 全てのビットが送信されるまでSPITBE (SPIxSTAT<3>)はセットされず、送信データはSPIxTXBで保持されます。

3: 図には 8 ビットモードでの動作を示しています。16 ビットおよび 32 ビットモードの動作も同様です。

SPIRBF

~2SYSCLKlatency

SPITBE(2)

SPIxBUF to SPIxSR

to

(3)

L

SPIxBUFUserReads

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-23

Page 24: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.3.4 SPI エラー処理

新しいデータワードがシフトレジスタ(SPIxSR)にシフトインされた時点で、ユーザ ソフトウェ アが受信レジスタ (SPIxRXB) に先に書き込まれた内容を読み出し終えていない場合、SPIROVビット (SPIxSTAT<6>) がセットされます。この場合、モジュールは新しく受信したデータをSPIxSR から SPIxRXB に転送しません。SPIROV ビットがクリアされるまで、後続のデータ受信は無効になります。モジュールは SPIROV ビットを自動的にクリアしないため、ユーザ ソ フトウェアでクリアする必要があります。

23.3.5 SPIx 受信専用動作

DISSDO 制御ビット (SPIxCON<12>) をセットすると、SDOx ピンでの送信が無効になります。これを使って SPIx モジュールを受信専用動作モードに設定できます。DISSDO ビットをセットすると、SDOx ピンは対応するポート機能により制御されます。

DISSDO ビットの機能は全ての SPI 動作モードで使えます。

23.3.6 フレーム化 SPI モード

SPI モジュールは、マスタおよびスレーブのどちらの動作モードでもごく基本的なフレーム化SPI プロトコルをサポートします。SPI モジュールは、フレーム化 SPI モードをサポートする下記の機能を備えます。

• フレーム化 SPI モードは FRMEN 制御ビット (SPIxCON<31>) で有効にします。これを有効にした場合、フレーム同期パルスの入力または出力ピンとして SSx ピンを使います。SSEN(SPIxCON<7>) の状態は無視されます。

• FRMSYNC 制御ビット (SPIxCON<30>) は、SSx ピンの方向 ( 入力または出力 ) を指定しま す。この設定により、そのモジュールがフレーム同期パルスを受信するのか生成するのかが決まります。

• FRMPOL 制御ビット (SPIxCON<29>) は、1 SPI クロックサイクルを決めるフレーム同期パ ルスの極性を指定します。

• FRMSYPW 制御ビット (SPIxCON<27>) をセットすると、フレーム同期パルス幅を 1 キャラクタに設定できます。

• FRMCNT<2:0> 制御ビット (SPIxCON<26:24>) は、1 フレーム同期パルスあたりの送信データ キャラクタ数を指定します。

SPI モジュールは下記のフレーム化 SPI モードをサポートします。

• フレーム化マスタモード

SPI モジュールはフレーム同期パルスを生成し、SSx ピンを使ってこのパルスを他のデバイスに供給します。

• フレーム化スレーブモード

SPI モジュールは SSx ピンを介して外部から供給されるフレーム同期パルスを使います。

フレーム化 SPI モードは、フレーム化しない通常のマスタおよびスレーブモードと組み合わせて使えます。従って、下記のフレーム化 SPI 構成が可能です。

• SPI マスタモードとフレームマスタ モード

• SPI マスタモードとフレームスレーブ モード

• SPI スレーブモードとフレームマスタ モード

• SPI スレーブモードとフレームスレーブ モード

これら 4 通りのモードにより、SPIx モジュールでどのクロック ( シリアルクロック、フレーム 化同期パルス ) を生成するかが決まります。

ENHBUF ビット (SPIxCON<16>) では、フレーム化 SPI モードで使うバッファモード ( 標準または拡張 ) を選択できます。

また、SPI モジュールをフレーム化 SPI モードで使うと、外部のオーディオ DAC/ADC およびコーデックデバイスに接続できます。

Note: 一部のデバイスは FRMSYPW ビットを備えていません。詳細は各デバイスのデータシートを参照してください。

DS61106G_JP - p. 23-24 © 2013 Microchip Technology Inc.

Page 25: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

図 23-12: SPI マスタ / フレームマスタ の接続図

23.3.6.1 フレーム化 SPI モードにおける SCKx ピンの動作

FRMEN (SPIxCON<31>) = 1 かつ MSTEN (SPIxCON<5>) = 1 の場合、SCKx ピンは出力とし て機能し、フリーランニングの SPI クロックを出力します。

FRMEN = 1かつ MSTEN = 0の場合、SCKx ピンは入力として機能します。SCKx ピンにはフ リーランニングの源クロックを供給する必要があります。

クロックの極性は CKP ビット (SPIxCON<6>) で選択します。フレーム化 SPI モードでは CKEビット (SPIxCON<8>) を使いません。

CKE が「0」である場合、フレーム同期パルス出力と SDOx データ出力の状態は、SCKx ピンのクロックパルス立ち上がりエッジに同期して変化します。SDIx 入力ピンにおける入力データは、シリアルクロック立ち下がりエッジに同期してサンプリングされます。

CKP が「1」である場合、フレーム同期パルス出力と SDOx データ出力の状態は、SCKx ピンのクロックパルス立ち下がりエッジに同期して変化します。SDIx 入力ピンにおける入力データは、シリアルクロック立ち上がりエッジに同期してサンプリングされます。

23.3.6.2 フレーム化 SPI モードにおける SPI バッファの動作

FRMSYNC (SPIxCON<30>) = 0の場合、SPIx モジュールはフレームマスタ モードで動作しま す。このモードでは、ユーザ ソフトウェアが送信データを SPIxBUF に書き込むと ( すなわち SPIxTXB レジスタに送信データが書き込まれると )、モジュールがフレーム同期パルスの生成を開始します。フレーム同期パルスの終端で SPIxTXB の内容が SPIxSR に転送され、データの送受信が始まります。

FRMSYNC = 1の場合、モジュールはフレームスレーブ モードで動作します。このモードでは、 外部ソースがフレーム同期パルスを生成します。モジュールがフレーム同期パルスを検出すると、SPIxTXB レジスタの内容が SPIxSR に転送され、データ送受信が始まります。ユーザは、同期パルスを受信する前に SPIxBUF に適切な送信データを書き込む必要があります。

23.3.6.3 SPI マスタ / フレームマスタ モード

Serial Receive Buffer(SPIxRXB)(3)

Shift Register(SPIxSR)

MSb LSb

SDOx

SDIx

PIC32

Serial Receive Buffer(SPIxRXB)

Shift Register(SPIxSR)

LSbMSb

SDIx

SDOx

PROCESSOR 2

Serial Clock

Note 1: フレーム化 SPI モードでは、SSx ピンを使ってフレーム同期パルスを送信 / 受信します。

2: フレーム化 SPI モードは 4 本のピンの全てを使います ( つまり SSx ピンを必ず使います )。3: SPIxTXB および SPIxRXB レジスタは、共に SPIxBUF レジスタのメモリアドレスを共有します。

SCKx

SSxSSx

SCKx

Serial Transmit Buffer(SPIxTXB)(3)

Serial Transmit Buffer(SPIxTXB)

Frame SyncPulse(1,2)

SPI Buffer(SPIxBUF)

SPI Buffer(SPIxBUF)

[SPI Master, Frame Master] [SPI Slave, Frame Slave]

Note: フレーム同期パルスを受信すると、SPIxBUF にデータが書き込まれたかどうかに関係なく送信が始まります。書き込みを実行しなかった場合、ゼロが送信されます。

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-25

Page 26: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

このフレーム化 SPI モードを有効にするには、MSTEN ビット (SPIxCON<5>) と FRMEN ビット (SPIxCON<31>) を「1」にセットし、FRMSYNC ビット (SPIxCON<30>) を「0」にクリアします。このモードでは、モジュールが送信中かどうかに関係なく、シリアルクロックは SCKxピンで常時出力されます。SPIxBUF が書き込まれると、SCKx クロックの次の送信エッジでSSxピンがアクティブ状態(FRMPOLビット(SPIxCON<29>)で定義)に駆動されます。SSxピンは 1 SCKx クロックサイクル間 HIGH になります。モジュールは、SCKx の次の送信エッジで データの送信を開始します ( 図 23-13 参照 )。この動作モードにおける信号の方向を示した接続図を図 23-12 に示します。

図 23-13: SPI マスタ / フレームマスタ (MODE32 = 0、MODE16 = 1、SPIFE = 0、FRMPOL = 1)

23.3.6.4 SPI マスタ / フレームスレーブ モード

このフレーム化 SPI モードを有効にするには MSTEN ビット (SPIxCON<5>)、FRMEN ビット(SPIxCON<31>)、FRMSYNC ビット (SPIxCON<30>) を「1」にセットします。SSx ピンは入力として機能し、その状態は SPI クロックのサンプリング エッジに同期してサンプリングされ ます。このピンのアクティブ状態 (FRMPOL ビット (SPIxCON<29>) で定義 ) を検出すると、SPI クロックの次の送信エッジでデータを送信します ( 図 23-14 参照 )。送信が完了すると割り込みフラグ SPIxIF がセットされます。ユーザは、SSx ピンでアクティブ信号を受信する前に適切なデータを SPIxBUF に書き込む必要があります。この動作モードにおける信号の方向を示した接続図を図 23-15 に示します。

図 23-14: SPI マスタ / フレームスレーブ (MODE32 = 0、MODE16 = 1、SPIFE = 0、FRMPOL = 1)

SCKx

SSx

SDOx

(CKP=0)

bit15 bit14 bit13 bit12

SDIx

bit15 bit14 bit13 bit12

Write to SPIxBUF Receive Samples at SDIxPulse Generated at SSx

SCKx(CKP=1)

Receive Samples at SDIx

SCK

FSYNC

SDO

(CKP=0)

bit15 bit14 bit13 bit12

SDI

Sample SSx Pinfor Frame Sync Pulse

bit15 bit14 bit13 bit12

Write toSPIxBUF

SCKx(CKP=1)

DS61106G_JP - p. 23-26 © 2013 Microchip Technology Inc.

Page 27: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

図 23-15: SPI マスタ / フレームスレーブの接続図

23.3.6.5 SPI スレーブ / フレームマスタ モード

このフレーム化 SPI モードを有効にするには MSTEN ビット (SPIxCON<5>) を「0」にクリアし、FRMEN ビット (SPIxCON<31>) を「1」にセットし、FRMSYNC ビット (SPIxCON<30>)を「0」にクリアします。スレーブモードでは、SPI クロックは外部から常時供給されます。FRMSYNC ビットをクリアすると SSx ピンは出力として機能します。従って、SPIBUF が書き込まれると、モジュールは SPI クロックの次の送信エッジで SSx ピンをアクティブ状態(FRMPOL ビット (SPIxCON<29>) で定義 ) に駆動します。SSx ピンは 1 SPI クロックサイクル 間アクティブ状態に駆動されます。データ送信は次の SPI クロック送信エッジで始まります。この動作モードにおける信号の方向を示した接続図を図 23-16 に示します。

図 23-16: SPI スレーブ / フレームマスタの接続図

SDOx

SDIx

Serial Clock

Note 1: フレーム化 SPI モードでは、SSx ピンを使ってフレーム同期パルスを送受信します。

2: フレーム化 SPI モードは 4 本のピンの全てを使います ( つまり SSx ピンを必ず使います )。

SSx

SCKx

Frame Sync

SDIx

SDOx

SSx

SCKx

PIC32[SPI Master, Frame Slave]

PROCESSOR2[SPI Slave, Frame Master]

Pulse(1,2)

Serial Clock

Note 1: フレーム化 SPI モードでは、SSx ピンを使ってフレーム同期パルスを送受信します。

2: フレーム化 SPI モードは 4 本のピンの全てを使います ( つまり SSx ピンを必ず使います )。

SDOx

SDIx

SSx

SCKx

PIC32[SPI Slave, Frame Master]

SDIx

SDOx

SSx

SCKx

PROCESSOR2[SPI Master, Frame Slave]

Frame SyncPulse(1,2)

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-27

Page 28: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.3.6.6 SPI スレーブ / フレームスレーブ モード

このフレーム化 SPI モードを有効にするには MSTEN ビット (SPIxCON<5>) を「0」にクリアし、FRMEN ビット (SPIxCON<31>) を「1」にセットし、FRMSYNC ビット (SPIxCON<30>)を「1」にクリアします。従って、SCKx ピンと SSx ピンはどちらも入力として機能します。SSxピンの状態はSPIクロックのサンプルエッジでサンプリングされます。SSxピンでアクティブ状態 (FRMOPOL ビット (SPIxCON<29>) で定義 ) を検出すると、SCKx の次の送信エッジでデータを送信します。この動作モードにおける信号の方向を示した接続図を図 23-17 に示します。

図 23-17: SPI スレーブ / フレームスレーブの接続図

Serial Clock

Note 1: フレーム化 SPI モードでは、SSx ピンを使ってフレーム同期パルスを送受信します。

2: フレーム化 SPI モードは 4 本のピンの全てを使います ( つまり SSx ピンを必ず使います )。3: スレーブデバイスとしてフレーム化 SPI モードを使う場合、スレーブ選択は使えません。

SDOx

SDIx

SSx

SCKx

PIC32[SPI Slave, Frame Slave]

SDIx

SDOx

SSx

SCKx

PROCESSOR2[SPI Master, Frame Master]

Frame SyncPulse((1,2,3)

DS61106G_JP - p. 23-28 © 2013 Microchip Technology Inc.

Page 29: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.3.7 SPI マスタモードのクロック周波数

SPI モジュールでは、SPIxBRG レジスタを使って baud レートの生成を柔軟に設定できます。baud レートは読み書き可能な SPIxBRG レジスタを使って指定します。SPI に供給される周辺モジュール用クロック (PBCLK) は、CPU コアクロックを分周したクロックです。このクロックは、SPIxBRG. レジスタに書き込まれた値に基づいてさらに分周されます。PBCLK を分周して生成される SCKx クロックのデューティ比は 50% です。このクロックは SCKx ピンを介して外部デバイスに供給されます。

式 23-1 に、SPIxBRG レジスタの設定と SCKx クロック周波数の関係を示します。

式 23-1:

設定可能な最大 baud レートは FPB/2 (SPIxBRG = 0)、最小 baud レートは FPB/1024 です。

表 23-4 に、SPI クロック周波数 (kHz) の設定例を示します。

Note: 非フレーム化 SPI モードでは、SCKx クロックはフリーランニングではありません。つまり SPIxBUF にデータが書き込まれた時にだけ 8/16/32 個のパルスを生成します。しかし、フレーム化モードではクロックを常時生成します。

表 23-4: SCKx 周波数の設定例

SPIxBRG の

設定0 15 31 63 85 127 255 511

FPB = 80 MHz40.00 MHz

2.5 MHz

1.25 kHz

625 kHz

465.11 kHz

312.5 kHz

156.25 kHz

78.13 kHz

FPB = 72 MHz36.00 MHz

2.25 MHz

1.13 kHz

562.5 kHz

418.60 kHz

281.25 kHz

140.63 kHz

70.31 kHz

FPB = 60 MHz30.00 MHz

1.88 MHz

937.5 kHz

468.75 kHz

348.83 kHz

234.38 kHz

117.19 kHz

58.59 kHz

FPB = 50 MHz25.00 MHz

1.56 MHz

781.25 kHz

390.63 kHz

290.7 kHz

195.31 kHz

97.66 kHz

48.83 kHz

FPB = 40 MHz20.00 MHz

1.25 MHz

625.00 kHz

312.50 kHz

232.56 kHz

156.25 kHz

78.13 kHz

39.06 kHz

FPB = 25 MHz12.50 MHz

781.25 kHz

390.63 kHz

195.31 kHz

145.35 kHz

97.66 kHz

48.83 kHz

24.41 kHz

FPB = 20 MHz10.00 MHz

625.00 kHz

312.50 kHz

156.25 kHz

116.28 kHz

78.13 kHz

39.06 kHz

19.53 kHz

FPB = 10 MHz5.00 MHz

312.50 kHz

156.25 kHz

78.13 kHz

58.14 kHz

39.06 kHz

19.53 kHz

9.77 kHz

Note: 一部のクロックレートはサポートされません。詳細は、各デバイス データシート

内の「電気的特性」に記載している SPI タイミング仕様を参照してください。

FSCKFPB

2 SPIxBRG 1+ ----------------------------------------------=

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-29

Page 30: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.4 オーディオ プロトコル インターフェイス モードSPI モジュールを使うと、PIC32 マイクロコントローラを現存するほとんどのコーデック デバ イスに接続してオーディオ ソリューションを提供できます。SPI モジュールは、4 本の標準 I/O ピンを使ってオーディオ プロトコル機能をサポートします。オーディオ プロトコル インター フェイス モードには下記の 4 本のピンを使います。

• SDIx: サンプル デジタル オーディオデータ (ADCDAT) を受信するシリアルデータ入力

• SDOx: デジタル オーディオデータ (DACDAT) を送信するシリアルデータ出力

• SCKx: シリアルクロック ( ビットクロックとも呼ぶ ) (BCLK)

• SSx: 左 / 右チャンネル クロック (LRCK)

BCLK はモジュールの入出力データを駆動するために必要なクロックを提供し、LRCK はプロトコルモードに基づくフレームの同期を提供します。

一部のコーデックでは、シリアルクロック (SCK) を Baud/Bit クロック (BCLK) と呼びます。以下では、コーデックの命名規則に従って、信号 SSx を LRCK と表記します。SPI モジュールは、オーディオ プロトコル マスタモードとオーディオ プロトコル スレーブモードで動作でき ます。マスタモードのモジュールは SCKx ピンで BCLK を生成し、SSx ピンで LRCK を生成します。特定のデバイスでは、スレーブモードで動作する場合に、SPI モジュールはこれら 2 つのクロックをマスタモードで動作する I2S パートナーから受け取ります。

マスタモードの場合、SPI モジュールは各種の内部クロック源 ( プライマリ クロック、PBCLK、 USB クロック、FRC 等 ) からのマスタクロック (MCLK) を使って内部でクロックを生成できます。加えて、SPI モジュールはコーデック デバイスに MCLK を供給できます ( これは一般的な 要件です )。

オーディオ プロトコルモードを開始するには、最初に ON ビット (SPIxCON<15>) を「0」に クリアしてモジュールを無効にしておく必要があります。次に AUDEN ビット (SPIxCON2<7>)を「1」にセットし、最後に ON ビットを「1」にセットしてモジュールを再び有効にします。

モジュールをマスタモードに設定した場合、オーディオ プロトコルの開始から 1 SCK 周期以 内に SCK および LRCK パルスの前縁が出力されます。シリアルデータをシフトインまたはシフトアウトするタイミングは、AUDMOD<1:0> ビット (SPIxCON2<1:0>) で設定されているプロトコルモードによって決まります。送信 FIFO がエンプティであればゼロが送信されます。

スレーブモードの場合、LRCK パルスの前縁を検出するまで、モジュールは送信 FIFO の内容を送信せずに SDO でゼロを出力します。このエッジを検出すると、モジュールはデータの受信を始めます (SDI が無効にされていない場合 )。モジュールは FIFO がエンプティである限りゼロを送信し続けます。

スレーブモードでもマスタモードでも、SPI モジュールは起動時に送信 FIFO のアンダーランを生成しません。これにより、ソフトウェアは SPI と DMA をセットアップした後に SPI のオーディオ プロトコルを ON にし、次いでエラーを生じる事なく DMA を ON にできます。

送信 FIFO (SPIxBUF) への最初の書き込みが発生した時点で、SPI はアンダーランの検出と生 成を有効にします。DMA が有効になるまで受信 FIFO をエンプティ状態に保つために、DISSDIビット (SPIxCON<4>) は「1」にセットする必要があります。 DMA を有効にした後に DISSDI ビットを「0」にクリアして受信を開始します。

23.4.1 マスタモード

PIC32 をオーディオ プロトコル マスタモードに設定するには、MSTEN ビット (SPIxCON<5>) と AUDEN ビット (SPIxCON2<7>) を「1」にセットします。

マスタモードは下記の特性を持ちます。

• ONビット (SPIxCON<15>) = 1であれば、デバイスは SCKパルスと LRCKパルスを生成する

• 送信データの有無に関係なく、SPI モジュールは LRCK および SCK パルスを常時生成する

• 送信 FIFO がエンプティであっても、SPI モジュールは 1 SCK 周期以内に LRCK および SCK パルスの前縁を生成し、シリアルデータは常時シフトインおよびシフトアウトされる

図 23-18 に、マスタモードにおける標準的なマスタ - スレーブ接続を示します。

DS61106G_JP - p. 23-30 © 2013 Microchip Technology Inc.

Page 31: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

図 23-18: PIC32 がマスタとして動作し、内部でクロックを生成して BCLK と LRCK を出力する

23.4.2 スレーブモード

SPI モジュールをオーディオ プロトコル スレーブモードに設定するには、MSTEN ビット (SPIxCON<5>) を「0」にクリアし、AUDEN ビット (SPIxCON2<7>) を「1」にセットします。

スレーブモードは下記の特性を持ちます。

• ON ビット (SPIxCON<15>) = 1であれば、デバイスは SCK および LRCK パルスを受信する

• SSPI モジュールは、LRCK ( 左チャンネルの先頭エッジ ) を受信するまでデータをシフトア ウトせずに SDO でゼロを出力し、SDI にデータをシフトインしない

• DISSDI ビット (SPIxCON<4>)= 0であれば、モジュールは LRCK パルスの前縁を受信した時 点でデータ受信を始め、送信 FIFO がエンプティであってもシリアルデータを常時シフトアウトする

図 23-19 に、 オーディオ スレーブ インターフェイス モードの SPI モジュールとコーデック マ スタデバイス間の接続を示します。

図 23-19: コーデック デバイスがマスタとして動作し、外付け水晶振動子を使ってクロックを生成する

図 23-20 に、オーディオ スレーブ インターフェイス モードの SPI モジュールが参照クロック 出力機能を使ってマスタクロックをコーデック マスタデバイスに供給する場合の接続を示し ます。

図 23-20: コーデック デバイスがマスタとして動作し、PIC32 が参照クロック出力から MCLKを供給する

SCKx

SSx

SDIx

SDOx

BCLK

LRCK

ADCDAT

DACDAT

PIC32[SPI Master]

Codec[Slave]

InternalClock

SCKx

SSx

SDIx

SDOx

BCLK

LRCK

ADCDAT

DACDAT

PIC32[SPI Slave]

Codec[Master]

SCKx

SSx

SDIx

SDOx

BCLK

LRCK

ADCDAT

DACDAT

PIC32[SPI Slave]

Codec[Slave]

REFCLKO MCLKIN

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-31

Page 32: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.4.3 オーディオデータ長とフレーム長

コーデック デバイスは各種ワード長 (8/16/20/24/32 ビット ) のオーディオデータ サンプルを生 成するのに対し、PIC32 の SPI モジュールはデータ長が 16/24/32 ビットのオーディオ データ の送受信をサポートします。

表 23-5 に、MODE<32,16> ビット (SPIxCON<11:10>) の設定と可能な最大サンプル長およびフレーム長 (SSx の LRCK 周期 ) の関係を示します。

表 23-5: オーディオデータ長と LRCK 周期の関係

MODE<32,16> ビット (SPIxCON<11:10>) の値は下記のように機能します。

• 左 / 右チャンネルのデータ長とフレーム長を制御する

• 16 ビット サンプルモードでは 32/64 ビット フレーム長をサポートする

• 24/32 ビット サンプルモードでは 64 ビット フレーム長をサポートする

• FIFO の幅と深さを定義する ( 例 : 24 ビットデータの場合、FIFO は 32 ビット幅 x4 段 )• 選択したデータ長よりも長いデータは無視する

• 書き込まれたデータが選択したデータ長よりも短い場合、選択したデータ長の最上位バイト(MSB) が書き込まれた時点で FIFO ポインタが変化する

このデータを複数回の書き込み動作で送信 FIFO に書き込む場合、最下位から最上位に向かって順番に書き込む必要があります。

例えば、サンプルあたり 24 ビットのオーディオデータを 8 ビットずつ書き込む場合を想定します。表 23-5 によると、FIFO の幅は 32 ビットです。従って、各 FIFO サンプルの最上位 8 ビット (bit 31:24) は無視します。

bit 15:8 および 7:0 はどちらを先に SPIxBUF レジスタに書き込んでも構いませんが、bit 23:16 は最後に書き込む必要があります。なぜならば、最上位ビット (MSb、つまり 24 ビット目 ) が書き込まれた時点で送信バッファのポインタが変化するからです。

未使用バイトへのデータ書き込みは無視されます。未使用バイトのみに対するトランザクションも無視されます。従って、データが 32 ビット幅よりも小さい場合、アドレスオフセット0x0023 に対する 1 バイト書き込みは完全に無視され、FIFO のプッシュは発生しません。

23.4.4 フレーム /LRCK エラー

SPI モジュールは、デバッグ用にフレーム /LRCK エラー検出機能を備えています。チャンネルの開始タイミングを決める LRCKエッジがMODE<32,16>の設定に対応する適正なビット数よりも前に発生すると、フレーム /LRCK エラーが生成されます。

SPI モジュールは即座に FRMERR ビット (SPIxSTAT<12>) をセットし、データを SPIxSR レジスタから SPIxRXB レジスタへプッシュし、SPIxTXB レジスタから SPIxSR レジスタへポップします。モジュールのフレーム /LRCK 関連エラー検出機能を有効にするには、FRMERRENビット (SPIxCON2<12>) をセットします。

Note: 実際には、3 種類のフォーマット (16/24/32 ビット ) のいずれかを使って 32 ビット以下の任意長さを持つサンプルデータを送受信できます。

SPIxCON<11:10>データ長

(bit)FIFO 幅

(bit)

左 / 右チャ

ンネル サン

プル長 (bit)

拡張バッファFIFO深さ

(サンプル )

LRCK 周期

フレーム長(bit)MODE32 MODE16

0 0 16 16 8 32

0 1 16 16 32 8 64

1 1 24 32 32 4 64

1 0 32 32 32 4 64

Note: オーディオ プロトコルモードの場合、BCLK (SCKx ピン ) と LRCK (SSx ピン ) は フリーランニングです ( つまり常時生成されます )。通常、LRCK パルスの長さ(BCLK パルスの数 ) は一定です。いかなる場合も、SPI モジュールは新しいフレームエッジに再同期し、FRMERR ビットをセットします。非 PCM モードで動作中の SPI モジュールは、フレームが短すぎると短縮したデータを FIFO にプッシュします。

DS61106G_JP - p. 23-32 © 2013 Microchip Technology Inc.

Page 33: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.4.5 オーディオ プロトコルモード

SPI モジュールは、下記の 4 種類のオーディオ プロトコル モードをサポートし、これらのいず れかのモードで動作できます。

• I2S モード ( 一部のデバイスのみサポート、詳細はデバイス データシート参照 )

• 左寄せモード

• 右寄せモード

• PCM/DSP モード

これらのオーディオ プロトコルモードは、AUDMOD<1:0> ビット (SPIxCON2<1:0>) を設定す る事により有効にできます。これらのモードを選択する事で各種のコーデックと通信でき、SCK に同期した LRCK および SDI/SDO エッジのタイミングを制御できます。

データ送信に関しては、全てのプロトコルモードにおいて、最上位バイト (MSB) から最下位バイト (LSB) に向かって順番に送信します。データ長については 23.4.3「オーディオデータ長とフレーム長」に記載しています。LSb の送信後に余分な SCK 周期が存在する場合、フレームの終端までゼロを送信します。

スレーブモードの場合、BCLK (SCKx ピン ) に同期した LRCK (SSx ピン ) の周期 ( またはフ レーム長 ) に対する制約は、マスタモードに比べると大幅に緩やかです。マスタモードの場合、フレーム長はMODE<32,16>ビット (SPIxCON<11:10>)の設定に応じて32 BCLKまたは64 BCLK のどちらかです。しかしスレーブモードのフレーム長は 32 または 64 BCLK 以上にできます。 しかし、フレーム LRCK エッジを早期に受け取ると FRMERR ビット (SPIxSTAT<12>) がセットされます。

図 23-21 に、オーディオモードにおけるコーデックデバイスと SPI モジュール間の標準的な接続を示します。

図 23-21: オーディオ スレーブモードの SPI モジュール – マスタが BCLK と LRCK( またはWS) を生成

SCKx

SSx

SDIx

SDOx

BCLK

LRCK

ADCDAT

DACDAT

PIC32[SPI Slave]

Codec[Master]

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-33

Page 34: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.4.5.1 I2S モード

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 LSbLSb+1 MSb MSb-1 LSb+1 LSb

LEFT CHANNEL RIGHT CHANNEL

Transmit SampleLeft Channel LSb

SampleTransmitRight Channel LSb

DS61106G_JP - p. 23-34 © 2013 Microchip Technology Inc.

Page 35: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

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>) = 00b) AUDEN ビット (SPIxCON2<7>) = 1

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

a) MSTEN (SPIxCON<5>) = 0b) 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 interruptsSPI1CON = 0; // Stops and resets the SPI1.SPI1CON2 = 0; // Reset audio settings rData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interrupts

SPI1STATCLR=0x40; // clear the OverflowSPI1CON2=0x00000080; // I2S Mode, AUDEN = 1, AUDMON = 0SPI1CON =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.*/

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-35

Page 36: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

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 RateFPB

2 SPIxBRG 1+ ----------------------------------------------=

SPIxBRGFPB

2 Baud Rate --------------------------------- 1–=

SPIxBRG 40e62 256e3 ----------------------- 1 77.125=–=

40e62 77 1+ --------------------------- 40e6

156------------ 256410.25 bits per second= =

DS61106G_JP - p. 23-36 © 2013 Microchip Technology Inc.

Page 37: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

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

a) MSTEN (SPIxCON<5>) = 1b) 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 interruptsSPI1CON = 0; // Stops and resets the SPI1.SPI1CON2 = 0; // Reset audio settings SPI1BRG=0; // Reset Baud rate registerrData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interrupts

SPI1STATCLR=0x40; // clear the OverflowSPI1CON2=0x00000080; // I2S Mode, AUDEN = 1, AUDMON = 0SPI1BRG =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.*/

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-37

Page 38: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

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 LSbLSb+1 MSb MSb-1 LSb+1 LSb

LEFT CHANNEL RIGHT CHANNEL

Transmit Sample SampleTransmit

SSx (LRCK)

SCKx (BCLK)

SDOx/SDIx MSb LSb MSb LSb

LEFT CHANNEL RIGHT CHANNEL

Transmit Sample SampleTransmit

00 0 0

DS61106G_JP - p. 23-38 © 2013 Microchip Technology Inc.

Page 39: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

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 interruptsSPI1CON = 0; // Stops and resets the SPI1.SPI1CON2 = 0; // Reset audio settingsrData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interruptsSPI1STATCLR=0x40; // clear the OverflowSPI1CON2=0x00000081; // Left-Justified Mode, AUDEN = 1, AUDMON = 0SPI1CON =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.*/

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-39

Page 40: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

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 interruptsSPI1CON = 0; // Stops and resets the SPI1SPI1CON2 = 0; // Reset audio settingsSPI1BRG = 0;rData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interruptsSPI1STATCLR=0x40; // clear the OverflowSPI1CON2=0x00000081; // Left-Justified Mode, AUDEN = 1, AUDMON = 0SPI1BRG =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.*/

DS61106G_JP - p. 23-40 © 2013 Microchip Technology Inc.

Page 41: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.4.5.3 右寄せモード

右寄せモードの場合、SPI モジュールはオーディオ サンプルデータの LSb が最後のクロックサ イクルで転送されるよう MSb をシフトします。DISSDO ビット (SPIxCON<12>) を「0」に設定する事により、オーディオ サンプルデータに先行するビットを論理レベル「0」に駆動でき ます。DISSDO = 0の場合、モジュールは未使用ビットスロットを無視します。

• 必要な設定

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

- AUDMOD<1:0> (SPIxCON2<1:0>) = 10

- FRMPOL (SPIxCON<29>) = 1

- CKP (SPIxCON<6>) = 0

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

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

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

SSx (LRCK)

SCKx (BCLK)

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

LEFT CHANNEL RIGHT CHANNEL

Transmit Sample SampleTransmit

SSx (LRCK)

SCKx (BCLK)

SDOx/SDIx MSb LSb MSb LSb

LEFT CHANNEL RIGHT CHANNEL

Transmit Sample SampleTransmit

00 0 0

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-41

Page 42: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.4.5.3.1 右寄せオーディオ スレーブモードの動作

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

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

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

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

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

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

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

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

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

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

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

8. SPIxCON2 レジスタに適切な設定を書き込む。右寄せモードに設定するには、AUDMOD<1:0>ビット (SPIxCON2<1:0>) を「10」に設定し、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-7: 右寄せスレーブモード (16 ビット チャンネルデータ、32 ビットフレーム )/* The following code example will initialize the SPI1 Module in Right-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 interruptsSPI1CON=0; // Stops and resets the SPI1.SPI1CON2=0; // Reset audio settingsrData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interruptsSPI1STATCLR=0x40; // clear the OverflowSPI1CON2=0x00000082; // Right-Justified Mode, AUDEN = 1, AUDMON = 0SPI1CON=0x20008000; // Slave mode, SPI ON, CKP = 0, FRMPOL = 1,

// 16-bit audio data, 32 bits per frame // DISSDO = 0, transmit unused bit slots with logic level 0 // DISSDI = 0, receiver to ignore the unused bit slots

// 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.*/

DS61106G_JP - p. 23-42 © 2013 Microchip Technology Inc.

Page 43: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.4.5.3.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>)を「10」に設定し、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-8: 右寄せマスタモード (16 ビット チャンネルデータ、32 ビットフレーム )/* The following code example will initialize the SPI1 Module in Right-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 interruptsSPI1CON = 0; // Stops and resets the SPI1.SPI1CON2 = 0; // Reset audio settingsSPI1BRG=0;rData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL=3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interruptsSPI1STATCLR=0x40; // clear the OverflowSPI1CON2=0x00000082; // Right-Justified Mode, AUDEN =1, AUDMON=0SPI1BRG =0x4D; // (to generate 256 kbps sample rate, PBCLK @ 40 MHz)SPI1CON =0x20008020; // Master mode, SPI ON, CKP = 0, FRMPOL = 1, MSTN = 1

// 16-bit audio data, 32 bits per frame // DISSDO = 0, transmit unused bit slots with logic level 0 // DISSDI = 0, receiver to ignore the unused bit slots

// 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.*/

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-43

Page 44: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.4.5.4 PCM/DSP モード

PCM/DSP プロトコルモードは、特定のコーデックおよび DSP デバイスとの通信用に使います。このモードは、LRCK の挙動とオーディオデータの間隔を変更します。PCM/DSP モードの場合、LRCK は 1 ビット幅 ( つまり 1 SCK) またはオーディオデータと同じ幅 (16、24、32 ビット ) に設定できます。右チャンネルのオーディオデータは、左チャンネルデータの直後に続けてフレームに格納されます。デバイスがマスタである場合、フレーム長は 32 または 64 クロックです。

PCM/DSP モードの場合、トランスミッタは LRCK の遷移と同時または遷移後最初の SCK 送信エッジで左チャンネル オーディオデータのMSbを駆動します(SPIFEビット(SPIxCON<17>) 参照 )。トランスミッタは、左チャンネルの LSb の直後に右チャンネルの MSb を駆動します。

• 必要な設定

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

- AUDMOD<1:0> ビット (SPIxCON2<1:0>) = 11

16/24/32 ビット オーディオデータ転送のサンプル波形を図 23-27 と図 23-28 に示します。

図 23-27: PCM/DSP モード (16 ビット データ / チャンネルまたは 32 ビット データ / チャンネル )

図 23-28: PCM/DSP モード (16/24 ビットデータ、32 ビット チャンネル )

(FRMSYPW = 1)

SCKx (BCLK)

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

LEFT CHANNEL RIGHT CHANNEL

Transmit Sample SampleTransmit

SSx (LRCK)(FRMSYPW = 0)

LEFT CHANNEL RIGHT CHANNELSSx (LRCK)

(SPIFE = 1)

SSx (LRCK)

SCKx (BCLK)

SDOx/SDIx MSb LSb MSb LSb

LEFT CHANNEL RIGHT CHANNEL

Transmit Sample SampleTransmit

0 00

SSx (LRCK) LEFT CHANNEL RIGHT CHANNEL

(FRMSYPW = 1)

(FRMSYPW = 0)

0

(SPIFE = 0)

DS61106G_JP - p. 23-44 © 2013 Microchip Technology Inc.

Page 45: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.4.5.4.1 PCM/DSP オーディオ スレーブモードの動作

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

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 レジスタに適切な設定を書き込む。PCM/DSP モードに設定するには、AUDMOD<1:0>ビット (SPIxCON2<1:0>) を「11」に設定し、AUDEN ビット (SPIxCON2<7>) を「1」にセットしてオーディオ プロトコルを有効にする必要がある。

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

a) スレーブモード (MSTEN (SPIxCON<5>) = 0) に設定する。 b) 16 ビット オーディオ チャンネル データ (MODE<32,16> (SPIxCON<11:10>) = 0) に

設定する

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

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

例 23-9: PCM/DSP スレーブモード (16 ビット チャンネルデータ、32 ビットフレーム )/* The following code example will initialize the SPI1 Module in PCM/DSP Slave Mode.*//* It assumes that none of the SPI1 input pins are shared with an analog input.*/

unsigned int rData; IEC0CLR=0x03800000; // disable all interruptsSPI1CON = 0; // Stops and resets the SPI1.SPI1CON2 = 0; // Reset audio settingsrData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interruptsSPI1STATCLR=0x40; // clear the OverflowSPI1CON2=0x00000083; // PCM/DSP Slave Mode, AUDEN = 1, AUDMON = 0SPI1CON =0x00008000; // Slave mode, SPI ON, FRMSYPW = 0 // 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.*/

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-45

Page 46: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.4.5.4.2 PCM/DSP オーディオ マスタモードの動作

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

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

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

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

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

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

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

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

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

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

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

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

9. SPIxCON2 レジスタに適切な設定を書き込む。PCM/DSP モードに設定するには、AUDMOD<1:0>ビット (SPIxCON2<1:0>) を「11」に設定し、AUDEN ビット (SPIxCON2<7>) を「1」にセットしてオーディオ プロトコルを有効にする必要がある。

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

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

a) マスタモード (MSTEN (SPIxCON<5>) = 1) に設定する

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

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

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

例 23-10: PCM/DSP マスタモード (16 ビット チャンネルデータ、32 ビットフレーム )/*The following code example will initialize the SPI1 Module in PCM/DSP Master Mode.*//* It assumes that none of the SPI1 input pins are shared with an analog input.*/

unsigned int rData; IEC0CLR=0x03800000; // disable all interruptsSPI1CON = 0; // Stops and resets the SPI1.SPI1CON2 = 0; // Reset audio settingsrData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL=3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interruptsSPI1STATCLR=0x40; // clear the OverflowSPI1CON2=0x00000083; // PCM/DSP Master Mode, AUDEN =1, AUDMON=0SPI1BRG =0x4D; // (to generate 256 kbps sample rate, PBCLK @ 40 MHz)SPI1CON =0x00008020; // Master mode, SPI ON, FRMSYPW = 0 // 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.*/

DS61106G_JP - p. 23-46 © 2013 Microchip Technology Inc.

Page 47: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.4.6 オーディオ プロトコルモードの機能

23.4.6.1 BCLK/SCK と LRCK の生成

マスタモードでは BCLK と LRCK の生成が重要要件です。SCK と LRCK のフレーム周波数はMODE<32,16> ビット (SPIxCON<11:10>) の設定によって決まります。フレームが 64 bit の場 合、SCK の周波数は LRCK の 64 倍です。フレームが 32 bit の場合、SCK の周波数は LRCK の 32 倍です。SCK の周波数は、LRCK のトグルレートとフレームサイズから求める必要があります。

例えば PBCLK = 36.864 MHz の場合、16 ビット チャンネルデータを 8 kHz でサンプリングす るには、SPIxBRG レジスタを「0x47」に設定して 8 kHz の LRCK を生成します。

23.4.6.2 マスタモードのクロックと MCLKマスタモードの SPI モジュールは、PBCLK (MCLKSEL = 0) を使って内部で BCLK と LRCK を生成できます。参照出力 (REFCLKO) 機能を使うと、SPI モジュールから外部コーデックデバイスにクロックを供給できます ( 図 23-29 参照 )。しかし、一部のコーデックは水晶振動子を使って内部で MCLK を生成し、より正確なオーディオ サンプリングレートを生成できます。 図 23-30 に示す REFCLKO クロックは、コーデックで MCLKIN として使えます。

図 23-29: SPI マスタクロックの生成

参照クロック出力インターフェイスの詳細については、各デバイスのデータシートを参照してください。

図 23-30 に、MCLK 入力インターフェイスからクロックの供給を受けるコーデックマスタとSPI スレーブ間の接続を示します。

図 23-30: SPI スレーブとコーデックマスタの接続 – SPI スレーブから MCLK を供給

Baud RateGenerator BCLK

USB-PLL

SOSC

LPRC

FRC

POSC

PBCLK

System Clock

MCLK

MCLKSELRe

ference

Clo

ck Output

REFCLKO

SCKx

SSx

SDIx

SDOx

BCLK

LRCK

ADCDAT

DACDAT

PIC32[SPI Slave]

Codec[Master]

REFCLKO MCLKIN

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-47

Page 48: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.4.6.2.1 REFCLKO を使う I2S オーディオ マスタモードの動作

MCLK を使う I2S オーディオ マスタモード向けに SPI モジュールを設定する手順について説明 します。BCLK (256 kbps) を生成するよう SPI モジュールを初期化し、参照オシレータ出力コン フィグレーション レジスタを使ってPBCLKからMCLKを生成します。典型的なアプリケーショ ン例として、コーデック スレーブデバイスに接続してPCMデータ (サンプリング周波数 : 8 kHz、 16 ビットデータ、32 ビット フレーム ) を再生する場合を想定します。

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

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

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

4. 参照オシレータ コントローラ レジスタ (REFOCON) をリセットする。

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

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

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

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

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

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

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

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

9. SPIxCON2 レジスタに適切な設定を書き込む。I2S モードに設定するには、AUDMOD<1:0>ビット (SPIxCON2<1:0>) を「00」に設定し、AUDEN ビット (SPIxCON2<7>) を「1」にセットしてオーディオ プロトコルを有効にする必要がある。

10. 参照オシレータ コントローラ レジスタ (REFOCON) を設定する。

a) RODIV<14:0> (REFOCON<30:16>) = 0

b) ON (REFOCON<15>) = 1 ( 参照オシレータ有効 )

c) OE (REFOCON<4>) = 1 ( 出力有効 )

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

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

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

c) MODE<32,16> (SPIxCON<11:10>) = 0 (16 ビット オーディオ チャンネル データ )

d) MCLKSEL (SPIxCON<23>) = 1 ( マスタモード )

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

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

DS61106G_JP - p. 23-48 © 2013 Microchip Technology Inc.

Page 49: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

例 23-11: I2S マスタモード (256 kbps BCLK、16 ビット チャンネルデータ、32 ビットフレーム )

23.4.7 モノラルモードとステレオモードSPIモジュールはAUDMONOビット (SPIxCON2<3>)の設定に従ってモノラルまたはステレオモードでオーディオデータを転送できます。AUDMONO ビットを「0」( ステレオモード ) に設定すると、シフトレジスタから FIFO の各バッファ位置に一度ずつ書き込みます。つまり、ス テレオデータの各チャンネルに対して別々のデータストリームを割り当てます。AUDMONOビットを「1」( モノラルモード ) に設定すると、シフトレジスタから FIFO の各位置に二度書 き込みます。つまり、両方のチャンネルに対して同じモノラル データストリームを割り当てま す。

23.4.8 ストリーミング データのサポートとエラー処理ほとんどのオーディオ ストリーミング アプリケーションは、データを連続的に送信または受 信します。これは動作中にチャンネルをアクティブ状態に維持し、最大限の精度を保証するために必要です。オーディオデータのストリーミングに起因して集中的なデータ供給やパケットの損失が生じ、モジュールにアンダーランに似た状況が発生する場合があります。ソフトウェアはアンダーラン状態からの回復に関与する必要があります。

送信アンダーラン無視 (IGNTUR) ビット (SPIxCON2<8>) を「1」にセットすると、アンダーラン条件は無視されます。この設定は、ソフトウェアによるアンダーラン条件の検出と対応が不要な場合に便利です。SPITUREN ビット (SPIxCON2<10>) を「1」にセットした場合、 アン ダーランが発生すると SPI モジュールは SPITUR ビット (SPIxSTAT<8>) をセットし、ソフトウェアがエラー状態をクリアするか ON ビット (SPIxCON<15>) が「0」にクリアされるまでエラー状態を維持します。 アンダーラン条件中、SPI モジュールは SPIxTXB レジスタから SPIxSR レジスタにデータを転送せず、かわりにゼロを書き込んでゼロを送信し続けます。エラー条件がクリアされると ( つまり SPIxTXB レジスタがエンプティではなくなると )、SPI モジュールは次の LRCK フレーム境界で送信バッファから SPIxSR レジスタにオーディオデータを転送します。ソフトウェアは、常に左右チャンネルのオーディオデータをペアにして FIFO に転送する必要があります。

受信オーバーフロー無視 (IGNROV) ビット (SPIxCON2<9>) を「1」にセットすると、受信オーバーフロー条件を無視します。この設定は、ソフトウェアで適切に対処する必要のある一般的な性能上の問題がシステムに存在する場合に便利です。また、システムがオーディオデータを受信する必要がない場合、DISSDI ビット (SPIxCON<4>) を「1」にセットすれば受信オーバーフローの発生を防げます。動作中に DISSDI ビットを変更すると、受信シフトレジスタは LRCKパルスの前縁で受信を開始します。

/* 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 interruptsSPI1CON = 0; // Stops and resets the SPI1.SPI1CON2 = 0; // Reset audio settings REFOCON = 0x0; // Reset reference oscillator registerSPI1BRG=0; // Reset Baud rate registerrData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL = 3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interrupts

SPI1STATCLR=0x40; // clear the OverflowSPI1CON2=0x00000080; // I2S Mode, AUDEN =1, AUDMON=0SPI1BRG =0x4D; // (to generate 256 kbps sample rate, PBCLK @ 40 MHz)REFOCON = 0x8001; // ON = 1, ROSEL = 1 for PBCLKSPI1CON =0x00808060; // MCLKSEL = 1, MSTEN = 1, ON = 1, 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.*/

Note: 参照クロック出力を使ってコーデックに MCLK を供給する方式は最善の選択とは言えません。I/O ピンでクロックを出力するとジッタが生じるため、コーデックの音質に劣化を招く可能性があります。コーデックをマスタ I2S オーディオデバイスにして水晶振動子を使うのが最善の方法です。

Note: AUDMONO ビットの設定は受信データに影響しません。

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-49

Page 50: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.5 割り込みSPI モジュールはデータ通信中に発生したイベントに対応して下記の割り込みを生成できます。

• 受信データ読み出し可能割り込みが発生すると、SPI1RXIF および SPI2RXIF ビットがセットされます。このイベントは、SPIxBUF 受信バッファへの新しいデータの書き込みが完了すると発生します。

• 送信データエンプティ割り込みが発生すると、SPI1TXIF および SPI2TXIF ビットがセットされます。このイベントは、SPIxBUF 送信バッファに新しいデータを書き込める空き位置ができると発生します。

• エラー割り込みが発生すると、SPI1EIF および SPI2EIF ビットがセットされます。このイベントは、SPIxBUF 受信バッファでオーバーフロー条件が発生した場合 ( 次のデータの受信を完了したが、先に受信したデータがまだ読み出されていない場合 )、 送信バッファでアンダー ランが発生した場合、FRMERR イベントが発生した場合に発生します。

これら全ての割り込みフラグは IFSx レジスタに格納されており、ソフトウェアでクリアする必要があります。詳細は各デバイスのデータシートを参照してください。

SPI 割り込みを有効にするには、対応する IECx レジスタ内の各 SPI 割り込みイネーブルビット (SPIxRXIE、SPIxTXIE、SPIxFIE) をセットします。

加えて、IPCx レジスタ内の割り込み優先度ビット (SPIxIP) と割り込み副優先度ビット (SPIxIS)も設定する必要があります。

拡張バッファモードを使う場合、SPI 制御 (SPIxCON<3:2>) レジスタの SPI 送信バッファ エン プティ割り込みモードビット (STXISEL<1:0>) を使って送信バッファ エンプティ割り込みの生 成条件 ( 非フル、1/2 以上エンプティ、完全にエンプティ、最後の転送データをシフトアウト )を設定できます。

同様に、拡張バッファモードを使う場合、SPI 制御 (SPIxCON<1:0>) レジスタの SPI 受信バッファフル割り込みモードビット (SRXISEL<1:0>) を使って受信バッファフル割り込みの生成条件 ( フル、1/2 以上フル、非エンプティ、最後のワードの読み出し ) を設定できます。

詳細は『セクション 08. 割り込み』(DS61108) を参照してください。

23.5.1 割り込みの設定

各 SPI モジュールには、それぞれ 3 つの割り込みフラグビット (SPIxEIF、SPIxRXIF、SPIxTXIF)と、それらに対応する割り込みイネーブル / マスクビット (SPIxEIE、SPIxRXIE、SPIxTXIE) が割り当てられています。割り込みフラグビットを使って割り込みを引き起こした要因を特定でき、割り込みイネーブルビットを使って対応する割り込み要因を有効または無効にできます。特定の SPI モジュールに関連付けられた全ての割り込み要因は、1 つの割り込みベクタを共有 する事に注意してください。各 SPI モジュールには別々に優先度を設定できます。

SPI 送信バッファがエンプティになると SPIxTXIF がセットされ、新しいデータを SPIxBUF レジスタに書き込めます。SPIxBUF 内に読み出し可能な受信データが存在すると、SPIxRXIF がセットされます。受信オーバーフロー条件が発生すると、SPIxEIF がセットされます。

SPIxTXIF、SPIxRXIF、SPIxEIF ビットは対応するイネーブルビットの状態に関係なくセットされる事に注意してください。割り込みフラグビットは必要に応じてソフトウェアでポーリングできます。

SPIxEIE、SPIxTXIE、SPIxRXIE ビットはそれぞれ SPIxEIF、SPIxTXIF、SPIxRXIF ビットがセットされた時の割り込みコントローラの挙動を定義します。割り込みイネーブルビットをクリアすると、割り込みコントローラは対応するイベントが発生しても CPU 割り込みを生成しません。割り込みイネーブルビットをセットした場合、割り込みコントローラは対応する割り込みフラグビットがセットされるとCPUに対して割り込みを生成します (この動作は後述の優先度および副優先度の設定に従います )。

割り込みをサービスするユーザ ソフトウェア ルーチンは、サービスルーチンを完了する前に 適切な割り込みフラグビットをクリアする必要があります。

各 SPI モジュールの割り込み優先度は、SPIxIP<2:0> ビットを使って別々に設定できます。この優先度は、割り込み要因をどの優先度グループに割り当てるのかを定義します。各優先度グループは 7 ( 最優先 ) から 0 ( 割り込みを生成しない ) の優先度を持ちます。ある割り込みをサー ビスしている時に、より高い優先度グループに属する割り込みが発生した場合、サービス中の割り込みは保留されます。エラー割り込みの各要因は、SPIxCON2 レジスタの FRMERREN、SPIROVEN、SPITUREN ビットによって別々に制御されます。

Note: 拡張バッファモードは一部のデバイスだけで利用できます。詳細は各デバイスのデータシートを参照してください。

DS61106G_JP - p. 23-50 © 2013 Microchip Technology Inc.

Page 51: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

副優先度ビットにより、同一優先度グループに属する割り込み要因に異なる優先度を設定できます。副優先度の値 (SPIxIS<1:0>) は、3 ( 最優先 ) から 0 ( 最低優先度 ) の間で設定できます。 ある割り込みのサービス中に、優先度グループが同じで副優先度がより高い割り込みが発生しても、サービス中の副優先度の低い割り込みは保留されません。

複数の割り込み要因に同一の優先度と副優先度を割り当てる事もできます。そのように設定した複数の割り込みが同時に発生した場合、それらの各割り込み要因が持つ自然順序優先度によって、生成される割り込みが決まります。自然順序優先度は割り込み要因のベクタ番号に基づきます。ベクタ番号が小さいほど、割り込みの自然順序優先度は高くなります。自然順序優先度に従って保留された割り込み要因は、サービス中の割り込みの割り込みフラグがクリアされた後に、優先度、副優先度、自然順序優先度に基づいて、順番に割り込みを生成します。

有効な割り込みが発生すると、CPU はその割り込みに割り当てられているベクタへジャンプします。割り込みのベクタ番号がそのまま自然優先順位となります。CPU はジャンプ先のベクタアドレスからコードの実行を始めます。このベクタアドレスから始まるユーザコードは、要求されたアプリケーション動作を実行し、終了する前に割り込みフラグ (SPIxEIF、SPIxTXIF、SPIxRXIF) をクリアする必要があります。割り込みの詳細については、『セクション 08. 割り込み』(DS61108) 内のベクタアドレス テーブルを参照してください。

例 23-12: 割り込みを有効にする SPI 初期化サンプルコード

例 23-13: SPI1 ISR のサンプルコード

デバイスが拡張バッファモードを備えている場合、ユーザ アプリケーションは割り込み条件に 対応した後に割り込み要求フラグをクリアする必要があります。

SPI 割り込みが発生した場合、ISR は SPI データバッファ (SPIxBUF) レジスタを読み出した後に SPI 割り込みフラグをクリアする必要があります ( 例 23-14 参照 )。

/*The following code example illustrates an SPI1 interrupt configuration.When the SPI1 interrupt is generated, the cpu will jump to the vector assigned to SPI1interrupt.It assumes that none of the SPI1 input pins are shared with an analog input.If so, the AD1PCFG

and corresponding TRIS registers have to be properly configured.*/

intrData;

IEC0CLR=0x03800000; // disable all SPI interruptsSPI1CON = 0; // Stops and resets the SPI1. rData=SPI1BUF; // clears the receive bufferIFS0CLR=0x03800000; // clear any existing eventIPC5CLR=0x1f000000; // clear the priorityIPC5SET=0x0d000000; // Set IPL=3, Subpriority 1IEC0SET=0x03800000; // Enable RX, TX and Error interrupts

SPI1BRG=0x1; // use FPB/4 clock frequencySPI1STATCLR=0x40; // clear the OverflowSPI1CON=0x8220; // SPI ON, 8 bits transfer, SMP=1, Master mode

/*The following code example demonstrates a simple interrupt service routine for SPI1interrupts.The user’s code at this vector should perform any application specific operationsand must clear the SPI1 interrupt flags before exiting.

*/

void __ISR(_SPI_1_VECTOR, ipl3)__SPI1Interrupt(void){

// ... perform application specific operations in response to the//interrupt

IFS0CLR = 0x03800000; // Be sure to clear the SPI1 interrupt flags// before exiting the service routine.

}

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-51

Page 52: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

例 23-14: 拡張バッファモードを備えたデバイス向けの SPI1 ISR サンプルコード/*The following code example demonstrates a simple interrupt service routine for SPI1interrupts.The user’s code at this vector should perform any application specific operationsand must clear the SPI1 interrupt flags before exiting.

*/

void __ISR(_SPI_1_VECTOR, ipl3)__SPI1Interrupt(void){int Data; // Read SPI data bufferData = SPI1BUF;

// ... perform application specific operations in response to the//interrupt

IFS0CLR = 0x03800000; // Be sure to clear the SPI1 interrupt flags// before exiting the service routine.

}

Note: SPI1 ISR サンプルコードは MPLAB® C32 C コンパイラ向けの構文で書かれてい ます。ISR のサポートについては、ご使用になるコンパイラのマニュアルを参照してください。

DS61106G_JP - p. 23-52 © 2013 Microchip Technology Inc.

Page 53: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.6 省電力およびデバッグモード中の動作

23.6.1 スリープモード

デバイスがスリープに移行するとシステムクロックは停止します。スリープ中の SPI モジュールの動作は、スリープへの移行前のモジュール動作モードによって異なります。以下では、動作モード別にスリープ挙動について説明します。

23.6.1.1 マスタモードでのスリープ

スリープ中は下記の点に注意が必要です。

• baud レート ジェネレータは停止し、リセットされる場合がある ( デバイス データシートで 確認してください )。

• 実行中の送受信シーケンスは中止される。スリープ終了時にモジュールは中止されたシーケンスを再開しない ( デバイス データシートで確認してください )

• スリープに移行すると、モジュールは新しいデータを一切送受信しない。

23.6.1.2 スレーブモードでのスリープ

スレーブモードの場合、SPI モジュールは外部の SPI マスタが供給する SCK を使って動作します。SCKx クロックパルスは外部から供給されるため、モジュールはスリープ中も機能し続けます。スリープへの移行中のトランザクションは全て完全に実行されます。トランザクションが完了すると SPIRBF フラグがセットされます。その結果、SPIxRXIF ビットがセットされます。SPI 割り込みが有効 (SPIxRXIE = 1) かつその優先度が現在の CPU 優先度よりも高い場 合、デバイスはスリープから復帰し、SPIx 割り込みベクタ アドレスからコード実行を再開し ます。SPI割り込み優先度が現在のCPU優先度以下である場合、CPUはスリープを継続します。

スレーブデバイスとして動作中のモジュールはスリープへの移行時にリセットされません。SPIx モジュールがスリープに移行する際もスリープから復帰する際もレジスタの内容は影響を受けません。

23.6.2 アイドルモード

デバイスがアイドルに移行してもシステムクロック源は機能し続けます。

23.6.2.1 マスタモードでのアイドル

アイドル中にモジュールの動作を停止するか継続するかはSIDLビット (SPIxCON<13>)で選択します。

• SIDL = 1の場合、モジュールはアイドル中に動作を停止します。この場合、モジュールはス リープ中と同様に機能します。

• SIDL = 0の場合、モジュールはアイドル中も動作を続けます。

23.6.2.2 スレーブモードでのアイドル

SIDL の設定に関係なく、モジュールはアイドル中も動作を継続します。モジュールの挙動はスリープ中と同じです。

23.6.3 デバッグモード

23.6.3.1 SPIxBUF の動作

23.6.3.1.1 デバッグモード中の読み出し

デバッグモード中も SPIxBUF を読み出せます。しかし、読み出し動作はどのステータスビットにも影響しません。例えば、デバッグモードへの移行時に SPIRBF ビット (SPIxSTAT<0>) をセットした場合、デバッグモード中に SPIxBUF を読み出しても、デバッグモード終了時にSPIRBF ビットはセットされたままです。

Note: 送受信シーケンスの不用意な中止を防ぐには、実行中の転送が完了してからスリープに移行する必要があります。

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-53

Page 54: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.7 各種リセットの影響

23.7.1 デバイスリセット

全ての SPI レジスタは、デバイスリセット時にそれぞれのリセット状態に戻されます。非同期リセット入力がアクティブ状態に遷移すると、SPI ロジックは下記を実行します。

• SPIxCON および SPIxSTAT レジスタの全てのビットをリセットする

• 送受信バッファ (SPIxBUF) をエンプティ状態にリセットする

• baud ジェネレータをリセットする

23.7.2 パワーオン リセット

全ての SPI レジスタは、パワーオンリセット時にそれぞれのリセット状態に戻されます。

23.7.3 ウォッチドッグ タイマリセット

全ての SPI レジスタは、ウォッチドッグ タイマリセット時にそれぞれのリセット状態に戻され ます。

23.8 SPI モジュールを使う周辺モジュールSPI モジュールを使う他の周辺モジュールはありません。

DS61106G_JP - p. 23-54 © 2013 Microchip Technology Inc.

Page 55: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

23.9 関連アプリケーション ノート本書に関連するアプリケーション ノートの一覧を以下に記載します。一部のアプリケーション ノートは PIC32 デバイスファミリ向けではありません。ただし概念は共通しており、変更が必要であったり制限事項が存在するものの利用が可能です。SPI モジュールに関連する最新のアプリケーション ノートは下記の通りです。

タイトル アプリケーション ノート番号

Interfacing Microchip’s MCP41XXX/MCP42XXX Digital Potentiometers to a PIC® Microcontroller AN746

Interfacing Microchip’s MCP3201 Analog-to-Digital Converter to the PIC® Microcontroller

AN719

Note: PIC32 ファミリデバイス関連のアプリケーション ノートとサンプルコードはマイ クロチップ社のウェブサイト (www.microchip.com) でご覧になれます。

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-55

Page 56: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

23.10 改訂履歴

リビジョン A (2007 年 7 月 )

本書の初版

リビジョン B (2007 年 10 月 )

例 23-1/23-2/23-3 と表 23-5 を改訂

リビジョン C (2007 年 10 月 )

機密扱いのステータスを解除して内容を更新

リビジョン D (2008 年 4 月 )

ステータスを「Preliminary」に変更、U-0 を r-x に変更

リビジョン E (2008 年 6 月 )

レジスタ 12-17 に脚注番号を追加、例 23-4 を改訂、図 23-8 を改訂、予約済みビットを「Maintainas」から「Write」に変更、ON ビット (SPIxCON レジスタ ) の Note を追加

リビジョン F (2009 年 8 月 )

このリビジョンでの変更内容は以下の通りです。

• 文章および体裁の変更等、本書全体の細部を修正

• 23.2「ステータス / 制御レジスタ」のレジスタの概要説明を更新

• レジスタのまとめ ( 表 32-2)

- クリア、セット、反転レジスタおよび IFS0、IFS1、IEC0、IEC1、IPC5、IPC7 レジスタに関する記述を削除

-「アドレス オフセット」列を追加

- クリア、セット、反転レジスタに関する Note 1、2、3 を追加

- 次のビットを追加 : MSSEN、FRMSYPW、FRMCNT<2:0>、ENHBUF、STXISEL<1:0>、 SRXISEL<1:0>、RXBUFELM<4:0>、SPITUR、SRMT、SPIRBE、AND SPITBF

• IFS0、IFS1、IEC0、IEC1、IPC5、IPC7 レジスタを削除

• 下記のレジスタにクリア、セット、反転レジスタに関する Note を追加

- SPIxCON

- SPIxSTAT

- SPIxBRG

• 表 23-3「サンプル SCKx 周波数」に 60、72、80 MHz 向けの SPIxBRG 設定を追加

• 表 23-4「各種オフセットに対する SPI 割り込みベクタ」を削除

• 23.3.2「バッファモード」を追加

• 23.3.3.1「マスタモードの動作」に MSSEN ビットの詳細に関する段落を追加

• 23.3.6「フレーム化 SPI モード」に FRMSYPW および FRMCNT ビットに関する 2 項目の箇条書きを追加

• 23.4「割り込み」に、STXISEL<1:0> および SRXISEL<1:0> ビットに関する詳細を記載した2 段落を追加

• 23.4.1「割り込みの設定」の例 23-4 の後に、拡張バッファモードを備えたデバイス向けの SPI1ISR に関する段落を追加

• 拡張バッファモードを備えたデバイス向けに SPI1 ISR サンプルコード ( 例 23-5) を追加

• 23.8「I/O ピンの制御」を削除

DS61106G_JP - p. 23-56 © 2013 Microchip Technology Inc.

Page 57: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

セクション 23. シリアル ペリフェラル インターフェイス (SPI) シリアル

ペリフェラル

インターフェイス

(SP

I)

23

リビジョン G (2011 年 10 月 )

このリビジョンでの変更内容は以下の通りです。

• 23.1「はじめに」に、関連文書と更新された SPI モジュール機能一覧に関する注釈ボックスを追加

• 表 23-2「オーディオ プロトコル インターフェイス モードでの SPI 機能」を追加

• SPI モジュールのブロック図 ( 図 23-1) を更新

• SPI 制御レジスタ ( レジスタ 23-1) で下記を更新

- Note 5 を追加

- bit 26-24 (FRMCNT<2:0>) の Note を更新

- bit 3-2 (STXISEL<2:0>) の定義を更新

- SPI_TBE_EVENT を SPIxTXIF、SPI_RBF_EVENT を SPIxRXIF に全て置換

- MODE32 および MODE16 ビット (SPIxCON<11:10>) のビット値を更新

• SPIxCON2 レジスタと MCLKSEL、DISSDI、FRMERR ビットを追加 ( 表 23-3、レジスタ 23-1、 レジスタ 23-2 参照 )

• SPI ステータス レジスタに CLR、SET、INV レジスタに関する Note を追加 ( 表 23-3、レジスタ 23-3 参照 )

• SPI ステータスレジスタ ( レジスタ 23-3) の SRMT ビット (bit 7) のビット値定義を更新

• 23.3「動作モード」にピンの使用に関する注釈ボックスを追加

• 表 23-4「サンプル SCKx 周波数」を更新

• 23.3.3.1「マスタモード動作」内のマスタモード動作シーケンスで、副項目 b) と c) の順番を入れ換え

• 23.3.3.1「マスタモード動作」内の 2 つめの注釈ボックスの後に MSSEN ビットに関する段落を追加し、2 つめの注釈ボックスの内容を更新

• MSSEN ビットに関する段落を追加

• 図 23-7「8 ビットモードでの SPI マスタモード動作」タイミング図に SSx ピンを追加

• 23.3.3.2「スレーブモード動作」内のスレーブモード動作シーケンスで、副項目 b) と c) の順番を入れ換え

• 23.3.6「フレーム化 SPI モード」内の図 23-12 の直前に、追加のインターフェイス オプションに関する段落を追加

• 23.4「オーディオ プロトコル インターフェイス モード」を追加

• 23.5「割り込み」内の箇条書きで、ビット名とレジスタへの参照を更新

• 23.6.3「デバッグモード」内の 23.6.3.1「SPIxBUF の動作」以外の項目を全て削除

• 23.9「設計のヒント」を削除

• 本書全体を通して LRC を LRCK に置換

• サンプルコードから未検査コード ウォーターマークを全て削除

• 表現および体裁の変更等、本書全体の細部を修正

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-57

Page 58: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

PIC32 ファミリ リファレンス マニュアル

NOTE:

DS61106G_JP - p. 23-58 © 2013 Microchip Technology Inc.

Page 59: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

© 2013 Microchip Technology Inc. DS61106G_JP - p. 23-59

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。マイクロチップ社は、明示的、暗黙的、書面、口

頭、法定のいずれであるかを問わず、本書に記載されている

情報に関して、状態、品質、性能、商品性、特定目的への適

合性をはじめとする、いかなる類の表明も保証も行いません。

マイクロチップ社は、本書の情報およびその使用に起因する

一切の責任を否認します。マイクロチップ社の明示的な書面

による承認なしに、生命維持装置あるいは生命安全用途にマ

イクロチップ社の製品を使用する事は全て購入者のリスクと

し、また購入者はこれによって発生したあらゆる損害、クレー

ム、訴訟、費用に関して、マイクロチップ社は擁護され、免

責され、損害をうけない事に同意するものとします。暗黙的

あるいは明示的を問わず、マイクロチップ社が知的財産権を

保有しているライセンスは一切譲渡されません。

商標

マイクロチップ社の名称とMicrochipロゴ、dsPIC、FlashFlex、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、

米国およびその他の国におけるマイクロチップ・テクノロ

ジー社の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MTP、SEEVAL、Embedded Control Solutions Company は、

米国におけるマイクロチップ・テクノロジー社の登録商標で

す。

Silicon Storage Technology は、その他の国におけるマイクロ

チップ・テクノロジー社の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、

chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、

dsP ICD EM. ne t、d s P IC wo rk s、dsSPE AK、E CAN、

ECONOMONITOR、FanSense、HI-TIDE、In-Circuit SerialProgramming、ICSP、Mindi、MiWi、MPASM、MPF、MPLAB認証ロゴ、MPLIB、MPLINK、mTouch、Omniscient CodeGeneration、PICC、PICC-18、PICDEM、PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、SQI、Serial QuadI/O、Total Endurance、TSHARC、UniWinDriver、WiperLock、ZENA、Z-Scale は、米国およびその他の国におけるマイクロ

チップ・テクノロジー社の登録商標です。

SQTP は、米国におけるマイクロチップ・テクノロジー社の

サービスマークです。

GestICとULPPは、その他の国におけるMicrochip TechnologyGermany II GmbH & Co. & KG ( マイクロチップ・テクノロ

ジー社の子会社 ) の登録商標です。

その他、本書に記載されている商標は各社に帰属します。

©2012, Microchip Technology Incorporated, Printed in theU.S.A., All Rights Reserved.

ISBN: 978-1-62077-057-3

マイクロチップ社製デバイスのコード保護機能に関して次の点にご注意ください。

• マイクロチップ社製品は、該当するマイクロチップ社データシートに記載の仕様を満たしています。

• マイクロチップ社では、通常の条件ならびに仕様に従って使用した場合、マイクロチップ社製品のセキュリティ レベルは、現

在市場に流通している同種製品の中でも最も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、

マイクロチップ社データシートにある動作仕様書以外の方法でマイクロチップ社製品を使用する事になります。このような行

為は知的所有権の侵害に該当する可能性が非常に高いと言えます。

• マイクロチップ社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。

• マイクロチップ社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コー

ド保護機能とは、マイクロチップ社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。マイクロチップ社では、常に製品のコード保護機能の改善に取り組んでいます。マイクロ

チップ社のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはそ

の他の著作物に不正なアクセスを受けた場合は、デジタル ミレニアム著作権法の定めるところにより損害賠償訴訟を起こす権利が

マイクロチップ社では、Chandler および Tempe ( アリゾナ州 )、Gresham ( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。マイクロチップ社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ®コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関するマイクロチップ社の品質システムは ISO 9001:2000 認証を取得しています。

QUALITY MANAGEMENT  SYSTEM CERTIFIED BY DNV 

== ISO/TS 16949 ==

Page 60: セクション 23. シリアル ペリフェラル インターフェイス (SPI)ww1.microchip.com/downloads/jp/DeviceDoc/61106G_JP.pdf · ます。図23-1 に、spi モジュールのブロック図を示します。

DS61106G_JP - p. 23-60 2013 Microchip Technology Inc.

北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel:480-792-7200 Fax:480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com

アトランタDuluth, GA Tel:678-957-9614 Fax:678-957-1455

ボストンWestborough, MA Tel:774-760-0087 Fax:774-760-0088

シカゴItasca, IL Tel:630-285-0071 Fax:630-285-0075

クリーブランドIndependence, OH Tel:216-447-0464

Fax:216-447-0643

ダラスAddison, TX Tel:972-818-7423 Fax:972-818-2924

デトロイトFarmington Hills, MI Tel:248-538-2250Fax:248-538-2260

インディアナポリスNoblesville, IN Tel:317-773-8323Fax:317-773-5453

ロサンゼルスMission Viejo, CA Tel:949-462-9523 Fax:949-462-9608

サンタクララSanta Clara, CA Tel:408-961-6444Fax:408-961-6445

トロントMississauga, Ontario, CanadaTel:905-673-0699 Fax:905-673-6509

アジア / 太平洋

アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel:852-2401-1200Fax:852-2401-3431オーストラリア - シドニーTel:61-2-9868-6733Fax:61-2-9868-6755

中国 - 北京Tel:86-10-8569-7000 Fax:86-10-8528-2104

中国 - 成都Tel:86-28-8665-5511Fax:86-28-8665-7889

中国 - 重慶Tel:86-23-8980-9588Fax:86-23-8980-9500

中国 - 杭州Tel:86-571-2819-3187 Fax:86-571-2819-3189

中国 - 香港 SARTel:852-2943-5100 Fax:852-2401-3431

中国 - 南京Tel:86-25-8473-2460Fax:86-25-8473-2470

中国 - 青島Tel:86-532-8502-7355Fax:86-532-8502-7205

中国 - 上海Tel:86-21-5407-5533 Fax:86-21-5407-5066

中国 - 瀋陽Tel:86-24-2334-2829Fax:86-24-2334-2393

中国 - 深圳Tel:86-755-8864-2200 Fax:86-755-8203-1760

中国 - 武漢Tel:86-27-5980-5300Fax:86-27-5980-5118

中国 - 西安Tel:86-29-8833-7252Fax:86-29-8833-7256

中国 - 厦門Tel:86-592-2388138 Fax:86-592-2388130

中国 - 珠海Tel:86-756-3210040 Fax:86-756-3210049

アジア / 太平洋

インド - バンガロールTel:91-80-3090-4444 Fax:91-80-3090-4123

インド - ニューデリーTel:91-11-4160-8631Fax:91-11-4160-8632

インド - プネTel:91-20-3019-1500

日本 - 大阪Tel:81-6-6152-7160 Fax:81-6-6152-9310

日本 - 東京Tel:81-3-6880- 3770 Fax:81-3-6880-3771

韓国 - 大邱Tel:82-53-744-4301Fax:82-53-744-4302

韓国 - ソウルTel:82-2-554-7200Fax:82-2-558-5932 または 82-2-558-5934

マレーシア - クアラルンプールTel:60-3-6201-9857Fax:60-3-6201-9859

マレーシア - ペナンTel:60-4-227-8870Fax:60-4-227-4068

フィリピン - マニラTel:63-2-634-9065Fax:63-2-634-9069

シンガポールTel:65-6334-8870Fax:65-6334-8850

台湾 - 新竹Tel:886-3-5778-366Fax:886-3-5770-955

台湾 - 高雄Tel:886-7-213-7828Fax:886-7-330-9305

台湾 - 台北Tel:886-2-2508-8600 Fax:886-2-2508-0102

タイ - バンコクTel:66-2-694-1351Fax:66-2-694-1350

ヨーロッパ

オーストリア - ヴェルスTel:43-7242-2244-39

Fax:43-7242-2244-393

デンマーク - コペンハーゲンTel:45-4450-2828 Fax:45-4485-2829

フランス - パリTel:33-1-69-53-63-20 Fax:33-1-69-30-90-79

ドイツ - ミュンヘンTel:49-89-627-144-0 Fax:49-89-627-144-44

イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781

オランダ - ドリューネンTel:31-416-690399 Fax:31-416-690340

スペイン - マドリッドTel:34-91-708-08-90Fax:34-91-708-08-91

イギリス - ウォーキンガムTel:44-118-921-5869Fax:44-118-921-5820

各国の営業所とサービス

08/20/13