2021/03/28(日)LPC55xx DMA Register : Set valid register

参照: NXP LPC55S1x RM R1.3, 22.6.13項 *1

Set valid register

SETVALID0(set valid 0)レジスタでは、1つまたは複数のDMAチャネルのCTRLSTATレジスタのVALIDビットをセットすることができます。VALIDビットの説明については、22.6.17項「Channel transfer configuration registers」を参照してください。このレジスタは書き込み専用です。

CFGVALIDビットおよびSV(set valid)ビットは、ソフトウェアによるより直接的なDMAブロックタイミング制御を可能にします。一連のディスクリプタの中の各チャネルディスクリプタは、CFGVALIDビットの設定またはチャネルのSETVALIDフラグの設定によって有効にすることができます。

通常、CFGVALIDビットはセットされています。これにより、DMAはチャネルディスクリプタがアクティブであり、実行可能であることを伝えます。DMAは、CFGVALIDビットがセットされたディスクリプタブロックを、ソフトウェアの介入なしに順次実行していきます。

CFGVALIDビットを0に設定したままにしておくと、ソフトウェアが継続をトリガするまで、DMAシーケンスをディスクリプタで一時停止させることができます。DMA送信中に、CFGVALIDが0に設定されたチャネルディスクリプタが見つかった場合、DMAは(以前にバッファリングされた)SETVALID0のそのチャネルに対するフラグをチェックします。見つかった場合、DMAはディスクリプタを有効に設定し、SVビットをクリアし、ディスクリプタの処理を再開します。それ以外の場合、DMAはチャネルのSETVALID0ビットがセットされるまで一時停止します。

*1 : この記事は筆者が私的利用のためにReference Manualを抜粋、翻訳したものです。いかなる問題に対しても責任は負いません。

2021/03/27(土)LPC55xx I2S : FIFO buffer configurations and usage

参照: NXP LPC55S1x RM R1.3, 37.8.4項 *1

FIFO buffer configurations and usage

Flexcomm Interfaceは、処理されるデータのサイズに応じて、いくつかのデータパック/アンパックの実現性をサポートしています。
FIFOの使用方法の詳細は、I2S Configuration register 1(CFG1)レジスタのDATALENフィールドの値と、その他のコンフィギュレーションビットによって決定されます。

DATALENに4~16のデータビット数を指定した場合

  • FIFOは幅32ビット、深さ8エントリで構成されます。
  • バスとFIFO間の各データ転送は、32ビットワードに収まる左右の値のペアになります。左と右のデータの順序は、RIGHTLOWコンフィギュレーションビットで選択できます。
  • ONECHANNEL = 1でチャネルペアを構成した場合、転送されるのは1つの値のみで、公称では左の値となります。

DATALENに17~24のデータビット数を指定した場合

  • この場合、FIFOは幅48ビット、深さ8エントリで構成されます。
  • バスとFIFO間のデータ転送は、PACK48コンフィギュレーションビットおよびDMAが有効かどうかによって異なります。
    • DMAが有効な場合、すべての転送はFIFOWRまたはFIFORDで行われます。DMAが有効でない場合は、I2S機能で選択されたデータ方向に応じて、FIFOWRまたはFIFORDとFIFOWR48HまたはFIFORD48Hで交互に転送されます。
    • いずれの場合も、2回の転送で左右の値のペアが構成されます。左と右のデータの順序は、RIGHTLOWコンフィギュレーションビットで選択できます。
  • PACK48 = 0の場合、2つの転送はいずれも17~24ビットのデータを定義します。PACK48 = 1の場合、最初の転送では32ビットのデータが提供され、2回目の転送では定義されたペアデータを完成させるために必要な残りのデータが提供されます。
  • チャネルペアがONECHANNEL = 1で構成されている場合は、FIFOWRまたはFIFORDレジスタを使用して左の値のみが転送されます。

DATALENに25~32のデータビット数を指定した場合

  • この場合、FIFOは幅32ビット、深さ8エントリで構成されます。
  • バスとFIFOの間の各データ転送は、左から右の順に1つの値となります。
  • ONECHANNEL = 1でチャネルペアを構成した場合は、1つの値のみが転送されます。

*1 : この記事は筆者が私的利用のためにReference Manualを抜粋、翻訳したものです。いかなる問題に対しても責任は負いません。