carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

要望があるようなのでカメラの初期化コードを公開

SH2Aでカメラの初期化処理を参考にしたい方がいらっしゃるようなので、初期化処理を貼り付けます。
残念ながらプロジェクトサンプルは、ありません。時間があれば作るのですが、ちょっと今は作れそうにないので、初期化コードだけでご勘弁願います。
そのままでは、ビルドできないと思いますので、参考程度でお願いします。

ちなみに、これは、秋月のカメラモジュールMTV-54K0DNとPSPLCDを利用している環境での処理です。
※マクロも主要な箇所だけ抜き出して貼り付けました。

#define VD_VSTART_VALIDDATA_TOP (18)/* TOP 領域の垂直方向キャプチャタイミング */
#define VD_VSTART_VALIDDATA_BTM (281)/* BOTTOM 領域の垂直方向キャプチャタイミング */
#define VD_HSTART_VALIDDATA (308)
/* 水平方向のキャプチャタイミング 余分な領域が入るので調整する -32 */
#define VD_INPUT_HEIGHT (240)/* 入力有効映像のライン数 */
#define VD_INPUT_WIDTH (720)/* 入力有効映像のピクセル数 */

void Camera_Init(void)
{
////////////////////////////////////////////////////////////////////////////
// ポート機能の選択
////////////////////////////////////////////////////////////////////////////
PORT.PFCR2.WORD = 0x0003;// DV_CLK
PORT.PFCR1.WORD = 0x3333;// DV_DATA7, DV_DATA6, DV_DATA5, DV_DATA4
PORT.PFCR0.WORD = 0x3333;// DV_DATA3, DV_DATA2, DV_DATA1, DV_DATA0

////////////////////////////////////////////////////////////////////////////
// ビデオディスプレイコントローラの初期化
////////////////////////////////////////////////////////////////////////////
// ■映像動作モードレジスタ
VDC3.VIDEO_MODE.LONG = 0x10000010;
/*
VDC3.VIDEO_MODE.BIT.RGB565 = 1; // 0:「27.6.1(4)RGB888→RGB565 変換」に示す演算による変換
// 1:下位ビット切り捨て
VDC3.VIDEO_MODE.BIT.INV_CbCr = 0; // 0:通常
// 1:反転
VDC3.VIDEO_MODE.BIT.BURST_MODE_DISP = 0;
// 0:16Byte バースト転送
// 1:128Byte バースト転送
VDC3.VIDEO_MODE.BIT.BURST_MODE_MAIN = 0;
// 0:16Byte バースト転送
// 1:128Byte バースト転送
VDC3.VIDEO_MODE.BIT.ENDIAN_DISP = 0;// 0:ビッグエンディアン
// 1:リトルエンディアン
VDC3.VIDEO_MODE.BIT.ENDIAN_MAIN = 0;// 0:ビッグエンディアン
// 1:リトルエンディアン
VDC3.VIDEO_MODE.BIT.SEL_EXSYNC = 0; // 0:無効
// 1:有効
VDC3.VIDEO_MODE.BIT.SEL_656601 = 0; // 0:BT.656 入力(SEL_EXSYNC=0 に必ず設定してください)
// 1:BT.601 入力(SEL_EXSYNC=1 に必ず設定してください)
VDC3.VIDEO_MODE.BIT.SEL_525625 = 0; // 0:525 ライン(NTSC
// 1:625 ライン(PAL)
VDC3.VIDEO_MODE.BIT.VIDEO_MODE = 1; // 0:映像録画モード
// 1:映像表示モード
VDC3.VIDEO_MODE.BIT.VIDEO_DISP_EXE = 0;
// 0:不許可
// 1:許可
VDC3.VIDEO_MODE.BIT.VIDEO_MAIN_EXE = 0;
// 0:不許可
// 1:許可
*/

// ■映像割り込み制御レジスタ
VDC3.VIDEO_INT_CNT.LONG = 0x00000000;
/*
VDC3.VIDEO_INT_CNT.BIT.INT_V_EN = 0;// 0:不許可
// 1:許可
VDC3.VIDEO_INT_CNT.BIT.INT_F_EN = 0;// 0:不許可
// 1:許可
VDC3.VIDEO_INT_CNT.BIT.INT_UF_EN = 0;
// 0:不許可
// 1:許可
VDC3.VIDEO_INT_CNT.BIT.INT_OF_EN = 0;
// 0:不許可
// 1:許可
VDC3.VIDEO_INT_CNT.BIT.V_PERIOD = 0;// 0:入力映像のVSYNC の周期が一定である
// 1:入力映像のVSYNC の周期が一定でない
VDC3.VIDEO_INT_CNT.BIT.F_END = 0; // 0:書き込み処理中
// 1:書き込み完了
VDC3.VIDEO_INT_CNT.BIT.UNDER_FLOW = 0;
// 0:アンダフローなし
// 1:アンダフローあり
VDC3.VIDEO_INT_CNT.BIT.OVER_FLOW = 0;
// 0:オーバフローなし
// 1:オーバフローあり
*/

// ■映像保存フィールド数設定レジスタ
VDC3.VIDEO_SAVE_NUM.LONG = 0x00000000;
/*
VDC3.VIDEO_SAVE_NUM.BIT.FIELD_SAVE_NUM = 0;
// H'000:1 枚保存
// H'001:2 枚保存
// H'03B:60 枚保存
// H'3FF:1024 枚保存
*/

// ■映像ベースアドレスレジスタ
VDC3.VIDEO_BASEADR.LONG = (unsigned long)VD_RAM_ADDRESS;

// ■有効映像サイズレジスタ
VDC3.VIDEO_SIZE.BIT.VIDEO_HEIGHT = VD_INPUT_HEIGHT;
VDC3.VIDEO_SIZE.BIT.VIDEO_WIDTH = VD_INPUT_WIDTH;

// ■有効映像垂直開始位置レジスタ
VDC3.VIDEO_VSTART.BIT.VIDEO_VSTART_TOP = VD_VSTART_VALIDDATA_TOP;
VDC3.VIDEO_VSTART.BIT.VIDEO_VSTART_BTM = VD_VSTART_VALIDDATA_BTM;

// ■有効映像水平開始位置レジスタ
VDC3.VIDEO_HSTART.BIT.VIDEO_HSTART = VD_HSTART_VALIDDATA;

// ■映像保存フィールド数設定レジスタ
VDC3.VIDEO_SAVE_NUM.BIT.FIELD_SAVE_NUM = 0;
// 保存フィールド数(映像表示機能では0 を設定)
// ■映像フィールドオフセットレジスタ
VDC3.VIDEO_FIELD_OFFSET.LONG = 0; // フィールドオフセット(映像表示機能では無効)

// ■映像用垂直同期信号タイミング制御1 レジスタ
VDC3.VIDEO_VSYNC_TIM1.BIT.VIDEO_VSYNC_START1_TOP = VD_VSTART_VALIDDATA_TOP+VD_IO_DFLINE-LCD_VERTICAL_DE_START+(VD_BUF_MARGIN/2)-VD_DISP_POS_IO_DF;
VDC3.VIDEO_VSYNC_TIM1.BIT.VIDEO_VSYNC_START1_BTM = VD_VSTART_VALIDDATA_BTM+VD_IO_DFLINE-LCD_VERTICAL_DE_START+(VD_BUF_MARGIN/2)-VD_DISP_POS_IO_DF;

// ■映像サイズ指定
Camera_SetInputSize(0);

// ■映像表示位置指定
Camera_SetPos(VD_DISP_POS_X, VD_DISP_POS_Y);
}