# CAMERA_DmaRecv

## 構文

  `#include <twl/camera.h>`
  `void CAMERA_DmaRecv(u32 dmaNo, void *dest, u32 unit, u32 length);`

## 引数

dmaNo | 使用する新規DMAチャンネル(0〜3)
dest | 転送先アドレス
unit | 1回の転送サイズ(横サイズ×ライン数)
length | 転送する合計サイズ(フレームサイズ)

## 返り値

なし

## 説明

カメラバッファからフレームデータを受信します。
本関数は内部で新規DMAを用いてデータを受信しています。
新規DMAについての詳しい説明は、`MI_NDmaCopy()` 等を参照してください。
1回の転送サイズを求める際に使用する横サイズ、ライン数は、それぞれ1ラインの転送バイト数と1回の転送ライン数を意味しています。
転送バイト数は、1ピクセル2バイトになるので、横サイズ×2として計算してください。
横サイズは、`CAMERA_SetTrimmingParams()` 等を呼び出した場合は、そこで設定した幅となり、呼び出していなければ、`CAMERA_I2CSize*()` で設定した幅となります。
（どちらの関数も呼び出していない場合は、カメラ解像度の初期値の幅となります。初期値については概要を参照してください。）
ライン数は `CAMERA_SetTransferLines()` で設定したライン数で計算してください。`CAMERA_SetTransferLines()` で値を設定しなかった場合の初期ライン数は 1 です。
また、最終的に指定する1回の転送サイズは 2KB (1024ピクセル) 以内になるように調整してください。
以下に具体的なコードを示します。

> (例)
> `#define WIDTH 256
> #define HEIGHT 192
> CAMERA_SetTrimmingParamsCenter(WIDTH, HEIGHT, 320, 240);
> CAMERA_SetTrimming(TRUE);
> CAMERA_SetTransferLines(CAMERA_GET_MAX_LINES(WIDTH)); /* 256*4=1024ピクセル */
> .
> .
> .
> CAMERA_DmaRecv(0, buffer, CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT));`

## 参照

`CAMERA_DmaRecvAsync、CAMERA_SetTransferLines、CAMERA_SetTrimmingParams、CAMERA_SetTrimming、CAMERA_I2CSize*、CAMERA_GetBytesAtOnce、CAMERA_GET_FRAME_BYTES、CAMERA_GET_MAX_LINES`

## 履歴

2008/09/11 サンプルコードの変更
2007/11/14 横サイズの指定について説明修正
2007/10/22 説明追加
2007/10/02 初版