MI_DmaFill*

構文

#include <nitro/mi.h>

void MI_DmaFill32( u32 dmaNo,
          void* dest,
          u32 data,
          u32 size );


void MI_DmaFill32_SetUp( u32 dmaNo,
          void* dest,
          u32 data,
          u32 size );


void MI_DmaFill16( u32 dmaNo,
          void* dest,
          u16 data,
          u32 size );


void MI_DmaFill16_SetUp( u32 dmaNo,
          void* dest,
          u16 data,
          u32 size );


void MI_DmaFill32Async( u32 dmaNo,
          void* dest,
          u32 data,
          u32 size,
          MIDmaCallback callback,
          void* arg );


void MI_DmaFill32Async_SetUp( u32 dmaNo,
          void* dest,
          u32 data,
          u32 size,
          MIDmaCallback callback,
          void* arg );


void MI_DmaFill16Async( u32 dmaNo,
          void* dest,
          u16 data,
          u32 size,
          MIDmaCallback callback,
          void* arg );


void MI_DmaFill16Async_SetUp( u32 dmaNo,
          void* dest,
          u16 data,
          u32 size,
          MIDmaCallback callback,
          void* arg );

引数

dmaNo 使用DMAチャンネル
dest 転送先アドレス
data 転送データ
size 転送サイズ
callback DMA終了時のコールバック
arg DMA終了時のコールバック引数

返り値

なし。

説明

DMA を用いて、メモリを指定のデータで埋めます。

*_SetUp() は実際にはDMAを行なわず、その設定のみを行います。実際のDMA開始は MI_DmaRestart() を呼んで下さい。

MI_DmaFill16*() は 16ビット単位でメモリを指定のデータで埋めます。転送先アドレスは2バイトアラインメントする必要があります。
MI_DmaFill32*() は 32ビット単位でメモリを指定のデータで埋めます。転送先アドレスは4バイトアラインメントする必要があります。

MI_DmaFill16(), MI_DmaFill32() はDMAの終了を関数内で待ちます。
MI_DmaFill16Async*(), MI_DmaFill32Async*() は、DMA終了時にコールバック callback を呼びます。コールバックは MIDmaCallback 型 ( void* 引数1つを取る void 型関数 ) です。callback は システムのDMA割り込みハンドラ内から呼び出されますので、割り込み禁止状態で呼び出されます。


DMAコントローラの不具合

MI_DmaCopy() のリファレンス中の「DMAコントローラの不具合」を参照してください。

内部動作

IOレジスタのDMAnソースレジスタ(0x40000B0 + 12n)、DMAnデスティネーションレジスタ(0x40000B4 + 12n)、DMAnコントロールレジスタ(0x40000B8 + 12n)を使用します。( n は 使用するDMAチャンネルです。)
また、フィルのために HW_DMA_CLEAR_DATA_BUF 領域を使用しています。これは、TEG では Shared Memory に取られていますが、TSではIOレジスタにマッピングされます。

参照

MI_DmaCopy*, MI_DmaClear*, MI_DmaSend*,MI_CpuFill*, MI_DmaRestart

履歴

2009/11/30 16bitデータを扱う関数で data 引数が u32となっていたのを u16 に修正
2009/11/20 DMAコントローラの不具合について追記
2007/10/31 _SetUp() 追加
2005/03/08 用語統一 [割込み] → [割り込み]
2004/12/22 callback の呼び出しについての記述を追加
2003/12/01 初版