MI_VBlankDmaCopy*

構文

#include <nitro/mi.h>

void MI_VBlankDmaCopy32( u32 dmaNo, const void* src, void* dest, u32 size );
void MI_VBlankDmaCopy16( u32 dmaNo, const void* src, void* dest, u32 size );

void MI_VBlankDmaCopy32Async( u32 dmaNo, const void* src, void* dest, u32 size,
                       MIDmaCallback callback, void* arg );
void MI_VBlankDmaCopy16Async( u32 dmaNo, const void* src, void* dest, u32 size,
                       MIDmaCallback callback, void* arg );

引数

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

返り値

なし。

説明

DMA を用いて V ブランクコピーを行います。
Vブランクが発生したときに DMA が起動します。

MI_VBlankDmaCopy16(), MI_VBlankDmaCopy16Async() は 16ビット単位でコピーを行います。転送元アドレス、転送先アドレスは2バイトアラインメントする必要があります。
MI_VBlankDmaCopy32(), MI_VBlankDmaCopy32Async() は 32ビット単位でコピーを行います。転送元アドレス、転送先アドレスは4バイトアラインメントする必要があります。

MI_VBlankDmaCopy16(), MI_VBlankDmaCopy32() は V ブランク発生時に DMA を起動して終了します。
MI_VBlankDmaCopy16Async(), MI_VBlankDmaCopy32Async() は、V ブランク発生時に DMA を起動して、DMA 終了時にコールバック callback を呼びます。コールバックは MIDmaCallback 型 ( void* 引数1つを取る void 型関数 ) です。callback は システムの DMA 割り込みハンドラ内から呼び出されますので、割り込み禁止状態で呼び出されます。

Async 型の API の機能を引き出すにはその使用法を十分に理解する必要があります。


DMAコントローラの不具合

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

内部動作

IOレジスタのDMAnソースレジスタ(0x40000B0 + 12n)、DMAnデスティネーションレジスタ(0x40000B4 + 12n)、DMAnコントロールレジスタ(0x40000B8 + 12n)を使用します。( n は 使用するDMAチャンネルです。)

参照

MI_DmaCopy*

履歴

2009/11/20 DMAコントローラの不具合について追記
2005/03/08 用語統一 [割込み] → [割り込み]
2004/12/22 callback の呼び出しについての記述を追加
2003/12/01 初版