#include <twl/mi.h>void MI_NDmaFill( u32 ndmaNo,
void* dest, u32 data, u32 size );
void MI_NDmaFill_SetUp( u32 ndmaNo,
void* dest, u32 data, u32 size );
void MI_NDmaFillAsync( u32 dmaNo,
void* dest, u32 data, u32 size,
MINDmaCallback callback, void* arg );
void MI_NDmaFillAsync_SetUp( u32 dmaNo,
void* dest, u32 data, u32 size,
MINDmaCallback callback, void* arg );
void MI_NDmaFillEx( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaConfig *config );
void MI_NDmaFillEx_SetUp( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaConfig *config );
void MI_NDmaFillExAsync( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaCallback callback, void* arg,
MINDmaConfig *config );
void MI_NDmaFillExAsync_SetUp( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaCallback callback, void* arg,
MINDmaConfig *config );
void MI_NDmaFill_Dev( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaDevice dev );
void MI_NDmaFill_Dev_SetUp( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaDevice dev );
void MI_NDmaFillAsync_Dev( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaCallback callback, void* arg,
MINDmaDevice dev );
void MI_NDmaFillAsync_Dev_SetUp( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaCallback callback, void* arg,
MINDmaDevice dev );
void MI_NDmaFillEx_Dev( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaConfig *config,
MINDmaDevice dev );
void MI_NDmaFillEx_Dev_SetUp( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaConfig *config,
MINDmaDevice dev );
void MI_NDmaFillExAsync_Dev( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaCallback callback, void* arg,
MINDmaConfig *config,
MINDmaDevice dev );
void MI_NDmaFillExAsync_Dev_SetUp( u32 ndmaNo,
void* dest, u32 data, u32 size,
MINDmaCallback callback, void* arg,
MINDmaConfig *config,
MINDmaDevice dev );
| ndmaNo | 使用DMAチャンネル (新規DMAの中で0〜3) |
| dest | 転送先アドレス |
| data | フィルデータ |
| size | 転送サイズ |
| callback | DMA終了時のコールバック |
| arg | DMA終了時のコールバック引数 |
| config | DMA 設定 |
| dev | デバイス起動する場合のデバイス |
なし。
新規 DMA を用いてデータフィルを行います。
(但し、*_SetUp() は設定のみを行います。)
MI_NDmaFill*() は TWL の新規DMAを用いてワード(4byte)単位でデータフィルを行います。転送先アドレスdest は4バイトアラインメントする必要があります。転送サイズ size も4の倍数である必要があります。
使用する新規DMA を、0〜3の番号で ndmaNo で指定します。
data は指定の領域を埋めるデータです。
MI_NDmaFill*() には、
・DMAの終了を関数内で待つか、待たないか
・DMAの詳細な設定をデフォルトのまま行うか、ユーザが指定するか
・DMAを即時に開始するか、周辺デバイスからの割り込みで開始するか
の動作別に関数が用意されています。
また、*_SetUp() は実際にはDMAを行なわず、その設定のみを行います。実際のDMA開始は MI_NDmaRestart() を呼んで下さい。
| 関数 | 関数内でのDMAの終了待ち | 詳細なDMA設定 | DMAの開始 |
|---|---|---|---|
MI_NDmaFill() |
する | デフォルト | 即時 |
MI_NDmaFillAsync() |
しない(Async) | デフォルト | 即時 |
MI_NDmaFillEx() |
する | ユーザ指定 | 即時 |
MI_NDmaFillExAsync() |
しない(Async) | ユーザ指定 | 即時 |
MI_NDmaFill_Dev() |
する | デフォルト | 周辺デバイスからの割り込み |
MI_NDmaFillAsync_Dev() |
しない(Async) | デフォルト | 周辺デバイスからの割り込み |
MI_NDmaFillEx_Dev() |
する | ユーザ指定 | 周辺デバイスからの割り込み |
MI_NDmaFillExAsync_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_NDmaCopy*, MI_NDmaClear*, MI_DmaFill*, MI_CpuFill*, MI_NDmaRestart
新規DMA(overview)
2008/11/19 MINDmaDevice についての参照先を記述
2007/10/31 _SetUp() 追加
2007/09/06 初版