# MI_CpuRecv*

## Syntax

  `#include <nitro/mi.h>`
  `void MI_CpuRecv32( volatile const void* src, void* dest, u32 size );`
  `void MI_CpuRecv16( volatile const void* src, void* dest, u32 size );`
  `void MI_CpuRecvFast( volatile const void* src, void* dest, u32 size );`

## Arguments

src | The transfer source address.
dest | The transfer destination address.
size | Transfer size.

## Return Values

None.

## Description

Loads data from the same address in the CPU. The function does not change the address of the transfer source. It increments only the transfer source address, and repeatedly loads data to a contiguous region.

`MI_CpuRecv16()` transfers in 16-bit units. Both the transfer source address and the transfer destination address must be 2-byte aligned.

`MI_CpuRecv32()` transfers in 32-bit units. Both the transfer source address and the transfer destination address must be 4-byte aligned.

`MI_CpuRecvFast()` copies at high speed in 32-bit units. Both the transfer source address and the transfer destination address must be 4-byte aligned. The transfer size is an integral multiple of 4 bytes. It does not have to be an integral multiple of 32 bytes. After transferring in 32-byte units, the fractional part is handled by performing the same process as `MI_CpuRecv32()`.

## Internal Operation

Processing is done by the CPU only and does not use the DMA controller. System calls are not used.

## See Also

`MI_CpuCopy*
MI_CPUFill*
MI_CpuClear*
MI_CpuSend*
MI_DmaRecv*
`

## Revision History

2007/12/26 Added the `MI_CpuRecvFast` function.
2007/10/23 Initial version.

CONFIDENTIAL