#include <nitro/mi.h>
void MI_DmaSend32( u32 dmaNo,
const void* src,
volatile void* dest,
u32 size );
void MI_DmaSend32_SetUp( u32 dmaNo,
const void* src,
volatile void* dest,
u32 size );
void MI_DmaSend16( u32 dmaNo,
const void* src,
volatile void* dest,
u32 size );
void MI_DmaSend16_SetUp( u32 dmaNo,
const void* src,
volatile void* dest,
u32 size );
void MI_DmaSend32Async( u32 dmaNo,
const void* src,
volatile void* dest,
u32 size,
MIDmaCallback callback,
void* arg );
void MI_DmaSend32Async_SetUp( u32 dmaNo,
const void* src,
volatile void* dest,
u32 size,
MIDmaCallback callback,
void* arg );
void MI_DmaSend16Async( u32 dmaNo,
const void* src,
volatile void* dest,
u32 size,
MIDmaCallback callback,
void* arg );
void MI_DmaSend16Async_SetUp( u32 dmaNo,
const void* src,
volatile void* dest,
u32 size,
MIDmaCallback callback,
void* arg );
dmaNo | DMA channel used. |
src | The transfer source address. |
dest | The transfer destination address. |
size | Transfer size. |
callback | Callback when DMA ends. |
arg | Callback argument when DMA ends. |
None.
Uses DMA to send data to the same address.
The function does not change the address of the transfer destination. It increments only the transfer origin address, and repeatedly transfers contiguous region data to the same address.
The *_SetUp
functions only configure the given settings without actually performing DMA. To actually start DMA, call the MI_DmaRestart
function.
The MI_DmaSend16*
functions transfer in 16-bit units. Both the transfer source address and the transfer destination address must be 2-byte aligned. The MI_DmaSend16*
functions transfer in 32-bit units. Both the transfer source address and the transfer destination address must be 4-byte aligned.
MI_DmaSend16()
and MI_DmaSend32()
wait within the function until DMA completes. MI_DmaSend16Async()
and MI_DmaSend32Async()
call a callback function when DMA ends. The callback, callback
, is a MIDmaCallback
type (a void
type function that takes one void*
argument). callback
is called from the system DMA interrupt handler and therefore is called while interrupts are prohibited.
It is necessary to understand how to use Async-type APIs in order to obtain maximum functionality. Refer to the MI_DmaCopy
function for more information about this.
See the section titled "DMA Controller Bugs" in the reference for the MI_DmaCopy
function.
Uses the following IO registers: DMAn source register (0x40000B0 + 12n), DMAn destination register (0x40000B4 + 12n), and DMAn control register (0x40000B8 + 12n). (n is the DMA channel used.))
MI_DmaCopy*
MI_DmaFill*
MI_DmaClear*
MI_DmaRecv*
MI_CpuSend*
MI_DmaRestart
2009/11/20 Added a description of bugs for the DMA controller.
2007/10/31 Added _SetUp()
.
2005/03/08 Standardized the notation used for the term "interrupt" in Japanese.
2004/12/22 Added a description of calling the callback.
2004/01/30 Initial version.
CONFIDENTIAL