#include <twl/mi.h>void MI_NDmaPipe( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size );
void MI_NDmaPipe_SetUp( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size );
void MI_NDmaPipeAsync( u32 dmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaCallback callback,
void* arg );
void MI_NDmaPipeAsync_SetUp( u32 dmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaCallback callback,
void* arg );
void MI_NDmaPipeEx( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaConfig *config );
void MI_NDmaPipeEx_SetUp( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaConfig *config );
void MI_NDmaPipeExAsync( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaCallback callback,
void* arg,
MINDmaConfig *config );
void MI_NDmaPipeExAsync_SetUp( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaCallback callback,
void* arg,
MINDmaConfig *config );
void MI_NDmaPipe_Dev( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaDevice dev );
void MI_NDmaPipe_Dev_SetUp( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaDevice dev );
void MI_NDmaPipeAsync_Dev( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaCallback callback,
void* arg,
MINDmaDevice dev );
void MI_NDmaPipeAsync_Dev_SetUp( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaCallback callback,
void* arg,
MINDmaDevice dev );
void MI_NDmaPipeEx_Dev( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaConfig *config,
MINDmaDevice dev );
void MI_NDmaPipeEx_Dev_SetUp( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaConfig *config,
MINDmaDevice dev );
void MI_NDmaPipeExAsync_Dev( u32 ndmaNo,
volatile const void* src,
volatile void* dest,
u32 size,
MINDmaCallback callback,
void* arg,
MINDmaConfig *config,
MINDmaDevice dev );
void MI_NDmaPipeExAsync_Dev_SetUp( u32 ndmaNo,
volatile const void* src,
volatile 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_NDmaPipe*は TWL の新規DMAを用いてワード(4byte)単位でデータを送り続けます。転送元アドレス
src、転送先アドレスdest は4バイトアラインメントする必要があります。転送サイズ size も4の倍数である必要があります。
使用する新規DMA を、0〜3の番号で ndmaNo で指定します。
MI_NDmaPipe*() には、
・DMAの終了を関数内で待つか、待たないか
・DMAの詳細な設定をデフォルトのまま行うか、ユーザが指定するか
・DMAを即時に開始するか、周辺デバイスからの割り込みで開始するか
の動作別に関数が用意されています。
また、*_SetUp() は実際にはDMAを行なわず、その設定のみを行います。実際のDMA開始は MI_NDmaRestart() を呼んで下さい。
| 関数 | 関数内でのDMAの終了待ち | 詳細なDMA設定 | DMAの開始 |
|---|---|---|---|
MI_NDmaPipe() |
する | デフォルト | 即時 |
MI_NDmaPipeAsync() |
しない(Async) | デフォルト | 即時 |
MI_NDmaPipeEx() |
する | ユーザ指定 | 即時 |
MI_NDmaPipeExAsync() |
しない(Async) | ユーザ指定 | 即時 |
MI_NDmaPipe_Dev() |
する | デフォルト | 周辺デバイスからの割り込み |
MI_NDmaPipeAsync_Dev() |
しない(Async) | デフォルト | 周辺デバイスからの割り込み |
MI_NDmaPipeEx_Dev() |
する | ユーザ指定 | 周辺デバイスからの割り込み |
MI_NDmaPipeExAsync_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_NDmaSend*, MI_NDmaRecv, MI_DmaPipe*, MI_CpuPipe*, MI_NDmaRestart
新規DMA(overview)
2008/11/19 MINDmaDevice についての参照先を記述
2007/10/31 _SetUp() 追加
2007/10/24 初版