Arduinoで遊ぶページ

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

SPIClass::setDataMode()

概要

SPIClass::setDataMode()は、クロック極性とクロックフェーズを設定します。リファレンスはこちら

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

ソースコード

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

void SPIClass::setDataMode(uint8_t mode)
{
  SPCR = (SPCR & ~SPI_MODE_MASK) | mode;
}

引数に従って、SPCRレジスタを操作します。

引数に指定できるのは、SPI_MODE0、SPI_MODE1、 SPI_MODE2、SPI_MODE3です。SPIMODE_MASKは、SPCRのビット2(CPHA)とビット3(CPOL)を指定するためのマスクです。これらは、libraries/SPI/SPI.hで、以下のように定義されています。

#define SPI_MODE0 0x00
#define SPI_MODE1 0x04
#define SPI_MODE2 0x08
#define SPI_MODE3 0x0C

#define SPI_MODE_MASK 0x0C

SPI_MODE_MASKを2進数にすると、0b00001100となり、これは、SPCRレジスタのCPOLビットとCPHAビットを表しています。SPCR & ~SPI_MODE_MASKを計算すると、SPCRレジスタのCPOLビットとCPHAビットを0にしたものになり、その後、modeで論理和をとることにより、modeに指定された値を設定することになります。

各モードにより、CPOLとCPHAは以下のように設定されることになります。

モード クロック極性(CPOL) クロックフェーズ(CPHA)
SPI_MODE0 0 0
SPI_MODE1 0 1
SPI_MODE2 1 0
SPI_MODE3 1 1

バージョン

Arduino 1.0.1



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

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