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) は他の用途には使用できません。
bLsbFirst
, bPolarity
, bPhase
, u8ClockDiviser
は接続するデバイスのデータシートより値を決めてください。
SPI Mode と bPolarity
, bPhase
の関係
bPolarity
, bPhase
の関係vAHI_SpiSelect()
セレクトピンを有効化します。
vAHI_SpiStop()
は vAHI_SpiSelect(0)
の呼び出しと同じです。
vAHI_SpiStartTransfer()
SPI転送を開始します。本関数呼び出し直後に転送を開始しますが、転送の終了を待たずに制御を返します。後述の bAHI_SpiPollBusy()
により転送終了を待ちます。
bAHI_SpiPollBusy()
SPI 転送のポーリング待ちを行う。TRUE
の間は SPI の転送中を意味します。
u32AHI_SpiReadTransfer32()
SPI転送が終了した後に呼び出し、転送時の受信データ (SPIMISO) を読み出します。読み出したデータは LSB 側に右詰めされています。
最終更新