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

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

レジスタ

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

SERIAL_CR

ビットアクセス説明
15R/WSPIバス有効
14R/W割り込みリクエスト
13..12R00 未使用
11R/Wチップセレクトホールド
10R/W転送サイズ 0: 8 bit モード, 1: 16 bit モード(バグ有?)
9..8R/Wデバイス選択
7Rビジーフラグ
6..2R00000 未使用
1..0R/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)

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-10-27 (日) 17:45:24 (1508d)