📄 cameram.c
字号:
/// CAMERA_SetReg(0x7f, 0x40|uOutSel | uYcSel | 1);
/// GetReg(0x7f, x);
/// Disp("1.7fh = %02x\n", x);
#endif
}
//////////
// Function Name : CAMERA_SetSizeInS5K4AAF
// Function Description : camera module(S5K4AAF) Size calucate
// Input : IMG_SIZE eSrcSize(Source size)
// Output : None
void CAMERA_SetSizeInS5K4AAF(IMG_SIZE eSrcSize)
{
u8 ucSrcSize;
oCamera.m_ucSlaveAddr = 0x5a;
// PCLK setting
// CAMERA_SetReg(0xec, 0x00);
// CAMERA_SetReg(0x71, 0x00);
// 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 0 // if deleted, no operation..
// Camera data format, YC order
//------------------------------
/// u8 uOutSel = (eCcir == CCIR601) ? (1<<2) : (0<<2);
/// u8 uYcSel = (eSrcFmt == YCBYCR || eSrcFmt == YCRYCB) ? (1<<1) : (0<<1);
/// u8 uCrCbSel = (eSrcFmt == YCRYCB || eSrcFmt == CRYCBY) ? (1<<0) : (0<<0);
CAMERA_SetReg(0xec, 0x01);
// GetReg(0x7f, x);
// Disp("1.7fh = %02x, 0x%02x\n", x, uOutSel | uYcSel | uCrCbSel);
///CAMERA_SetReg(0x7f, uOutSel | uYcSel | uCrCbSel);
CAMERA_SetReg(0x7f, 0x46); ////
#endif
}
*/
//////////
// Function Name : CAMERA_InitS5K3BAF
// Function Description : camera module(S5K3BA) initaialize
// Input : CAM_ATTR eCcir(Camera Order), CSPACE eSrcFmt(Camera source format), IMG_SIZE eSrcSz(Camera source size)
// Output : None
void CAMERA_InitS5K3BAF(CAM_ATTR eCcir, CSPACE eSrcFmt, SUB_SAMPLING eSub)
{
u32 uHCLKx2;
SYSC_GetClkInform(); // Get HCLKx2 Frequency
uHCLKx2 = g_HCLKx2/1000000;
oCamera.m_ucSlaveAddr = 0x5a;
CAMERA_IICOpen(100000);
//1. initial setting
CAMERA_SetReg(0xfc, 0x01);
CAMERA_SetReg(0x04, 0x03); //ARM Clock divider(1/4)
//CAMERA_SetReg(0xfc, 0x02);
//CAMERA_SetReg(0x52, 0x80); // PLL M
//CAMERA_SetReg(0x50, 0x14); //1b // PLL S,P (15fps)
//In case of PCLK = 64MHz
CAMERA_SetReg(0xfc, 0x02);
CAMERA_SetReg(0x52, 0x80); //PLL M M= 128 setting.
switch ( uHCLKx2 )
{
case 200:
CAMERA_SetReg(0xfc, 0x02);
CAMERA_SetReg(0x50, 0x19); //PLL S= 0 , P = 25 PCLK=128/2=64Mhz 15 Frmae Setting
// CAMERA_SetReg(0x50, 0x14); //PLL S= 0 , P = 20 PCLK=128/2=64Mhz 15 Frmae Setting
// CAMERA_SetReg(0x50, 0x59); //PLL S= 1 , P = 25 PCLK=64/2=32Mhz , 7~8Frame Setting
break;
case 266:
CAMERA_SetReg(0xfc, 0x02);
CAMERA_SetReg(0x50, 0x1A); //PLL S= 0 , P = 26
break;
default:
printf("Check HCLKx2 is 200 or 266Mhz!!\n");
Assert(0);
break;
}
CAMERA_SetReg(0xfc, 0x07);
CAMERA_SetReg(0x58, 0x10);
CAMERA_SetReg(0x59, 0x00);
CAMERA_SetReg(0x5A, 0x00);
CAMERA_SetReg(0x5B, 0x6c);
CAMERA_SetReg(0xfc, 0xf0);
CAMERA_SetReg(0x00, 0x40);
CAMERA_SetReg(0xfc, 0x00);
CAMERA_SetReg(0x62, 0x02);
CAMERA_SetReg(0xbc, 0xe0); // AWB_AE_DIFF
CAMERA_SetReg(0xfc, 0x03); //*************************************************
CAMERA_SetReg(0x2d, 0x03);
CAMERA_SetReg(0xfc, 0x01);
CAMERA_SetReg(0x02, 0x02); // YCbCr Order
CAMERA_SetReg(0xfc, 0x02);
CAMERA_SetReg(0x4a, 0xc1); // SC type selection
CAMERA_SetReg(0x37, 0x18); //16 // SC type global gain
CAMERA_SetReg(0x47, 0xc4); // r-ramp by chin
CAMERA_SetReg(0xfc, 0x01); //AWB Window Area (except sky)
CAMERA_SetReg(0xc4, 0x01);
CAMERA_SetReg(0xc5, 0x4e);
CAMERA_SetReg(0xc7, 0x6e);
CAMERA_SetReg(0xfc, 0x02);
CAMERA_SetReg(0x30, 0x84); //Analog offset
CAMERA_SetReg(0xfc, 0x00);
CAMERA_SetReg(0x3d, 0x10); //AWB Low Y limit
CAMERA_SetReg(0xfc, 0x02);
CAMERA_SetReg(0x3d, 0x06); //ADLC OFF
CAMERA_SetReg(0x44, 0x5b); //clamp enable
CAMERA_SetReg(0x55, 0x03);
CAMERA_SetReg(0xfc, 0x06);
CAMERA_SetReg(0x0c, 0x01);
CAMERA_SetReg(0x0d, 0x4e);
CAMERA_SetReg(0x0f, 0x6e);
CAMERA_SetReg(0xfc, 0x00);
CAMERA_SetReg(0x78, 0x58); //AGC MAX (30lux_Micron灌扁Y=60code)
CAMERA_SetReg(0xfc, 0x02);
CAMERA_SetReg(0x45, 0x8c); //CDS timing_历炼档 greenish 秦搬(15fps)
CAMERA_SetReg(0x49, 0x80); // APS Current 2uA
CAMERA_SetReg(0xfc, 0x01);
CAMERA_SetReg(0x25, 0x14); //10 //Digital Clamp
CAMERA_SetReg(0xfc, 0x00);
CAMERA_SetReg(0x6d, 0x01); //AE target high (Macbeth white=240)
CAMERA_SetReg(0x6c, 0x00); //AE target (Macbeth white=240)
//CAMERA_SetReg(0x6d, 0x00);
//2. ISP tuning //******************************************
//ISP_tuning
CAMERA_SetReg(0xfc, 0x00);
CAMERA_SetReg(0x01, 0x00); // I2C hold mode off
CAMERA_SetReg(0xfc, 0x01);
CAMERA_SetReg(0x00, 0x00); // ISP BPR Off
CAMERA_SetReg(0x0c, 0x02); // Full YC
CAMERA_SetReg(0xc8, 0x19); // AWB Y Max
CAMERA_SetReg(0xfc, 0x00);
CAMERA_SetReg(0x81, 0x00); // AWB G gain suppress disable
CAMERA_SetReg(0x29, 0x04);
CAMERA_SetReg(0x2a, 0x00);
CAMERA_SetReg(0x2b, 0x04); // color level
CAMERA_SetReg(0x2c, 0x00);
CAMERA_SetReg(0xfc, 0x07);
CAMERA_SetReg(0x11, 0x00); // G offset
CAMERA_SetReg(0x37, 0x00); // Flicker Add
CAMERA_SetReg(0xfc, 0x00);
CAMERA_SetReg(0x72, 0xa0); // Flicker for 32MHz
CAMERA_SetReg(0x74, 0x18); // Flicker
CAMERA_SetReg(0x73, 0x00); // Frame AE
CAMERA_SetReg(0xfc, 0x05);
CAMERA_SetReg(0x64, 0x00); // Darkslice R
CAMERA_SetReg(0x65, 0x00); // Darkslice G
CAMERA_SetReg(0x66, 0x00); // Darkslice B
//Edge
CAMERA_SetReg(0xfc, 0x05);
CAMERA_SetReg(0x2c, 0x0a); //14 // positive gain
CAMERA_SetReg(0x30, 0x0a); //10 // negative edge gain
CAMERA_SetReg(0x34, 0x1a); // APTCLP
CAMERA_SetReg(0x35, 0x10); //0a // APTSC
CAMERA_SetReg(0x36, 0x0b); // ENHANCE
CAMERA_SetReg(0x3f, 0x00); // NON-LIN
CAMERA_SetReg(0x45, 0x30); // EGREF
CAMERA_SetReg(0x47, 0x00); // LLREF
CAMERA_SetReg(0x48, 0x08); // by chin
CAMERA_SetReg(0x49, 0x39); // CSSEL EGSEL CS_DLY by
CAMERA_SetReg(0x40, 0x41); // Y delay
////////////////////////////////////
CAMERA_SetReg(0xfc, 0x00);
CAMERA_SetReg(0x7e, 0xfc);
//s7e8c //NR GrGb off
// [7]: BPR [6]:Noise Filter(1D/NR) [4]: GrGb Enable [3]:BPR Data Threshold
// [2]: color suppress [1]: Y gain suppress [0]: Digital Clamp
///////////////////////////////////
////////////////////////////////////
// GrGb Correction setting
CAMERA_SetReg(0xfc, 0x01);
CAMERA_SetReg(0x44, 0x0c);
//s4400
/// [4]: GrGb full [3]: GrGb On
/// [2]: GrGb Rb On
CAMERA_SetReg(0xfc, 0x0b);
CAMERA_SetReg(0x21, 0x00); // Start AGC
CAMERA_SetReg(0x22, 0x10); // AGCMIN
CAMERA_SetReg(0x23, 0x50); // AGCMAX
CAMERA_SetReg(0x24, 0x18); // G Th AGCMIN(23d)
CAMERA_SetReg(0x25, 0x52); // G Th AGCMAX(50d)
CAMERA_SetReg(0x26, 0x38); // RB Th AGCMIN
CAMERA_SetReg(0x27, 0x52); // RB Th AGCMAX
// GrGb Correction setting End
///////////////////////////////////
// BPR Setting
CAMERA_SetReg(0xfc, 0x01);
CAMERA_SetReg(0x3f, 0x00); // setting because S/W bug
CAMERA_SetReg(0xfc, 0x0b);
CAMERA_SetReg(0x0b, 0x00); // ISP BPR On Start
CAMERA_SetReg(0x0c, 0x00); // Th13 AGC Min
CAMERA_SetReg(0x0d, 0x5a); // Th13 AGC Max
CAMERA_SetReg(0x0e, 0x01); //00 // Th1 Max H for AGCMIN
CAMERA_SetReg(0x0f, 0xff); //c0 // Th1 Max L for AGCMIN
CAMERA_SetReg(0x10, 0x00); // Th1 Min H for AGCMAX
CAMERA_SetReg(0x11, 0x10); //00 // Th1 Min L for AGCMAX
CAMERA_SetReg(0x12, 0xff); // Th3 Max H for AGCMIN
CAMERA_SetReg(0x13, 0xff); // Th3 Max L for AGCMIN
CAMERA_SetReg(0x14, 0xff); // Th3 Min H for AGCMAX
CAMERA_SetReg(0x15, 0xff); // Th3 Min L for AGCMAX
///////////////////////////////////////////
// NR Setting
CAMERA_SetReg(0xfc, 0x01);
CAMERA_SetReg(0x4b, 0x01); // NR Enable
//s4b00 // NR Enable
CAMERA_SetReg(0xfc, 0x0b);
CAMERA_SetReg(0x28, 0x00); //NR Start AGC
CAMERA_SetReg(0x29, 0x00); // SIG Th AGCMIN H
CAMERA_SetReg(0x2a, 0x0a); //14 // SIG Th AGCMIN L
CAMERA_SetReg(0x2b, 0x00); // SIG Th AGCMAX H
CAMERA_SetReg(0x2c, 0x0a); //14 // SIG Th AGCMAX L
CAMERA_SetReg(0x2d, 0x00); // PRE Th AGCMIN H
CAMERA_SetReg(0x2e, 0xc0); //64 // PRE Th AGCMIN L(100d)
CAMERA_SetReg(0x2f, 0x01); // PRE Th AGCMAX H(300d)
CAMERA_SetReg(0x30, 0x2c); // PRE Th AGCMAX L
CAMERA_SetReg(0x31, 0x00); // POST Th AGCMIN H
CAMERA_SetReg(0x32, 0xe0); //64 // POST Th AGCMIN L(100d)
CAMERA_SetReg(0x33, 0x01); // POST Th AGCMAX H(300d)
CAMERA_SetReg(0x34, 0x2c); // POST Th AGCMAX L
// NR Setting End
////////////////////////////////
// Color suppress setting
CAMERA_SetReg(0xfc, 0x0b);
CAMERA_SetReg(0x08, 0x50); // C suppress AGC MIN
CAMERA_SetReg(0x09, 0x03); // C suppress MIN H
CAMERA_SetReg(0x0a, 0x80); // C suppress MIN L
// C Suppress Setting End
CAMERA_SetReg(0xfc, 0x05);
CAMERA_SetReg(0x4a, 0x00); //01 // Edge Color Suppress, 9/13
///////////////////////////////
// 1D Y LPF Filter
CAMERA_SetReg(0xfc, 0x01);
//s05e0 // Default s60
CAMERA_SetReg(0x05, 0x60); // Default s60
//[7]: Y LPF filter On [6]: Clap On
CAMERA_SetReg(0xfc, 0x0b);
CAMERA_SetReg(0x35, 0x00); // YLPF Start AGC
CAMERA_SetReg(0x36, 0x50); // YLPF01 AGCMIN
CAMERA_SetReg(0x37, 0x50); // YLPF01 AGCMAX
CAMERA_SetReg(0x38, 0x00); // YLPF SIG01 Th AGCMINH
CAMERA_SetReg(0x39, 0x90); //00 // YLPF SIG01 Th AGCMINL
CAMERA_SetReg(0x3a, 0x01); // YLPF SIG01 Th AGCMAXH
CAMERA_SetReg(0x3b, 0xa0); // YLPF SIG01 Th AGCMAXL
CAMERA_SetReg(0x3c, 0x50); // YLPF02 AGCMIN
CAMERA_SetReg(0x3d, 0x50); // YLPF02 AGCMAX
CAMERA_SetReg(0x3e, 0x00); // YLPF SIG02 Th AGCMINH
CAMERA_SetReg(0x3f, 0xa0); //00 // YLPF SIG02 Th AGCMINL
CAMERA_SetReg(0x40, 0x01); // YLPF SIG02 Th AGCMAXH s73
CAMERA_SetReg(0x41, 0xb0); // YLPF SIG02 Th AGCMAXL
// Y LPF Filter setting End
// SET EDGE COLOR SUPPRESS AND Y-LPF(决 氓烙丛 mail 眠啊)************************************
CAMERA_SetReg(0xfc, 0x05);
CAMERA_SetReg(0x42, 0x1F);
CAMERA_SetReg(0x43, 0x1F);
CAMERA_SetReg(0x44, 0x0E);
CAMERA_SetReg(0x45, 0x8C); //歹 suppres窍绊磊窍搁 5a, 0x 弊 捞窍绰 side effect 锭巩俊 救凳.
CAMERA_SetReg(0x46, 0x7A);
CAMERA_SetReg(0x47, 0x60);
CAMERA_SetReg(0x48, 0x0C);
CAMERA_SetReg(0x49, 0x39);
CAMERA_SetReg(0x4A, 0x01);
CAMERA_SetReg(0x4B, 0xB1);
CAMERA_SetReg(0x4C, 0x3B);
CAMERA_SetReg(0x4D, 0x14);
//*******************************************************************************************
///////////////////////////////////////////
// NR Setting
CAMERA_SetReg(0xfc, 0x01);
CAMERA_SetReg(0x4b, 0x01); // NR Enable
// Set multipliers (which are not suppressed)_(决 氓烙丛 mail 眠啊)**************************
CAMERA_SetReg(0xfc, 0x01);
CAMERA_SetReg(0x48, 0x11);
// Suppressed parameters
CAMERA_SetReg(0xfc, 0x0B);
CAMERA_SetReg(0x21, 0x00);
CAMERA_SetReg(0x22, 0x10);
CAMERA_SetReg(0x23, 0x60);
CAMERA_SetReg(0x24, 0x10);
CAMERA_SetReg(0x25, 0x28);
CAMERA_SetReg(0x26, 0x08);
CAMERA_SetReg(0x27, 0x20);
CAMERA_SetReg(0x28, 0x00); //NR Start AGC
CAMERA_SetReg(0x29, 0x00); // SIG Th AGCMIN H
CAMERA_SetReg(0x2A, 0x02); // SIG Th AGCMIN L
CAMERA_SetReg(0x2B, 0x00); // SIG Th AGCMAX H
CAMERA_SetReg(0x2C, 0x14); // SIG Th AGCMAX L
CAMERA_SetReg(0x2D, 0x03); // PRE Th AGCMIN H
CAMERA_SetReg(0x2E, 0x84); // PRE Th AGCMIN L
CAMERA_SetReg(0x2F, 0x03); // PRE Th AGCMAX H
CAMERA_SetReg(0x30, 0x84); // PRE Th AGCMAX L
CAMERA_SetReg(0x31, 0x00); // POST Th AGCMIN H
CAMERA_SetReg(0x32, 0x00); // POST Th AGCMIN L
CAMERA_SetReg(0x33, 0x00); // POST Th AGCMAX H
CAMERA_SetReg(0x34, 0xC8); // POST Th AGCMAX L
CAMERA_SetReg(0x35, 0x00); //1D Y filter setting
CAMERA_SetReg(0x36, 0x10);
CAMERA_SetReg(0x37, 0x50);
CAMERA_SetReg(0x38, 0x00);
CAMERA_SetReg(0x39, 0x14);
CAMERA_SetReg(0x3A, 0x00);
CAMERA_SetReg(0x3B, 0x50);
CAMERA_SetReg(0x3C, 0x10);
CAMERA_SetReg(0x3D, 0x50);
CAMERA_SetReg(0x3E, 0x00);
CAMERA_SetReg(0x3F, 0x28);
CAMERA_SetReg(0x40, 0x00);
CAMERA_SetReg(0x41, 0xA0);
//*******************************************************************************************
//决 氓烙丛 mail 眠啊 ***********************************************************************
// To avoid AWB tracking @ max AGC gain even though AE is unstable state
CAMERA_SetReg(0xfc, 0x00);
CAMERA_SetReg(0xba, 0x50); // AE Target minus AE Average
CAMERA_SetReg(0xbb, 0x00);
CAMERA_SetReg(0xbc, 0x00);
//*******************************************************************************************
//3. AE weight & etc linear
// AE Window Weight linear(EVT1)0929
CAMERA_SetReg(0xfc, 0x20); // upper window weight zero
CAMERA_SetReg(0x60, 0x11);
CAMERA_SetReg(0x61, 0x11);
CAMERA_SetReg(0x62, 0x11);
CAMERA_SetReg(0x63, 0x11);
CAMERA_SetReg(0x64, 0x11);
CAMERA_SetReg(0x65, 0x11);
CAMERA_SetReg(0x66, 0x11);
CAMERA_SetReg(0x67, 0x11);
CAMERA_SetReg(0x68, 0x11);
CAMERA_SetReg(0x69, 0x11);
CAMERA_SetReg(0x6a, 0x11);
CAMERA_SetReg(0x6b, 0x11);
CAMERA_SetReg(0x6c, 0x11);
CAMERA_SetReg(0x6d, 0x11);
CAMERA_SetReg(0x6e, 0x11);
CAMERA_SetReg(0x6f, 0x11);
CAMERA_SetReg(0x70, 0x11);
CAMERA_SetReg(0x71, 0x11);
CAMERA_SetReg(0x72, 0x11);
CAMERA_SetReg(0x73, 0x11);
CAMERA_SetReg(0x74, 0x11);
CAMERA_SetReg(0x75, 0x11);
CAMERA_SetReg(0x76, 0x11);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -