SPIモジュールの使い方


 dsPIC30Fシリーズ内蔵のSPIモジュールの使い方について説明しています。

【内部構成】

 dsPIC内蔵のSPIモジュールは、これまでのPICのようなI2Cと兼用ではなくSPI専用のモジュール
となっています。その構成は下図のようになっていて比較的簡単な構成です。




このSPIモジュールの特徴は下記のようになっています。

・マスターとスレーブどちらにもできる。
 設定によりマスタとすればクロック信号を出力し、スレーブとすればクロックを受信すう
ように動作を切り替えます。

・8ビット転送と16ビット転送のモード切替ができる
 データ転送単位をバイトかワードかの指定ができます。

・簡単なフレーム化が可能で、SSピンをフレーム同期信号として利用できる。
 SS信号を出してからクロックを出力するという同期化ができます。

・SDOピンの出力をするかしないか設定できる
  受信だけで良い場合には、SDOピンの出力を出さないようにできます。

・多くのdsPICで2チャネルのSPIが実装されています。

【関連SFR】

 SPIモードの設定は下記のSFRで行います。クロックの同期タイミングの設定以外は
単純ですので簡単です。
2チャネル実装の場合には、下図のxが1と2になり、1チャネルのものは1となります。




割り込み制御用のSFRは下記となります。2チャネルそれぞれ独立の扱いとなっています。








【C言語での使い方】

C30コンパイラのPeripheral Librariesで用意されているSPIモジュール用の組み込み関数は
下表のようになっています。
下記関数を使うためには、「spi.h」をインクルードする必要があります。
またプロジェクトにデバイス用のライブラリファイル、例えば「libp30f4012.a」という
ライブラリファイルをLIBに追加する必要があります。
デバイスによりSPIが2組内蔵されているものがあります。下表でxの部分は1か2と
なります。1組だけのものは1となります。

関数名 書  式 機  能
OpenSPIx() void OpenSPIx(
   unsigned int config1,
   unsigned int config2);
CloseSIPx() void CloseSPIx(void);
ConfigIntSPIx() void ConfigIntSPIx(
   unsigned int config);
DataRdySPIx() char DataRdySPIx(void);
RedaSPIx()
getcSPIx()
unsigned int ReadSPIx(void);
unsigned int getcSPIx(void);
WriteSPIx()
putcSPIx()
void WriteSPIx(unsigend int data);
void putcSPIx(unsigned int data);
getsSPIx() unsigned int getsSPIx(
   unsigned int length,
   unsigend int *buffer,
   unsigned int data_wait);
putsSPIx() void putsSPIx(
 unsigned int length,
 unsigend int *buffer);
EnableIntSPIx()
DisableIntSPIx()
SetPriorityIntSPIx() void SetPriorityIntSPIx(
 unsigned int level);



【使用例】

 例題としては、






    目次ページへ