Arduinoで遊ぶページ

Arduinoで遊んだ結果を残すページです。
garretlab
SPI関連レジスタ

SPI関連レジスタ

概要

SPIでは、SPCRとSPSR、SPDRというレジスタを利用します。

SPCR

SPCR(SPI Control Register)は、以下の通りです。

SPCR
ビット 7 6 5 4 3 2 1 0
名称 SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0

SPSRレジスタのSPIFビットと、かつ、SREGのグローバル割り込みビットとが設定されているときに、SPIEビット(SPI Interrupt Enable)が設定されていれば、SPI割り込みを発生させます。

SPEビット(SPI Enabl)が設定されているときは、SPIが有効になります。SPIClass::begin()で設定します。

DORD(Data Order)ビットが1のときは、ワードのLSBから送信します。0のときは、MSBから送信します。このレジスタ、SPIClass::setBitOrder()で設定します。

MSTRビット(Master/Slave Select)が1のときはマスターSPIモードに、0のときはスレーブSPIモードになります。MSTRが設定されているときに、SS(Arduino Unoでは10番ピン)が入力モードでLOWになると、MSTRは0になり、SPSRのSPIFが設定されます。Arduinoでは、マスターSPIモードだけがサポートされています。

CPOLビット(Clock Polarity)が1のときは、アイドル時にSCKはHIGHになります。0のときは、アイドル時にはLOWになります。このビットとCPHAビットは、SPIClass::setDataMode()で設定します。

CPHAビット(Clock Phase)は、クロックの立ち上がりのときにデータを取得する(0のとき)か、立下りのときに取得する(1のとき)かを決定します。このビットとCPOLビットは、SPIClass::setDataMode()で設定します。

SPR1、SPR0(SPI Clock Rate Select 1 and 0)ビットは、マスター動作しているときの、クロックの分周比を決定します。SPI2Xは、SPSRレジスタのビットです。これらのレジスタは、SPIClass::setClockDivider()で設定します。

SPI2X SPR1 SPR2 分周比
0 0 0 1/4
0 0 1 1/16
0 1 0 1/64
0 1 1 1/128
1 0 0 1/2
1 0 1 1/8
1 1 0 1/32
1 1 1 1/64

SPSR

SPSR(SPI Status Register)は、以下の通りです。

SPSR
ビット 7 6 5 4 3 2 1 0
名称 SPIF WCOL - - - - - SPI2X

シリアルデータ転送が完了するとSPIF(SPI Interrupt Flag)が設定されます。SPCRのSPIEが設定され、グローバル割り込みが許可されていると、割り込みが発生します。

WCOL(Write COLlision Flag)は、データ転送中にSPDRに書き込みが起こると設定されます。

SPI2X(Double SPI Speed Bit)は、SPCRのSPR1・SPR0とあわせて、クロックの分周比を背底します。

SPDR

SPDR(SPI Data Register)は、以下の通りです。

SPCR
ビット 7 6 5 4 3 2 1 0
名称 MSB LSB

SPDRは、転送データを保持するレジスタです。

バージョン

Arduino 1.0.1



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

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