📄 cameram.c
字号:
CAMERA_SetReg(0xec,0x03);
CAMERA_SetReg(0x51,0x00); //Vblank
CAMERA_SetReg(0x52,0x7e);
CAMERA_SetReg(0x53,0x01); //HSIZE Min is 1070
CAMERA_SetReg(0x54,0xa6);
CAMERA_SetReg(0x55,0x0f); // <1.69h>
CAMERA_SetReg(0x56,0x01); //07 // <1.6ah>
CAMERA_SetReg(0x5e,0x3a); //3b // <1.78h> HBLK_START
CAMERA_SetReg(0x5f,0x02);
CAMERA_SetReg(0x60,0x80);
CAMERA_SetReg(0x63,0x01);
CAMERA_SetReg(0x64,0xe0);
CAMERA_SetReg(0x68,0x3a); //3b // <1.82h> HS656_START
CAMERA_SetReg(0x69,0x02);
CAMERA_SetReg(0x6a,0x80);
CAMERA_SetReg(0x6d,0x01);
CAMERA_SetReg(0x6e,0xe0);
/////////////////////////////
///Flicker setting
CAMERA_SetReg(0xec,0x00);
CAMERA_SetReg(0x74,0x18); // Auto Flicker start 60hz for 7.5fps
/////////////////////////////
// Frame AE
CAMERA_SetReg(0xec,0x00);
// CAMERA_SetReg(0x73,0x11); // frame 1/2
CAMERA_SetReg(0x73,0x00); // frame 1/2
#endif
#if 1
CAMERA_SetReg(0xec,0x01);
CAMERA_SetReg(0x3b,0x18); //GrGb correction
CAMERA_SetReg(0xaa,0xe8);//e0 //For AWB, High Threshold Value of Y signal
CAMERA_SetReg(0xab,0x10);//30 //For AWB, Low Threshold Value of Y signal
//***************************************************
// page 2
CAMERA_SetReg(0xec,0x02);
CAMERA_SetReg(0x29,0x4f); //Clamp On(Sun Spot)
CAMERA_SetReg(0x2d,0x05); //APS Bias Current (I_APS_CTRL)
#endif
#if 0
//***************************************************
// page 3
/////////////////////////////
// Subsampling
//QVGA Subsampling 640x480
CAMERA_SetReg(0xec,0x03);
CAMERA_SetReg(0x51,0x00); //Vblank
CAMERA_SetReg(0x52,0x7e);
CAMERA_SetReg(0x53,0x01); //HSIZE Min is 1070
CAMERA_SetReg(0x54,0xa6);
CAMERA_SetReg(0x55,0x0f); // <1.69h>
CAMERA_SetReg(0x56,0x06); //07 // <1.6ah>
CAMERA_SetReg(0x5e,0x3a); //3b // <1.78h> HBLK_START
CAMERA_SetReg(0x5f,0x02);
CAMERA_SetReg(0x60,0x80);
CAMERA_SetReg(0x63,0x01);
CAMERA_SetReg(0x64,0xe0);
CAMERA_SetReg(0x68,0x3a); //3b // <1.82h> HS656_START
CAMERA_SetReg(0x69,0x02);
CAMERA_SetReg(0x6a,0x80);
CAMERA_SetReg(0x6d,0x01);
CAMERA_SetReg(0x6e,0xe0);
//QVGA Subsampling 320x240
CAMERA_SetReg(0xa1,0x00); //Vblank
CAMERA_SetReg(0xa2,0x7e);
CAMERA_SetReg(0xa3,0x01); //HSIZE Min is 1070
CAMERA_SetReg(0xa4,0xa6);
CAMERA_SetReg(0xa5,0x0f); // <1.69h>
CAMERA_SetReg(0xa6,0x07); // <1.6ah>
CAMERA_SetReg(0xae,0x39); // <1.78h> HBLK_START
CAMERA_SetReg(0xaf,0x01); //320
CAMERA_SetReg(0xb0,0x40);
CAMERA_SetReg(0xb3,0x00); //240
CAMERA_SetReg(0xb4,0xf0);
CAMERA_SetReg(0xb8,0x39); // <1.82h> HS656_START
CAMERA_SetReg(0xb9,0x01); //320
CAMERA_SetReg(0xba,0x40);
CAMERA_SetReg(0xbd,0x00); //240
CAMERA_SetReg(0xbe,0xf0);
#endif
//***************************************************
// page 6
CAMERA_SetReg(0xec,0x06);
CAMERA_SetReg(0xbc,0x0b); //Modify wrp wcp for mirror, VGA
CAMERA_SetReg(0xbd,0x0c);
CAMERA_SetReg(0xbe,0x0b);
CAMERA_SetReg(0xbf,0x0c);
CAMERA_SetReg(0xdc,0x0b); //Modify wrp wcp for mirror, QVGA
CAMERA_SetReg(0xdd,0x0c);
CAMERA_SetReg(0xde,0x0b);
CAMERA_SetReg(0xdf,0x0c);
#if 0
//***************************************************
// page 4
/////////////////////////////
// ScaleDown
CAMERA_SetReg(0xec,0x04);
//VGA scaledown
CAMERA_SetReg(0x2d,0x7d );//<1.69h>
CAMERA_SetReg(0x2e,0x07 );//06 //<1.6ah>
CAMERA_SetReg(0x2f,0x05 );//HCNT_END_H
CAMERA_SetReg(0x30,0x9f );//HCNT_END_L
CAMERA_SetReg(0x36,0x10 );//42 //HBLK_START_L
CAMERA_SetReg(0x37,0x04 );//HBLK_OFFSET_H
CAMERA_SetReg(0x38,0xff ); //HBLK_OFFSET_L
CAMERA_SetReg(0x3a,0x05 ); //VBLK_START_L
CAMERA_SetReg(0x40,0x11 );//45 //HS656_START_L
CAMERA_SetReg(0x42,0x01 );//HS656_OFFSET_L
CAMERA_SetReg(0x44,0x0a );//VS656_START_L
CAMERA_SetReg(0x4c,0x00 );//<1.93h>
CAMERA_SetReg(0x4d,0x00 );//<1.94h>
CAMERA_SetReg(0x4e,0x00 );//<1.95h>
//QVGA scaledown
CAMERA_SetReg(0x55,0x35); //<1.69h>
CAMERA_SetReg(0x56,0x06); //<1.6ah>
CAMERA_SetReg(0x57,0x05); //HCNT_END_H
CAMERA_SetReg(0x58,0x9f); //HCNT_END_L
CAMERA_SetReg(0x5e,0x6b); //b3 //HBLK_START_L
CAMERA_SetReg(0x60,0x00); //HBLK_OFFSET_L
CAMERA_SetReg(0x64,0xf2); //VBLK_OFFSET_L
CAMERA_SetReg(0x68,0x6c); //b4 //HS656_START_L
CAMERA_SetReg(0x6c,0x06); //VS656_START_L
CAMERA_SetReg(0x74,0x00); //<1.93h>
CAMERA_SetReg(0x75,0x00); //<1.94h>
CAMERA_SetReg(0x76,0x00); //<1.95h>
//QQVGA scaledown
CAMERA_SetReg(0x7d,0x57); //<1.69h>
CAMERA_SetReg(0x7e,0x07); //<1.6ah>
CAMERA_SetReg(0x7f,0x05); //HCNT_END_H
CAMERA_SetReg(0x80,0x9f); //HCNT_END_L
CAMERA_SetReg(0x86,0x2f); //7d //HBLK_START_L
CAMERA_SetReg(0x8f,0x05); //HS656_START_H
CAMERA_SetReg(0x90,0xa3); //bf //HS656_START_L
CAMERA_SetReg(0x9c,0x00); //<1.93h>
CAMERA_SetReg(0x9d,0x00); //<1.94h>
CAMERA_SetReg(0x9e,0x00); //<1.95h>
//CIF scaledown
CAMERA_SetReg(0xa5,0x51); //<1.69h>
CAMERA_SetReg(0xa6,0x06); //<1.6ah>
CAMERA_SetReg(0xae,0xc9); //HBLK_START_L
CAMERA_SetReg(0xb0,0x7f); //HBLK_OFFSET_L
CAMERA_SetReg(0xb2,0x04); //VBLK_START_L
CAMERA_SetReg(0xb8,0xaf); //HS656_START_L
CAMERA_SetReg(0xba,0xa0); //HS656_OFFSET_L
CAMERA_SetReg(0xbc,0x08); //VS656_START_L
//QCIF scaledown
CAMERA_SetReg(0xcd,0x33); //<1.69h>
CAMERA_SetReg(0xce,0x07); //<1.6ah>
CAMERA_SetReg(0xd6,0x8e); //HBLK_START_L
CAMERA_SetReg(0xd8,0x81); //HBLK_OFFSET_L
CAMERA_SetReg(0xda,0x03); //VBLK_CAMERA_SetReg(0xTART_L
CAMERA_SetReg(0xe0,0x7e); //HS656_START_L
CAMERA_SetReg(0xe2,0x90); //HS656_OFFSET_L
CAMERA_SetReg(0xe4,0x08); //VS656_START_L
#endif
#if 1 // Tunning Code
//***************************************************
// page 5
CAMERA_SetReg(0xec,0x05);
//s000f //Y Shading, RGB Shading ON
CAMERA_SetReg(0x00,0x0d); //Y Shading, RGB Shading OFF
//RGB Shading
CAMERA_SetReg(0x05,0x02);
CAMERA_SetReg(0x06,0x02);
CAMERA_SetReg(0x07,0x02);
CAMERA_SetReg(0x08,0x02);
///Y Shading
CAMERA_SetReg(0x2d,0xf0); //c8 //d0
CAMERA_SetReg(0x2e,0xc0); //a8 //b0
CAMERA_SetReg(0x2f,0xa0); //98 //a0
CAMERA_SetReg(0x30,0x84); //88 //88
CAMERA_SetReg(0x31,0x84); //88 //88
CAMERA_SetReg(0x32,0xa0); //98 //a0
CAMERA_SetReg(0x33,0xc0); //a8 //b0
CAMERA_SetReg(0x34,0xf0); //c8 //d0
CAMERA_SetReg(0x35,0xf0); //c8 //d0
CAMERA_SetReg(0x36,0xc0); //a8 //b0
CAMERA_SetReg(0x37,0xa0); //98 //98
CAMERA_SetReg(0x38,0x84); //88 //88
CAMERA_SetReg(0x39,0x84); //88 //88
CAMERA_SetReg(0x3a,0xa0); //98 //98
CAMERA_SetReg(0x3b,0xc0); //a8 //b0
CAMERA_SetReg(0x3c,0xf0); //c8 //d0
//***************************************************
// page 7
CAMERA_SetReg(0xec,0x07);
CAMERA_SetReg(0x17,0x44); //AWBGgain
CAMERA_SetReg(0x11,0xfe); //Ggain offset
CAMERA_SetReg(0x80,0x0c); //AE weight
//***************************************************
// page 0
CAMERA_SetReg(0xec,0x00);
CAMERA_SetReg(0x23,0x32); //using wrpwcp mirror
CAMERA_SetReg(0x6c,0x00); //AE target Low
CAMERA_SetReg(0x77,0xd0); //color level
CAMERA_SetReg(0x7e,0x86); //DBPRM On, Color Suppress On, Y gain On, Digital clamp Off
CAMERA_SetReg(0x83,0xa0); //c0 //Color suppress
CAMERA_SetReg(0xbb,0x01); //AWB AE diff
CAMERA_SetReg(0xbc,0x00);
////////////////////////////
//Edge Suppress
CAMERA_SetReg(0xe0,0x0f);
CAMERA_SetReg(0xe1,0x50); //AGC Min to Start Edge suppress
CAMERA_SetReg(0xe2,0x60); //AGC Max
CAMERA_SetReg(0xe3,0x10); //Edge Coefficient for AGC Min
CAMERA_SetReg(0xe4,0x00); //Edge Coefficient for AGC Max
CAMERA_SetReg(0xe5,0x60); //AGC Position
CAMERA_SetReg(0xe6,0x40); //Edge Gain lower than the position
CAMERA_SetReg(0xe7,0x00); //Edge Gain higer than the position
/////////////////////////////
//Adjust AWB boundary
CAMERA_SetReg(0x34,0x05); //Rgain_max
CAMERA_SetReg(0x35,0x0b); //Bgain_max
CAMERA_SetReg(0x36,0x09); //R_limit high
CAMERA_SetReg(0x37,0x0b); //B_limit high
CAMERA_SetReg(0x39,0x07); //Blimit Low
CAMERA_SetReg(0x3a,0x0a); //slop bottom
CAMERA_SetReg(0x3b,0x0e); //slop top
//Adjust RGBgain of AWB
CAMERA_SetReg(0x79,0x00); //Rgain offset
CAMERA_SetReg(0x7a,0x02); //Bgain offset
//White Point
CAMERA_SetReg(0x40,0x1c);
CAMERA_SetReg(0x41,0x4a);
CAMERA_SetReg(0x42,0x21); //22
CAMERA_SetReg(0x43,0x3c); //3a
CAMERA_SetReg(0x44,0x2e); //2e
CAMERA_SetReg(0x45,0x2d); //2c
//Hue, Gain control
CAMERA_SetReg(0x48,0xd0); //d0 //80
CAMERA_SetReg(0x49,0xfe); //fe //80
CAMERA_SetReg(0x4a,0x48); //48 //00
CAMERA_SetReg(0x4b,0x30); //38 //00
CAMERA_SetReg(0x4c,0xfe); //fe //80
CAMERA_SetReg(0x4d,0xfe); //fe //80
CAMERA_SetReg(0x4e,0x60); //48 //00
CAMERA_SetReg(0x4f,0x00); //10 //00
//
CAMERA_SetReg(0x50,0xc8); //c0 //80
CAMERA_SetReg(0x51,0xfe); //fe //80
CAMERA_SetReg(0x52,0x4a); //4a //00
CAMERA_SetReg(0x53,0x30); //38 //00
CAMERA_SetReg(0x54,0xfe); //fe //80
CAMERA_SetReg(0x55,0xfe); //fe //80
CAMERA_SetReg(0x56,0x60); //50 //00
CAMERA_SetReg(0x57,0x00); //10 //00
CAMERA_SetReg(0x58,0xb0); //80
CAMERA_SetReg(0x59,0xfe); //80
CAMERA_SetReg(0x5a,0x50); //00
CAMERA_SetReg(0x5b,0x48); //00
CAMERA_SetReg(0x5c,0xf0); //80
CAMERA_SetReg(0x5d,0xfe); //80
CAMERA_SetReg(0x5e,0x50); //00
CAMERA_SetReg(0x5f,0x10); //00
#endif
CAMERA_SetReg(0xec, 0x00); // Bright Setting.
CAMERA_SetReg(0x76, 0xa0); // Brightness
/////////////////////////////
///Flicker setting
CAMERA_SetReg(0xec,0x00);
// CAMERA_SetReg(0x74,0x18); // Auto Flicker start 60hz for 7.5fps
CAMERA_SetReg(0x74,0x00); // Auto Flicker start 60hz for 7.5fps
/////////////////////////////
// Frame AE
CAMERA_SetReg(0xec,0x00);
// CAMERA_SetReg(0x73,0x11); // frame 1/2
CAMERA_SetReg(0x73,0x00); // frame 1/2
CAMERA_IICClose();
}
//////////
// Function Name : CAMERA_SetSizeInS5K3AAE
// Function Description : camera module(S5K3AAE) Size calucate
// Input : IMG_SIZE eSrcSize(Source size)
// Output : None
void CAMERA_SetSizeInS5K3AAE(IMG_SIZE eSrcSize)
{
u8 y, x, ucSrcSize;
int i;
oCamera.m_ucSlaveAddr = 0x5a;
// Size scaling setting
ucSrcSize =
(eSrcSize == SXGA) ? (0) :
(eSrcSize == VGA) ? (1) :
(eSrcSize == QVGA) ? (2):
(eSrcSize == QQVGA) ? (3) :
(eSrcSize == CIF) ? (4) :
(eSrcSize == QCIF) ? (5) :
0xff;
Assert(ucSrcSize != 0xff);
// SetEVT6(eSrcSize);
CAMERA_SetReg(0xec, 0x00);
CAMERA_SetReg(0x02, ucSrcSize);
// CAMERA_SetReg(0x02, 0x00);
CAMERA_SetReg(0xec, 0x00);
CAMERA_GetReg(0x02, &x);
printf("\nImage Size Setting is %d ===> %d(0:SXGA 1:VGA)\n", ucSrcSize, x);
CAMERA_SetReg(0xec, 0x04);
if(eSrcSize == SXGA)
y=0;
else if(eSrcSize == VGA)
y=0x28;
for(i=0; i <= 0x27 ; i++)
{
CAMERA_GetReg(y+i, &x);
// Disp("4.%x = %x\n",i+y,x);
}
}
/*
//////////
// Function Name : CAMERA_InitS5K4AAF
// Function Description : camera module(S5K4AAF) initaialize
// Input : CAM_ATTR eCcir(Camera Order), CSPACE eSrcFmt(Camera source format), IMG_SIZE eSrcSz(Camera source size)
// Output : None
void CAMERA_InitS5K4AAF(CAM_ATTR eCcir, CSPACE eSrcFmt, IMG_SIZE eSrcSize)
{
u8 x;
u8 ucSrcSize;
u8 uOutSel;
u8 uYcSel;
u8 uCrCbSel;
// IIC_Init();
oCamera.m_ucSlaveAddr = 0x5a;
#if 1
// GetReg(0x02, x);
// Disp(" 0.02h = %02x\n", x);
CAMERA_SetReg(0xec, 0x00);
CAMERA_SetReg(0x71, 0x00); // PCLK setting
#else // 9.5
CAMERA_SetReg(0xec, 0x01);
CAMERA_SetReg(0xa5, 0x01); //ARM Clock divider=ARM_CLK_DIV (1/2) (ARM_CLK range = 14MHz ~ 44MHz)
//In case of PCLK = 27MHz (PLL_CLK = Pixel_CLK*2, ARM_CLK = PLL_CLK/ARM_CLK_DIV )
CAMERA_SetReg(0xec, 0x01);
CAMERA_SetReg(0xa1, 54); //PLL M=54
CAMERA_SetReg(0xa2, 0x48); //PLL S=1,P=8
#endif
// Size scaling
//--------------
ucSrcSize =
(eSrcSize == SXGA) ? (0) :
(eSrcSize == VGA) ? (1) :
(eSrcSize == QVGA) ? (2) :
(eSrcSize == QQVGA) ? (3) :
(eSrcSize == CIF) ? (4) :
(eSrcSize == QCIF) ? (5) :
0xff;
Assert(ucSrcSize != 0xff);
CAMERA_SetReg(0xec, 0x00);
CAMERA_SetReg(0x02, ucSrcSize);
#if 1 // if deleted, no operation..
// Camera data format, YC order
//------------------------------
uOutSel = (eCcir == CCIR601) ? (1<<2) : (0<<2);
uYcSel = (eSrcFmt == YCBYCR || eSrcFmt == YCRYCB) ? (1<<1) : (0<<1);
uCrCbSel = (eSrcFmt == YCRYCB || eSrcFmt == CRYCBY) ? (1<<0) : (0<<0);
CAMERA_SetReg(0xec, 0x01);
CAMERA_GetReg(0x7f, &x);
Disp("1.7fh = %02x, 0x%02x\n", x, uOutSel | uYcSel | uCrCbSel);
CAMERA_SetReg(0x7f, uOutSel | uYcSel | uCrCbSel);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -