ARM7 には SPI (Serial Peripheral Interface) にアクセスするためのレジスタがあります。
SPIは、アドレスバスに直接接続されていないデバイスとのデータのやり取りに使用します。
IO命令の代わりのようなものです。
SPIを通してアクセスするデバイス
レジスタ
コントロールレジスタ |
0x040001C0:16 |
SERIAL_CR |
データレジスタ |
0x040001C2:16 |
SERIAL_DATA |
ビット |
アクセス |
説明 |
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) |
デバイス選択ビット :
※デバイス選択ビットと、クロックレートのビットは同じ値を使います。
チップセレクトホールドビットは、最後のデータユニットを転送する直前に、自動的にクリアされます。
最後のデータユニットの転送後に、WaitByLoop(3) を呼び出すようにしてください。
ビット |
説明 |
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)
最終更新:2007年07月13日 21:44