インテル® Agilex™ ハード・プロセッサー・システムのテクニカル・リファレンス・マニュアル

ID 683567
日付 1/19/2023
Public
ドキュメント目次

19.5.1. マスターにおけるSPIおよびSSPシリアル転送

図 93. マスターにおけるSPIまたはSSPシリアル転送でのソフトウェア・フロー

SPIマスターからのSPIまたはSSPシリアル転送を完了するには、次の手順に従います。

  1. SPIマスターが有効になっている場合は、SPI Enable Register (SPIENR) に0を書き込み、無効にします。
  2. 転送に対してSPIマスターのコントロール・レジスターをセットアップします。これらのレジスターは任意の順序で設定することができます。
    • Control Register 0 (CTRLR0) に書き込みます。SPI転送では、シリアルクロック極性パラメーターおよびシリアルクロック位相パラメーターがターゲットのスレーブデバイスと同じになるように設定する必要があります。
    • 転送モードが受信専用の場合、転送におけるフレーム数から1を引いた値をControl Register 1 (CTRLR1) に書き込みます。例えば、4つのデータフレームを受信する場合は、このレジスターに3を書き込みます。
    • Baud Rate Select Register (BAUDR) に書き込み、転送のボーレートを設定します。
    • Transmit FIFO Threshold Level Resisger (TXFTLR) およびReceive FIFO Threshold Level Register (RXFTLR) に書き込み、FIFOバッファーのしきい値レベルを設定します。
    • IMRレジスターに書き込み、割り込みマスクを設定します。
    • Slave Enable Register (SER) に書き込み、選択するターゲットスレーブを有効にします。この時点でスレーブが有効になっている場合は、送信FIFOバッファーに有効なデータエントリーが1つ提供されると、転送はすぐに開始します。Data Register (DR) に書き込みを行う前にスレーブが有効になっていない場合は、スレーブが有効になるまで転送は開始されません。
  3. SPIENRレジスターに1を書き込み、SPIマスターを有効にします。
  4. ターゲットスレーブに送信するデータを送信FIFOバッファーに書き込みます (DRに書き込む)。この時点においてSERレジスターでスレーブが有効になっていない場合は、スレーブを有効にすることで転送を開始します。
  5. BUSYステータスをポーリングし、転送の完了を待機します。Transmit FIFO Empty Interrupt要求が行われた場合は、送信FIFOバッファーに書き込みを行います (DRに書き込む)。Receive FIFO Full Interrupt要求が行われた場合は、受信FIFOバッファーを読み出します (DRを読み出す)。
  6. 送信FIFOバッファーが空になると、シフト制御ロジックは転送を停止します。転送モードが受信専用 (TMOD = 2) の場合は、指定されているフレーム数が受信されると、シフト制御ロジックは転送を停止します。転送が完了すると、BUSYステータスは0にリセットされます。
  7. 転送モードが送信専用ではない (TMODが1ではない) 場合、受信FIFOバッファーが空になるまで読み出しを行います。
  8. SPIENRに0を書き込み、SPIマスターを無効にします。