Nios® Vプロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 10/31/2022
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

6.9.1. DMA 送信チャネル

DMA 送信要求は、DMA 送信デバイス ハンドルを使用してキューに入れられます。ハンドルを取得するには、alt_dma_txchan_open()関数を使用します。この関数は、 system.hで定義されているように、使用するデバイスの名前である単一の引数を取ります。

DMA 送信デバイス dma_0 のファイルハンドルの取得

#include <stddef.h>

#include "sys/alt_dma.h"

int main(void) {
  alt_dma_txchan tx;
  tx = alt_dma_txchan_open("/dev/dma_0");
  if (tx == NULL) {
    /* Error */
  } else {
    /* Success */
  }
  return 0;
}

このハンドルを使用して、送信リクエストを投稿できます。 alt_dma_txchan_send().プロトタイプは次のとおりです。

typedef void(alt_txchan_done)(void * handle);
int alt_dma_txchan_send(alt_dma_txchan dma,
  const void * from,
    alt_u32 length,
    alt_txchan_done * done,
    void * handle);

alt_dma_txchan_send() を呼び出すと、送信リクエストがチャネルdmaにポストされます。 引数 lengthは送信するデータのバイト数を指定し、引数fromは送信元アドレスを指定します。 この関数は、完全な DMA トランザクションが完了する前に戻ります。戻り値は、リクエストが正常にキューに入れられたかどうかを示します。 負の戻り値は、リクエストが失敗したことを示します。 トランザクションが完了すると、ユーザー指定の関数doneが引数handleを使用して呼び出され、通知が行われます。

DMA 送信チャネルを操作するために、次の 2 つの追加関数が提供されています。 alt_dma_txchan_space()、 と alt_dma_txchan_ioctl().の alt_dma_txchan_space() 関数は、デバイスのキューに入れることができる追加の送信要求の数を返します。alt_dma_txchan_ioctl()関数は、送信デバイスのデバイス固有の操作を実行します。

注: Memory-Mapped® (Avalon-MM®) DMAデバイスを使用してハードウェアに送信する (メモリー間転送ではない)場合、リクエスト引数をALT_DMA_TX_ONLY_ONに設定してalt_dma_txchan_ioctl()関数を呼び出します。