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);
【使用例】
例題としては、