📄 image_sensor.c
字号:
}else if (pSensor_Config_Data->frame_rate == 0x0F) { // MPEG4 Encode Mode
g_bVideoMode = KAL_TRUE;
g_bPreviewMode = KAL_TRUE;
// config TG for video recorder mode
SET_TG_OUTPUT_CLK_DIVIDER(3); // MCLK = 12MHz
SET_CMOS_RISING_EDGE(0);
SET_CMOS_FALLING_EDGE(2);
SET_TG_PIXEL_CLK_DIVIDER(3);
SET_CMOS_DATA_LATCH(2);
}else {
g_bVideoMode = KAL_FALSE;
g_bCaptureMode = KAL_FALSE;
g_bPreviewMode = KAL_TRUE;
write_cmos_sensor(0x00,0x00); //bank 0
iTemp = read_cmos_sensor(0x04) & 0xE3;
write_cmos_sensor(0x04, iTemp | 0x00); //return to preview mode..
// config TG for camera preview mode
SET_TG_OUTPUT_CLK_DIVIDER(1);
SET_CMOS_RISING_EDGE(0);
SET_CMOS_FALLING_EDGE(1);
SET_TG_PIXEL_CLK_DIVIDER(1);
SET_CMOS_DATA_LATCH(1);
}
write_cmos_sensor(0x00,0x00); //bank 0
iHV_Mirror = read_cmos_sensor(0x04) & 0xFC;
switch (pSensor_Config_Data->image_mirror) {
case IMAGE_NORMAL:
iHV_Mirror |= 0x00;
if (g_bVideoMode == KAL_TRUE) {
SET_CAMERA_INPUT_ORDER(INPUT_ORDER_CbYCrY1);
iStartX = 0;
iStartY = 1;
}else {
SET_CAMERA_INPUT_ORDER(INPUT_ORDER_CbYCrY1);
iStartX = 0;
iStartY = 1;
}
break;
case IMAGE_HV_MIRROR:
iHV_Mirror |= 0x03;
if (g_bVideoMode == KAL_TRUE) {
SET_CAMERA_INPUT_ORDER(INPUT_ORDER_CbYCrY1);
iStartX = 0;
iStartY = 1;
}else {
SET_CAMERA_INPUT_ORDER(INPUT_ORDER_CbYCrY1);
iStartX = 0;
iStartY = 1;
}
break;
default:
ASSERT(0);
}
//write_cmos_sensor(0x04, iHV_Mirror);
write_cmos_sensor(0x04, 0x03);
pImage_Window->grab_start_x = iStartX;
pImage_Window->grab_start_y = iStartY;
pImage_Window->exposure_window_width = IMAGE_SENSOR_VGA_WIDTH - iStartX;
pImage_Window->exposure_window_height = IMAGE_SENSOR_VGA_HEIGHT - iStartY;
} /* SIV120A_Preview */
void SIV120A_ClkDivide_Config(kal_uint8 iDivide,kal_uint32 iBlank){
kal_uint8 iTemp = 0, iTempblank = 0;
kal_uint32 iblankTemp;
iDivide /= 2;
if (g_iBanding == CAM_BANDING_50HZ) {
iblankTemp = PV_MODE_HBLANK_50HZ_NORMAL + iBlank;
iTemp= (((PV_MODE_HBLANK_50HZ_NORMAL+PV_MODE_LINE_PERIOD_EXCEPT_HBLANK)
/(iblankTemp+PV_MODE_LINE_PERIOD_EXCEPT_HBLANK))*PV_MODE_STSTN_50HZ_NORMAL)/iDivide;
}else{
iblankTemp = PV_MODE_HBLANK_60HZ_NORMAL + iBlank;
iTemp= (((PV_MODE_HBLANK_60HZ_NORMAL+PV_MODE_LINE_PERIOD_EXCEPT_HBLANK)
/(iblankTemp+PV_MODE_LINE_PERIOD_EXCEPT_HBLANK))*PV_MODE_STSTN_60HZ_NORMAL)/iDivide;
}
write_cmos_sensor(0x00, 0x00);
iTempblank = read_cmos_sensor(0x20);
iTempblank = (iTempblank&0x0f) + (((iblankTemp>>8)<<4)&0xf0);
write_cmos_sensor(0x20, iTempblank);
write_cmos_sensor(0x21, iblankTemp&0xFF);
write_cmos_sensor(0x00, 0x01);
write_cmos_sensor(0x35, iTemp);
write_cmos_sensor(0x36, 64/iDivide);
write_cmos_sensor(0x37, iDivide/64);
}
/*************************************************************************
* FUNCTION
* SID201A_Capture
*
* DESCRIPTION
* This function configures the sensor to capture mode.
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void SIV120A_Capture(image_sensor_exposure_window_struct *pImage_Window, image_sensor_config_struct *pSensor_Config_Data)
{
kal_uint8 iStartX = 0, iStartY = 1, iTemp;
kal_uint32 iExp;
kal_prompt_trace(MOD_CC,"SIV120A_Capture==1===%s"," start ");
g_bCaptureMode = KAL_TRUE;
g_bPreviewMode = KAL_FALSE;
if (pSensor_Config_Data->frame_rate == 0xF0) {
/************************************
* Webcam mode, AE/AWB still on *
************************************/
ConfigVBlank(WEBCAM_MODE_VBLANK, CAM_BANDING_50HZ);
ConfigHBlank(WEBCAM_MODE_HBLANK, CAM_BANDING_50HZ);
}else {
/********************************
* Normal camera capture mode *
********************************/
if (pImage_Window->image_target_width <= IMAGE_SENSOR_VGA_WIDTH &&
pImage_Window->image_target_height <= IMAGE_SENSOR_VGA_HEIGHT) {
/********************************************************
* This part captures image size equal to or under VGA *
********************************************************/
if (pImage_Window->digital_zoom_factor >= (ISP_DIGITAL_ZOOM_INTERVAL << 1)) {
SIV120A_ClkDivide_Config(4,0);
write_cmos_sensor(0x00, 0x00); // bank 0
iTemp = read_cmos_sensor(0x04) & 0xE3;
write_cmos_sensor(0x04, iTemp | 0x14); // set CLK divider = 1/4 & Still mode change
SET_TG_PIXEL_CLK_DIVIDER(3);
SET_CMOS_DATA_LATCH(2);
}
}
else if (pImage_Window->image_target_width > IMAGE_SENSOR_VGA_WIDTH &&
pImage_Window->image_target_height > IMAGE_SENSOR_VGA_HEIGHT)
{
/********************************************
* This part captures image size over VGA *
********************************************/
if (pImage_Window->digital_zoom_factor >= (ISP_DIGITAL_ZOOM_INTERVAL << 1)) {
SIV120A_ClkDivide_Config(16,CP_1M_MODE_ZOOM_HBLANK);
write_cmos_sensor(0x00, 0x00);
iTemp = read_cmos_sensor(0x04) & 0xE3;
write_cmos_sensor(0x04, iTemp | 0x1C); // set CLK divider = 1/16 & Still mode change
SET_TG_PIXEL_CLK_DIVIDER(15);
SET_CMOS_DATA_LATCH(8);
}
}
}
pImage_Window->grab_start_x = iStartX;
pImage_Window->grab_start_y = iStartY;
pImage_Window->exposure_window_width = IMAGE_SENSOR_VGA_WIDTH - iStartX;
pImage_Window->exposure_window_height = IMAGE_SENSOR_VGA_HEIGHT - iStartY;
kal_prompt_trace(MOD_CC,"SIV120A_Capture==2===%s"," end ");
} /* SIV120A_Capture() */
/*************************************************************************
* FUNCTION
* SIV120A_WriteReg
*
* DESCRIPTION
* This function set the register of SIV120A.
*
* PARAMETERS
* iAddr : the register index of SIV120A
* iPara : setting parameter of the specified register of SIV120A
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void SIV120A_WriteReg(kal_uint32 iAddr, kal_uint32 iPara)
{
write_cmos_sensor(iAddr, iPara);
} /* SIV120A_WriteReg() */
/*************************************************************************
* FUNCTION
* read_cmos_sensor
*
* DESCRIPTION
* This function read parameter of specified register from SIV120A.
*
* PARAMETERS
* iAddr: the register index of SIV120A
*
* RETURNS
* the data that read from SIV120A
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV120A_ReadReg(kal_uint32 iAddr)
{
return read_cmos_sensor(iAddr);
} /* SIV120A_ReadReg() */
/*************************************************************************
* FUNCTION
* SIV120A_SetShutter
*
* DESCRIPTION
* This function set e-shutter of SIV120A to change exposure time.
*
* PARAMETERS
* shutter : exposured lines
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void SIV120A_SetShutter(kal_uint16 shutter)
{
} /* SIV120A_SetShutter */
/*************************************************************************
* FUNCTION
* SIV120A_SetGain
*
* DESCRIPTION
* This function is to set global gain to sensor.
*
* PARAMETERS
* iGain : sensor global gain(base: 0x40)
*
* RETURNS
* the actually gain set to sensor.
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint16 SIV120A_SetGain(kal_uint16 iGain)
{
return iGain;
} /* SIV120A_SetGain */
/*************************************************************************
* FUNCTION
* SIV120A_NightMode
*
* DESCRIPTION
* This function switch on/off night mode of SIV120A.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void SIV120A_NightMode(kal_bool bEnable)
{
static kal_uint32 iDelay = 0x002FFFFF;
volatile kal_uint32 iI = 0;
g_bNightMode = bEnable;
if (g_bCaptureMode == KAL_TRUE)
{
return;
}
write_cmos_sensor(0x00,0x01); //bank 1
if (bEnable == KAL_TRUE)
{
if (g_bVideoMode == KAL_TRUE)
{ /* video preview mode */
write_cmos_sensor(0x11, VIDEO_MODE_FRCNT_50HZ_NIGHT);
}
else
{ /* camera preview mode */
write_cmos_sensor(0x11, PV_MODE_FRCNT_50HZ_NIGHT);
}
}
else
{
if (g_bVideoMode == KAL_TRUE)
{ /* video preview mode */
write_cmos_sensor(0x11, VIDEO_MODE_FRCNT_50HZ_NORMAL);
}
else
{ /* camera preview mode */
write_cmos_sensor(0x11, PV_MODE_FRCNT_50HZ_NORMAL);
}
}
} /* SIV120A_NightMode */
/*************************************************************************
* FUNCTION
* SIV120A_SetFlash
*
* DESCRIPTION
* turn on/off SIV120A flashlight .
*
* PARAMETERS
* bEnable:
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void SIV120A_SetFlash(kal_bool bEnable)
{
} /* SIV120A_SetFlash */
/*************************************************************************
* FUNCTION
* SIV120A_Set_Param_Zoom
*
* DESCRIPTION
* SIV120A zoom setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV120A_Set_Para_Zoom(kal_uint32 iPara)
{
switch (iPara)
{
case CAM_ZOOM_1X:
case CAM_ZOOM_2X:
case CAM_ZOOM_4X:
default:
return KAL_FALSE;
}
return KAL_FALSE;
} /* SIV120A_Set_Param_Zoom */
/*************************************************************************
* FUNCTION
* SIV120A_Set_Para_Contrast
*
* DESCRIPTION
* SIV120A contrast setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV120A_Set_Para_Contrast(kal_uint32 iPara)
{
return KAL_FALSE;
} /* SIV120A_Set_Para_Contrast */
/*************************************************************************
* FUNCTION
* SIV120A_Set_Para_Brightness
*
* DESCRIPTION
* SIV120A brightness setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV120A_Set_Para_Brightness(kal_uint32 iPara)
{
return KAL_FALSE;
} /* SIV120A_Set_Para_Brightness */
/*************************************************************************
* FUNCTION
* SIV120A_Set_Para_Hue
*
* DESCRIPTION
* SIV120A hue setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV120A_Set_Para_Hue(kal_uint32 iPara)
{
return KAL_FALSE;
} /* SIV120A_Set_Para_Hue */
/*************************************************************************
* FUNCTION
* SIV120A_Set_Para_Gamma
*
* DESCRIPTION
* SIV120A gamma setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 SIV120A_Set_Para_Gamma(kal_uint32 iPara)
{
return KAL_FALSE;
} /* SIV120A_Set_Para_Gamma */
/*************************************************************************
* FUNCTION
* SIV120A_Set_Para_WB
*
* DESCRIPTION
* SIV120A WB setting.
*
* PARAMETERS
* None
*
* RETURNS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -