
#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 初版