Arduinoで遊ぶページ

Arduinoで遊んだ結果を残すページです。
garretlab
SPIClass::begin()

SPIClass::begin()

概要

SPIClass::begin()は、SPI通信を行う際の、ピンモードの設定やレジスタの設定を行います。リファレンスはこちら

SPI関連のレジスタの説明はこちら

ソースコード

SPIClass::begin()は、libraries/SPI/SPI.cppに定義されています。以下に全ソースコードを示します。

void SPIClass::begin() {
  // Set direction register for SCK and MOSI pin.
  // MISO pin automatically overrides to INPUT.
  // When the SS pin is set as OUTPUT, it can be used as
  // a general purpose output port (it doesn't influence
  // SPI operations).

  pinMode(SCK, OUTPUT);
  pinMode(MOSI, OUTPUT);
  pinMode(SS, OUTPUT);
  
  digitalWrite(SCK, LOW);
  digitalWrite(MOSI, LOW);
  digitalWrite(SS, HIGH);

  // Warning: if the SS pin ever becomes a LOW INPUT then SPI 
  // automatically switches to Slave, so the data direction of 
  // the SS pin MUST be kept as OUTPUT.
  SPCR |= _BV(MSTR);
  SPCR |= _BV(SPE);
}

SPIClass::begin()の入力はありません。

void SPIClass::begin() {
  // Set direction register for SCK and MOSI pin.
  // MISO pin automatically overrides to INPUT.
  // When the SS pin is set as OUTPUT, it can be used as
  // a general purpose output port (it doesn't influence
  // SPI operations).

  pinMode(SCK, OUTPUT);
  pinMode(MOSI, OUTPUT);
  pinMode(SS, OUTPUT);

SCKとMOSI、SSをpinMode()を使って、出力モードに設定します。SSを出力モードにするとSSはSPIとは関係ない通常のデジタルピンになります。

SCKとMOSI、SSは、(Arduino Unoの場合)hardware/arduino/variants/standard/pins_arduino.hで定義されていて、以下に示す変数です。

static const uint8_t SS   = 10;
static const uint8_t MOSI = 11;
static const uint8_t MISO = 12;
static const uint8_t SCK  = 13;
  digitalWrite(SCK, LOW);
  digitalWrite(MOSI, LOW);
  digitalWrite(SS, HIGH);

SCKとMOSIにLOWを、SSにHIGHを出力します。SSをHIGHにする理由はよくわかりません。

  // Warning: if the SS pin ever becomes a LOW INPUT then SPI 
  // automatically switches to Slave, so the data direction of 
  // the SS pin MUST be kept as OUTPUT.
  SPCR |= _BV(MSTR);
  SPCR |= _BV(SPE);
}

SPCRレジスタの、MSTRビットとSPEビットを1にし、マスターモードでSPI通信を有効にします。

バージョン

Arduino 1.0.1



メニューを表示するためにJavaScriptを有効にしてください。

Arduinoで遊ぶページ
Copyright © 2012 garretlab all rights reserved.
inserted by FC2 system