システム - SPI


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ARM7 には SPI (Serial Peripheral Interface) にアクセスするためのレジスタがあります。
SPIは、アドレスバスに直接接続されていないデバイスとのデータのやり取りに使用します。
IO命令の代わりのようなものです。

SPIを通してアクセスするデバイス


レジスタ

コントロールレジスタ 0x040001C0:16 SERIAL_CR
データレジスタ 0x040001C2:16 SERIAL_DATA


  • SERIAL_CR
ビット アクセス 説明
15 R/W SPIバス有効
14 R/W 割り込みリクエスト
13..12 R 00 未使用
11 R/W チップセレクトホールド
10 R/W 転送サイズ 0: 8 bit モード, 1: 16 bit モード(バグ有?)
9..8 R/W デバイス選択
7 R ビジーフラグ
6..2 R 00000 未使用
1..0 R/W クロックレート (00: 4 MHz, 01: 2 MHz, 10: 1 MHz, 11: 512 KHz)


デバイス選択ビット :
0 パワーマネジメント
1 ファームウェア
2 タッチスクリーン
3 接続されていません
※デバイス選択ビットと、クロックレートのビットは同じ値を使います。

チップセレクトホールドビットは、最後のデータユニットを転送する直前に、自動的にクリアされます。
最後のデータユニットの転送後に、WaitByLoop(3) を呼び出すようにしてください。



  • SERIAL_DATA
ビット 説明
8..15 未使用
0..7 データ

SPIデータを読み込む時には、最初に SERIAL_DATA に ダミー値(0が良いようです)を書き込んでください。
書き込むと同時に、読み込み用データがセットされ、読み込み可能になります。

データが転送されている間、SERIAL_CR のビジーフラグがONになります。
ダミー値を書き込んだ後、ビジーフラグはクリアされ、割り込みが呼び出されるようです。
割り込みを使う場合は、ここで読み込むみたいです。

SERIAL_DATAには8bitモードと16bitモードがありますが、通常8bitモードしか使わないみたいです。



devKitProで使われる定数

#define SERIAL_CR   (*(vuint16*)0x040001C0)
#define SERIAL_DATA (*(vuint16*)0x040001C2)

#define SPI_ENABLE (1<<15)
#define SPI_IRQ    (1<<14)
#define SPI_BUSY   (1<<7)

#define SPI_BAUD_4MHZ   (0<<0)
#define SPI_BAUD_2MHZ   (1<<0)
#define SPI_BAUD_1MHZ   (2<<0)
#define SPI_BAUD_512KHZ (3<<0)

#define SPI_BYTE_MODE   (0<<10)
#define SPI_HWORD_MODE  (1<<10)

#define SPI_NOT_LAST (1 << 11)

#define SPI_DEVICE_POWER    (0 << 8)
#define SPI_DEVICE_FIRMWARE (1 << 8)
#define SPI_DEVICE_TOUCH    (2 << 8)




ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。