■SPI: endTransaction関数
SPI: endTransaction関数は、SPIバスの使用を中止します。
通常、これはチップセレクトをディアサートした後に呼び出され、他のライブラリがSPIバスを使用できるようにします。
■使用例
ArduinoIDEで使用するSPI: endTransaction関数の使い方は以下の通りです。
試しにこのプログラムをArduinoUNOで実行すると、各SPIデバイスを一度SPISettingsオブジェクトとして構成します。
特定のSPIデバイスと通信するには、そのデバイス用に宣言した設定を自動的に使用するSPI.beginTransaction関数を使用します。
さらに、処理の間SPIを使用する割り込みを無効にします。
終了したら、SPI.endTransaction関数を使用して、SPIを使用する割り込みを再度有効にします。
これら操作により互換性の無いSPIデバイスA,B間の通信をArduinoを介して行います。
#include <SPI.h> // 互換性のない2つのSPIデバイスAとBを使用しています。互換性がないということは、異なるSPI_MODEにする必要があります。 const int slaveAPin = 20; const int slaveBPin = 21; // 速度、データの順序とデータモードを設定する SPISettings settingsA(2000000, MSBFIRST, SPI_MODE1); SPISettings settingsB(16000000, LSBFIRST, SPI_MODE3); void setup() { // スレーブセレクトピンを出力として設定します。 pinMode (slaveAPin, OUTPUT); pinMode (slaveBPin, OUTPUT); // SPIを初期化する SPI.begin(); } uint8_t stat, val1, val2, result; void loop() { // デバイスAから3バイトを読み込む SPI.beginTransaction(settingsA); digitalWrite (slaveAPin, LOW); // 読み取り専用なので、送信されるデータは関係ありません stat = SPI.transfer(0); val1 = SPI.transfer(0); val2 = SPI.transfer(0); digitalWrite (slaveAPin, HIGH); SPI.endTransaction(); // statが1または2の場合、val1またはval2に0を送信する if (stat == 1) { result = val1; } else if (stat == 2) { result = val2; } else { result = 0; } // デバイスBに結果を送る SPI.beginTransaction(settingsB); digitalWrite (slaveBPin, LOW); SPI.transfer(result); digitalWrite (slaveBPin, HIGH); SPI.endTransaction(); }
図1:プログラム例
■構文
SPI.endTransaction()
■パラメータ
有りません。
■戻り値
有りません。
励みになりますのでよければクリック下さい(^o^)/