#include <twl/mi.h>void MI_NDmaCopy( u32 ndmaNo,
const void* src, void* dest, u32 size );
void MI_NDmaCopy_SetUp( u32 ndmaNo,
const void* src, void* dest, u32 size );
void MI_NDmaCopyAsync( u32 dmaNo,
const void* src, void* dest, u32 size,
MINDmaCallback callback, void* arg );
void MI_NDmaCopyAsync_SetUp( u32 dmaNo,
const void* src, void* dest, u32 size,
MINDmaCallback callback, void* arg );
void MI_NDmaCopyEx( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaConfig *config );
void MI_NDmaCopyEx_SetUp( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaConfig *config );
void MI_NDmaCopyExAsync( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaCallback callback, void* arg,
MINDmaConfig *config );
void MI_NDmaCopyExAsync_SetUp( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaCallback callback, void* arg,
MINDmaConfig *config );
void MI_NDmaCopy_Dev( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaDevice dev );
void MI_NDmaCopy_Dev_SetUp( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaDevice dev );
void MI_NDmaCopyAsync_Dev( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaCallback callback, void* arg,
MINDmaDevice dev );
void MI_NDmaCopyAsync_Dev_SetUp( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaCallback callback, void* arg,
MINDmaDevice dev );
void MI_NDmaCopyEx_Dev( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaConfig *config,
MINDmaDevice dev );
void MI_NDmaCopyEx_Dev_SetUp( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaConfig *config,
MINDmaDevice dev );
void MI_NDmaCopyExAsync_Dev( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaCallback callback, void* arg,
MINDmaConfig *config,
MINDmaDevice dev );
void MI_NDmaCopyExAsync_Dev_SetUp( u32 ndmaNo,
const void* src, void* dest, u32 size,
MINDmaCallback callback, void* arg,
MINDmaConfig *config,
MINDmaDevice dev );
| ndmaNo | 使用DMAチャンネル (新規DMAの中で0〜3) |
| src | 転送元アドレス |
| dest | 転送先アドレス |
| size | 転送サイズ |
| callback | DMA終了時のコールバック |
| arg | DMA終了時のコールバック引数 |
| config | DMA 設定 |
| dev | デバイス起動する場合のデバイス |
なし。
新規 DMA を用いてコピーを行います。
(但し、*_SetUp() は設定のみを行います。)
MI_NDmaCopy*は TWL の新規DMAを用いてワード(4byte)単位でコピーを行います。転送元アドレス src、転送先アドレスdest は4バイトアラインメントする必要があります。転送サイズ size も4の倍数である必要があります。
使用する新規DMA を、0〜3の番号で ndmaNo で指定します。
MI_NDmaCopy*() には、
・DMAの終了を関数内で待つか、待たないか
・DMAの詳細な設定をデフォルトのまま行うか、ユーザが指定するか
・DMAを即時に開始するか、周辺デバイスからの割り込みで開始するか
の動作別に関数が用意されています。
また、*_SetUp() は実際にはDMAを行なわず、その設定のみを行います。実際のDMA開始は MI_NDmaRestart() を呼んで下さい。
| 関数 | 関数内でのDMAの終了待ち | 詳細なDMA設定 | DMAの開始 |
|---|---|---|---|
MI_NDmaCopy() |
する | デフォルト | 即時 |
MI_NDmaCopyAsync() |
しない(Async) | デフォルト | 即時 |
MI_NDmaCopyEx() |
する | ユーザ指定 | 即時 |
MI_NDmaCopyExAsync() |
しない(Async) | ユーザ指定 | 即時 |
MI_NDmaCopy_Dev() |
する | デフォルト | 周辺デバイスからの割り込み |
MI_NDmaCopyAsync_Dev() |
しない(Async) | デフォルト | 周辺デバイスからの割り込み |
MI_NDmaCopyEx_Dev() |
する | ユーザ指定 | 周辺デバイスからの割り込み |
MI_NDmaCopyExAsync_Dev() |
しない(Async) | ユーザ指定 | 周辺デバイスからの割り込み |
Async 型の関数は、DMA終了時にコールバック callback を呼びます。コールバックは MINDmaCallback 型 ( void* 引数1つを取る void 型関数 ) です。callback は システムのDMA割り込みハンドラ内から呼び出されますので、割り込み禁止状態で呼び出されます。
Async 型の API の機能を引き出すにはその使用法を十分に理解する必要があります。
これについては、MI_DmaCopy() を参照してください。
config はDMA の動作を詳細に決定する構造体へのポインタです。
dev は周辺デバイス起動DMA を行うときの、デバイスを指定します。指定できる値については、新規DMA(overview) の「DMA 起動のタイミングについて」 を参照してください。
IOレジスタの新規DMAレジスタを使用します。
MI_NDmaFill*, MI_NDmaClear*, MI_DmaCopy*, MI_CpuCopy*, MI_NDmaRestart
新規DMA(overview)
2008/11/19 MINDmaDevice についての参照先を記述
2007/10/31 _SetUp() 追加
2007/09/06 初版