インテルのみ表示可能 — GUID: ptq1481130616950
Ixiasoft
インテルのみ表示可能 — GUID: ptq1481130616950
Ixiasoft
20.5.5.2. 送信ウォーターマーク・レベル
以下のように仮定した例を検討します。†
DMAバースト長 = FIFO_DEPTH - IC_DMA_TDLR †
ここでは、DMAバースト内で転送されるデータアイテムの数は、送信FIFOの空きスペースと同じです。次の2つの異なるウォーターマーク・レベルの設定を検討します。†
- ケース1: IC_DMA_TDLR = 16 †
- 送信FIFOのウォーターマーク・レベル = IC_DMA_TDLR = 16 †
- DMAバースト長 = FIFO_DEPTH - IC_DMA_TDLR = 48 †
- I2C送信FIFO_DEPTH = 64 †
- ブロック・トランザクション・サイズ = 240 †
必要なバースト・トランザクションの数は、ブロックサイズをバーストあたりのデータアイテム数で割った値に等しくなります。
ブロック・トランザクション・サイズ/DMAバースト長 = 240/48 = 5
DMAブロック転送内のバースト・トランザクションの数は5ですが、ウォーターマーク・レベルのIC_DMA_TDLRが極めて低いため、I2Cシリアル送信ラインでデータを送信する必要がある際に送信FIFOにデータが残っていない、送信のアンダーフローが発生する可能性が高くなります。これは、FIFOが空になる前にDMA要求を処理する時間がDMAになかったことにより発生します。
- ケース2: IC_DMA_TDLR = 48 †
- 送信FIFOのウォーターマーク・レベル = IC_DMA_TDLR = 48 †
- DMAバースト長 = FIFO_DEPTH - IC_DMA_TDLR = 16 †
- I2C送信FIFO_DEPTH = 64 †
- ブロック・トランザクション・サイズ = 240 †
ブロック内のバースト・トランザクション数は次のとおりです。 †
ブロック・トランザクション・サイズ/DMAバースト長 = 240/16 = 15 †
このブロック転送の場合、DMAブロック転送には、送信先へのバースト・トランザクションが15あります。ただし、ウォーターマーク・レベルであるIC_ DMA_TDLRが高く、DMAコントローラーには、I2C送信FIFOが空になる前にバースト・トランザクション送信先からの要求に対応する十分な時間があるため、 I2C送信におけるアンダーフローの可能性は低くなります。†
よって、2番目の例では、ブロックあたりのバースト・トランザクションを増やすことでアンダーフローの確率を下げています。そのため、最初の例よりもブロックあたりのバースト量が増加し、バスの使用率が低下する可能性があります。†
したがって、ウォーターマーク・レベルを選択する目的は、ブロックあたりのトランザクション数を最小限に抑えると同時に、アンダーフロー状態が発生する確率を許容レベルに保つことです。これは実際には、I2Cがデータを送信する速度と、DMAがバースト送信先からの要求に応答できる速度の比率の関係です。†