■SPI: beginTransaction関数
SPI: beginTransaction関数は、定義されたSPISettingsを使用してSPIバスを初期化します。
■使用例
試しにこのプログラムを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.beginTransaction(mySettings)
■パラメータ
mySettings:SPISettings関数の設定に応じる。
■戻り値
有りません。
励みになりますのでよければクリック下さい(^o^)/