

#include <nitro/mi.h>void MI_DmaPipe32( u32 dmaNo,
volatile const void* src,
volatile void* dest, u32 size );void MI_DmaPipe32_SetUp( u32 dmaNo,
volatile const void* src,
volatile void* dest, u32 size );void MI_DmaPipe16( u32 dmaNo,
volatile const void* src,
volatile void* dest,
u32 size );void MI_DmaPipe16_SetUp( u32 dmaNo,
volatile const void* src,
volatile void* dest,
u32 size );void MI_DmaPipe32Async( u32 dmaNo,
volatile const void* src,
volatile void* dest,
u32 size,MIDmaCallback callback,
void* arg );void MI_DmaPipe32Async_SetUp( u32 dmaNo,
volatile const void* src,
volatile void* dest,
u32 size,MIDmaCallback callback,
void* arg );void MI_DmaPipe16Async( u32 dmaNo,
volatile const void* src,
volatile void* dest,
u32 size,MIDmaCallback callback,
void* arg );void MI_DmaPipe16Async_SetUp( u32 dmaNo,
volatile const void* src,
volatile void* dest,
u32 size,MIDmaCallback callback,
void* arg );| dmaNo | 使用DMAチャンネル |
| src | 転送元アドレス |
| dest | 転送先アドレス |
| size | 転送サイズ |
| callback | DMA終了時のコールバック |
| arg | DMA終了時のコールバック引数 |
なし。
DMA を用いて同じ転送元アドレスから同じ転送先にデータを送り続けます。
*_SetUp() は実際にはDMAを行なわず、その設定のみを行います。実際のDMA開始は MI_DmaRestart() を呼んで下さい。
MI_DmaPipe16(), MI_DmaPipe16Async() は 16ビット単位で転送します。転送元アドレス、転送先アドレスは2バイトアラインメントする必要があります。
MI_DmaPipe32(), MI_DmaPipe32Async() は 32ビット単位で転送します。転送元アドレス、転送先アドレスは4バイトアラインメントする必要があります。
MI_DmaPipe16(), MI_DmaPipe32() はDMAの終了を関数内で待ちます。
MI_DmaPipe16Async(), MI_DmaPipe32Async() は、DMA終了時にコールバック callback を呼びます。コールバックは MIDmaCallback 型 ( void* 引数1つを取る void 型関数 ) です。callback は システムのDMA割り込みハンドラ内から呼び出されますので、割り込み禁止状態で呼び出されます。
Async 型の API の機能を引き出すにはその使用法を十分に理解する必要があります。
これについては、MI_DmaCopy() を参照してください。
MI_DmaCopy() のリファレンス中の「DMAコントローラの不具合」を参照してください。
IOレジスタのDMAnソースレジスタ(0x40000B0 + 12n)、DMAnデスティネーションレジスタ(0x40000B4 + 12n)、DMAnコントロールレジスタ(0x40000B8 + 12n)を使用します。( n は 使用するDMAチャンネルです。)
MI_DmaCopy*, MI_DmaFill*, MI_DmaClear*, MI_DmaSend*, MI_DmaRecv, MI_CpuPipe*, MI_DmaRestart
2009/11/20 DMAコントローラの不具合について追記
2007/10/31 _SetUp() 追加
2007/10/24 初版