# MI_VBlankNDmaCopy*

## Syntax

  `#include <twl/mi.h>`
  `void MI_VBlankNDmaCopy( u32 ndmaNo,`
  `const void *src,
  void *dest,`
  `u32 size );`
  `void MI_VBlankNDmaCopyAsync( u32 ndmaNo,`
  `const void *src,
  void *dest,`
  `u32 size,
  MINDmaCallback calback,
  void* arg );`

## Arguments

ndmaNo | 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.

## Return Values

None.

## Description

This function uses the new DMA to perform a V-Blank copy. When a V-Blank starts, DMA starts.

It uses the new DMA to perform copies in word (4-byte) units. Both the transfer source address (src) and the transfer destination address (dest) must be 4-byte aligned. The transfer size (`size`) needs to be a multiple of 4.

`MI_VBlankNDmaCopy()` starts DMA when a V-Blank is generated, and then waits for it to end. The `MI_VBlankNDmaCopyAsync` function starts DMA when a V-blank is generated. It calls `callback` when ending DMA. The callback type is `MINDmaCallback` (a `void`-type function that takes one `void*` argument). `callback` is called from the system DMA interrupt handler and therefore is called even if interrupts are prohibited.

It is necessary to understand how to use Async-type APIs in order to obtain maximum functionality.

## Internal Operation

Accesses the new DMA register.

## See Also

`MI_NDmaCopy
`

## Revision History

2007/10/04 Initial version.

CONFIDENTIAL