SPI
SPIバスはセンサーやメモリデバイス等の読み書きに利用されます。I2C に比べ使用するピン数が多いものの、高速な転送が必要なデバイスによく使用されます。
Samp_SPI サンプルを参考にしてください。
SPIバスを利用する場合、SPI セレクトピンを必要なデバイス分だけ確保されます。ピンは SEISEL0 のピンから順に割り当てられます。
以下に初期化と読み書きの例を挙げます。SPIでは、書き込みと読み出しを同時に行うこともできます。
センサーでのデータ取得時に一般的な例として、コマンド送信して続いて結果を得るという手続きを挙げます。
SPIの初期化(デバイス使用開始)
SPI のセレクトピンの有効化
SPI 転送1 (8ビット)、送信を目的とします。
SPI 転送2 (16ビット)、受信を目的とします。
各転送で必ずポーリング待ち(while(bAHI_SpiPollBusy());
)を行う必要があります。
主要関数
vAHI_SpiConfigure()
本関数は SPI デバイスの初期化を行い利用可能にします。SPIデバイスを解放する場合は vAHI_SpiDisable()
を呼びます。
セレクトピンは最低でも SPISEL0 がSPI専用として割り当てられます。つまり SPIを使用する場合 SPISEL0(DIO19) は他の用途には使用できません。
引数名 | 解説 |
| 有効にするチップセレクトピンを指定する。 |
|
|
|
|
|
|
| クロック周波数の指定。0..63 を指定する。0 では 16MHz 駆動し、それ以外は |
| SPI転送終了時に割り込みを発生させる。※ サンプル等では使用していません。 |
|
|
bLsbFirst
, bPolarity
, bPhase
, u8ClockDiviser
は接続するデバイスのデータシートより値を決めてください。
SPI Mode と bPolarity
, bPhase
の関係
bPolarity
, bPhase
の関係SPI Mode |
|
|
0 |
|
|
1 |
|
|
2 |
|
|
3 |
|
|
vAHI_SpiSelect()
セレクトピンを有効化します。
引数名 | 解説 |
|
|
vAHI_SpiStop()
は vAHI_SpiSelect(0)
の呼び出しと同じです。
vAHI_SpiStartTransfer()
SPI転送を開始します。本関数呼び出し直後に転送を開始しますが、転送の終了を待たずに制御を返します。後述の bAHI_SpiPollBusy()
により転送終了を待ちます。
引数名 | 解説 |
| 転送長を指定する。 |
| 出力するビット列。32bitに満たない転送の場合、データは LSB 側に右詰めする。(8bit の場合、bit0 〜 bit7 に格納する) |
bAHI_SpiPollBusy()
SPI 転送のポーリング待ちを行う。TRUE
の間は SPI の転送中を意味します。
u32AHI_SpiReadTransfer32()
SPI転送が終了した後に呼び出し、転送時の受信データ (SPIMISO) を読み出します。読み出したデータは LSB 側に右詰めされています。
最終更新