⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 image_sensor.c

📁 MTK6225摄像头驱动。芯片是SIV120A。
💻 C
📖 第 1 页 / 共 5 页
字号:
    }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 + -