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

ID 743810
日付 7/08/2024
Public
ドキュメント目次

7.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 送信チャネルを操作する目的で、alt_dma_txchan_space() および alt_dma_txchan_ioctl() の 2 つの関数が追加で提供されています。alt_dma_txchan_space() 関数は、デバイスのキューに入れることができる追加の送信要求の数を返します。alt_dma_txchan_ioctl() 関数は、送信デバイスのデバイス固有の操作を実行します。

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