「MSP430G2553 - SPI」の版間の差分

ナビゲーションに移動 検索に移動
74行目: 74行目:
# マスターの場合は、CSピンを制御する。
# マスターの場合は、CSピンを制御する。
<br>
<br>
==== サンプルコード ====
==== サンプルコード : データの送信 ====
以下の例では、MSP430G2553がマスターとしてSPI通信を行い、スレーブデバイスにデータ (0x55) を繰り返し送信している。<br>
以下の例では、MSP430G2553がマスターとしてSPI通信を行い、スレーブデバイスにデータ (0x55) を繰り返し送信している。<br>
以下に示す手順により、SPI通信を行っている。<br>
以下に示す手順により、SPI通信を行っている。<br>
133行目: 133行目:
     while (!(IFG2 & UCB0TXIFG));  // 送信バッファが空になるまで待機
     while (!(IFG2 & UCB0TXIFG));  // 送信バッファが空になるまで待機
     UCB0TXBUF = data;              // データを送信バッファに書き込む
     UCB0TXBUF = data;              // データを送信バッファに書き込む
}
</syntaxhighlight>
<br>
==== サンプルコード : データの受信 (マスターデバイス側) ====
以下の例では、MSP430G2553がマスターとしてSPI通信を行い、スレーブデバイスからデータを繰り返し受信している。<br>
以下に示す手順により、SPI通信を行っている。<br>
<br>
# まず、spi_init関数でSPIの初期化を行う。
#: spi_init関数では、SPIに使用するピンの機能選択、クロック源の選択、ボーレートの設定、SPIモードの設定等を行う。
# メインループ内で、以下の処理を繰り返す。
## CSピンをLowにしてスレーブを選択する。
## spi_receive_byte関数を実行して、スレーブからデータを受信する。
##: 受信バッファ (1[byte]) にデータが受信されるまで待機する。
##: 受信したデータを変数received_dataに格納する。
## CSピンをHighにしてスレーブを解放する。
## 100[mS]の遅延を入れる。
<br>
スレーブデバイスの種類や接続方法に応じて、サンプルコードを適宜変更すること。<br>
<br>
<syntaxhighlight lang="c">
#include <msp430.h>
// マクロは、データ送信の場合と同様のため省略
 
void spi_init(void);
unsigned char spi_receive_byte(void);
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;              // ウォッチドッグタイマを停止
    spi_init();                            // SPIの初期化
    unsigned char received_data;
    while (1) {
      P1OUT &= ~SPI_CS_PIN;                // CSをLowにしてスレーブを選択
      received_data = spi_receive_byte();  // データを受信
      P1OUT |= SPI_CS_PIN;                // CSをHighにしてスレーブを解放
      // 受信したデータを処理
      // ...略
      __delay_cycles(100000);  // 100[mS]の遅延
    }
}
void spi_init(void)
{
    // データ送信の場合と同様のため省略
}
unsigned char spi_receive_byte(void)
{
    while (!(IFG2 & UCB0RXIFG));  // 受信バッファ (1[byte]) にデータが入るまで待機
    return UCB0RXBUF;              // 受信バッファからデータを読み込む
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>

案内メニュー