Exemplo n.º 1
0
/* the function of sensor set fps */
static HI_VOID cmos_fps_set(HI_U8 u8Fps, AE_SENSOR_DEFAULT_S *pstAeSnsDft)
{
    switch(u8Fps)
    {
        case 30:
            gu32FullLinesStd = 750;
            pstAeSnsDft->u32MaxIntTime = 748;
            pstAeSnsDft->u32LinesPer500ms = 750 * 30 / 2;
            sensor_write_register(0x300C, 0xCE4);
        break;
        case 25:
            gu32FullLinesStd = 750;
            pstAeSnsDft->u32MaxIntTime = 748;
            pstAeSnsDft->u32LinesPer500ms = 750 * 25 / 2;
            sensor_write_register(0x300C, 0xF78);
        break;        
        default:
        break;
    }

    if(1 == gu8SensorMode)
    {
        pstAeSnsDft->u32MaxIntTime = 675;
    }

    pstAeSnsDft->u32FullLinesStd = gu32FullLinesStd;

    return;
}
Exemplo n.º 2
0
/* Set fps base */
static __inline void cmos_fps_set(
		cmos_inttime_ptr_t p_inttime,
		const HI_U8 fps
		)
{
#ifdef DUAL_PORT
	switch(fps)
	{
		default:
			// Change the frame rate via changing the vertical blanking
			p_inttime->full_lines_std = (1125 * 60) / fps;
			sensor_write_register(0xb6, 0x09);
			// These modes are configured via vertical blanking, thus 'lines_per_500ms' stays fixed
			p_inttime->lines_per_500ms = 1125 * 30;
		break;
		case 50:
			// Change the frame rate via changing the horizontal blanking
			p_inttime->full_lines_std = 1125;
			sensor_write_register(0xb6, 0x40);
			p_inttime->lines_per_500ms = 1125 * 25;
		break;
		case 25:
			// Change the frame rate via changing both vertical and horizontal blanking
			p_inttime->full_lines_std = 1125 * 2;
			sensor_write_register(0xb6, 0x40);
			p_inttime->lines_per_500ms = 1125 * 25;
		break;
	}
#else
	// the default framerate
	p_inttime->full_lines_std = (1125 * 30) / fps;
	sensor_write_register(0xb6, 0x09);
	p_inttime->lines_per_500ms = 1125 * fps / 2;
#endif
}
Exemplo n.º 3
0
/*
 * This function applies the new gains to the ISP registers.
 */
static __inline void cmos_gains_update(cmos_gains_const_ptr_t p_gains)
{

	// HI_U16 data16;
	HI_U16 lut_val;

    /* analog gain */
	{
        assert(p_gains->again_db <= 80);
		lut_val = analog_gain_lut_get_value(p_gains->again_db);
		sensor_write_register(APGC_ADDR, lut_val & 0xFF);
		sensor_write_register(APGC_ADDR + 1, (lut_val & 0x0300) >> 8);        
	}

    /* digital gain. 
      * digital_gain = DPGC * 0.3 db.
      * DPCG  = [00h, 3Ch];
      * digital_gain = [0db, 18db]. */
	{
        assert(p_gains->dgain_db <= 0x3C);
		sensor_write_register(DPGC_ADDR, p_gains->dgain_db);
	}

	//printf("gain = %d, %d, ", p_gains->again_db, p_gains->dgain_db);	

	return;
}
Exemplo n.º 4
0
/* Set fps base */
static __inline void cmos_fps_set(
		cmos_inttime_ptr_t p_inttime,
		const HI_U8 fps
		)
{
	switch(fps)
	{
		case 30:
			// Change the frame rate via changing the vertical blanking
			p_inttime->full_lines_std = 1125;
			sensor_write_register(VMAX_ADDR, 0x65);
			sensor_write_register(VMAX_ADDR+1, 0x04);
			p_inttime->lines_per_500ms = 1125 * 30 / 2;
		break;
		
		case 25:
			// Change the frame rate via changing the vertical blanking
			p_inttime->full_lines_std = 1350;
			sensor_write_register(VMAX_ADDR, 0x46);
			sensor_write_register(VMAX_ADDR+1, 0x05);
			p_inttime->lines_per_500ms = 1350 * 25 / 2;
		break;
		
		default:
		break;
	}
}
Exemplo n.º 5
0
/*
 * This function applies the new integration time to the ISP registers.
 */
static __inline void cmos_inttime_update(cmos_inttime_ptr_t p_inttime) 
{
	HI_U16 eshort = p_inttime->exposure_ashort;
	HI_U16 elong  = p_inttime->exposure_ashort;//?
	sensor_write_register(EXPOSURE_SHORT_ADDR, eshort);
	sensor_write_register(EXPOSURE_LONG_ADDR, elong);
}
Exemplo n.º 6
0
static HI_VOID cmos_gains_update(HI_U32 u32Again, HI_U32 u32Dgain)
{
    HI_U32 u32Tmp = u32Again + u32Dgain;
    switch(gu8SensorMode)
    {
        default:
        case 0: /* linear mode */
            if( u32Tmp > 0x1E0)
            {
                u32Tmp = 0x1E0;
            }
            #if CMOS_IMX236_ISP_WRITE_SENSOR_ENABLE
            cmos_init_regs_info();

            g_stSnsRegsInfo.astI2cData[3].u32Data = (u32Tmp & 0xff);
            g_stSnsRegsInfo.astI2cData[4].u32Data = ((u32Tmp & 0x100)>>8);

            HI_MPI_ISP_SnsRegsCfg(&g_stSnsRegsInfo);
            #else
            sensor_write_register(PGC_ADDR, u32Tmp & 0xff);
            sensor_write_register(PGC_ADDR + 1, (u32Tmp & 0x100) >> 8);
            #endif
        break;
        case 1: //WDR mode      
            #if CMOS_IMX236_ISP_WRITE_SENSOR_ENABLE
            cmos_init_regs_info();
            if(u32Dgain <= 120)
            {
                g_stSnsRegsInfo.astI2cData[6].u32Data = (u32Dgain & 0xff);
            }
            else
            {
                g_stSnsRegsInfo.astI2cData[6].u32Data = 0x78;
            }
            HI_MPI_ISP_SnsRegsCfg(&g_stSnsRegsInfo);
            #else
            if(u32Dgain <= 120)
            {
                sensor_write_register(PGC_ADDR, u32Dgain);
            }
            else
            {
                sensor_write_register(PGC_ADDR, 0x78);
            }
            #endif
        break;
    }

    return;
}
Exemplo n.º 7
0
HI_VOID cmos_set_pixel_detect(HI_BOOL bEnable)
{
    if (bEnable) /* setup for ISP pixel calibration mode */
    {
        /* Sensor must be programmed for slow frame rate (5 fps and below)*/
        /* change frame rate to 5 fps by setting 1 frame length = 750 * 30 / 5 */
        sensor_write_register(VMAX_ADDR, 0x5E);
        sensor_write_register(VMAX_ADDR + 1, 0x1A);

        /* max Exposure time */
        sensor_write_register(EXPOSURE_ADDR, 0x00);
        sensor_write_register(EXPOSURE_ADDR + 1, 0x00);

        /* Analog and Digital gains both must be programmed for their minimum values */
        sensor_write_register(PGC_ADDR, 0x00);
        sensor_write_register(PGC_ADDR + 1, 0x00); 
    }
    else /* setup for ISP 'normal mode' */
    {
        sensor_write_register(VMAX_ADDR, 0x65);
        sensor_write_register(VMAX_ADDR + 1, 0x04);      
    }

    return;
}
Exemplo n.º 8
0
HI_VOID cmos_set_pixel_detect(HI_BOOL bEnable)
{
    if (bEnable) /* setup for ISP pixel calibration mode */
    {
        sensor_write_register(0x300C, 0x4D58);    //5fps
        sensor_write_register(0x3012, 0x118);    //max exposure lines
        sensor_write_register(0x30B0, 0x1300);    //AG, Context A
        sensor_write_register(0x305E, 0x0020);    //DG, Context A
    }
    else /* setup for ISP 'normal mode' */
    {
        sensor_write_register(0x300C, 0xCE4);    //30fps
    }

    return;
}
Exemplo n.º 9
0
/*
 * This function applies the new vert blanking porch to the ISP registers.
 */
static __inline void cmos_vblanking_update(cmos_inttime_const_ptr_t p_inttime)
{
	HI_U16 vmax = p_inttime->full_lines;
	sensor_write_register(VMAX_ADDR, (vmax&0x00ff));
	sensor_write_register(VMAX_ADDR+1, ((vmax&0xff00) >> 8));
	
	return;
}
Exemplo n.º 10
0
static HI_VOID cmos_slow_framerate_set(HI_U16 u16FullLines,
    AE_SENSOR_DEFAULT_S *pstAeSnsDft)
{ 
    sensor_write_register(0x300A, u16FullLines);

    pstAeSnsDft->u32MaxIntTime = u16FullLines - 2;

    return;
}
Exemplo n.º 11
0
static HI_VOID cmos_gains_update(HI_U32 u32Again, HI_U32 u32Dgain)
{
#if CMOS_M034_ISP_WRITE_SENSOR_ENABLE
    cmos_init_regs_info();

    switch(u32Again)
    {
        case 0:
            g_stSnsRegsInfo.astI2cData[1].u32Data = 0x1300;
            break;
        case 1:
            g_stSnsRegsInfo.astI2cData[1].u32Data = 0x1310;
            break;
        case 2:
            g_stSnsRegsInfo.astI2cData[1].u32Data = 0x1320;
            break;
        case 3:
            g_stSnsRegsInfo.astI2cData[1].u32Data = 0x1330;
            break;
    }

    g_stSnsRegsInfo.astI2cData[2].u32Data = u32Dgain;
    HI_MPI_ISP_SnsRegsCfg(&g_stSnsRegsInfo);
#else
    switch(u32Again)
    {
        case 0:
            sensor_write_register(0x30B0, 0x1300);
            break;
        case 1:
            sensor_write_register(0x30B0, 0x1310);
            break;
        case 2:
            sensor_write_register(0x30B0, 0x1320);
            break;
        case 3:
            sensor_write_register(0x30B0, 0x1330);
            break;
    }

    sensor_write_register(0x305E, u32Dgain);
#endif
    return;
}
Exemplo n.º 12
0
/*
 * This function applies the new integration time to the ISP registers.
 */
static __inline void cmos_inttime_update(cmos_inttime_ptr_t p_inttime)
{

	HI_U32 eshort = p_inttime->exposure_ashort;
	HI_U32 exp_frames = eshort / p_inttime->full_lines_std;

	eshort = eshort - exp_frames * p_inttime->full_lines_std;
	eshort = p_inttime->full_lines_std - eshort;

	sensor_write_register(0x7c13, (eshort&0xffff));  //SUB Start lines
	sensor_write_register(0x7c14, (eshort&0xffff));  //SUB End lines,only one sub pulse .
	/*
	sensor_write_register(0x7D03, 0x4);  			//Primary field counter enable,bit[2]
	sensor_write_register(0x7C7C, ((exp_frames+1)&0x1fff));  //SGMASK_NUM,bit[12~0]
	sensor_write_register(0x7C7D, ((exp_frames+1)&0x1fff));  //SUBCKMASK_NUM,bit[12~0]
	sensor_write_register(0x7C7B, 0xA);  			//SUBCK_MASK_SKIP1,bit[1]
	*/

}
Exemplo n.º 13
0
/*
 * This function applies the new integration time to the ISP registers.
 */
static __inline void cmos_inttime_update(cmos_inttime_ptr_t p_inttime) 
{
    HI_U16 exp_time;

    exp_time = p_inttime->full_lines - p_inttime->exposure_ashort;


    sensor_write_register(EXPOSURE_ADDR, exp_time & 0xFF);
    sensor_write_register(EXPOSURE_ADDR + 1, (exp_time & 0xFF00) >> 8);
}
Exemplo n.º 14
0
/* while isp notify ae to update sensor regs, ae call these funcs. */
static HI_VOID cmos_inttime_update(HI_U32 u32IntTime)
{
#if CMOS_M034_ISP_WRITE_SENSOR_ENABLE
    cmos_init_regs_info();
    g_stSnsRegsInfo.astI2cData[0].u32Data = u32IntTime;
#else
    sensor_write_register(0x3012, u32IntTime);
#endif
    return;
}
Exemplo n.º 15
0
HI_VOID cmos_set_wdr_mode(HI_U8 u8Mode)
{
    switch(u8Mode)
    {
        //720P30 linear
        case 0:
            gu8SensorMode = 0;
            printf("linear mode\n");

            /* program sensor to linear mode */
            sensor_prog(sensor_rom_30_lin);

            /* Enable DCG */
            sensor_write_register(0x3100, 0x001E);

            /* Enable 1.25x analog gain */
            sensor_write_register(0x3EE4, 0xD308);
        break;

        //720P30 wdr
        case 1:
            gu8SensorMode = 1;
            printf("wdr mode\n");

            /* program sensor to wdr mode */
            sensor_prog(sensor_rom_30_wdr);

            /* Disable DCG */
            sensor_write_register(0x3100, 0x001A);

            /* Disable 1.25x analog gain */
            sensor_write_register(0x3EE4, 0xD208);
        break;

        default:
            printf("NOT support this mode!\n");
            return;
        break;
    }
    
    return;
}
Exemplo n.º 16
0
/*
 * This function applies the new vert blanking porch to the ISP registers.
 */
static __inline void cmos_vblanking_update(cmos_inttime_const_ptr_t p_inttime)
{
    HI_U16 vmax = p_inttime->full_lines;
    static HI_U16 last_vblanking_lines = 0xFFFF;
    
    if(vmax != last_vblanking_lines)
    {
        sensor_write_register(VMAX_ADDR, (vmax&0x00ff));
        sensor_write_register(VMAX_ADDR+1, ((vmax&0xff00) >> 8));
        last_vblanking_lines = vmax;
    }else
Exemplo n.º 17
0
static void setup_sensor(int isp_mode)
{
	if(0 == isp_mode) /* setup for ISP 'normal mode' */
	{
        sensor_write_register(VMAX_ADDR, 0x65);
        sensor_write_register(VMAX_ADDR + 1, 0x04);
	}
	else if(1 == isp_mode) /* setup for ISP pixel calibration mode */
	{
        //TODO: finish this.
        /* Sensor must be programmed for slow frame rate (5 fps and below)*/
        /* change frame rate to 3 fps by setting 1 frame length = 1125 * (30/3) */
        sensor_write_register(VMAX_ADDR, 0xF2);
        sensor_write_register(VMAX_ADDR + 1, 0x2B);

        /* Analog and Digital gains both must be programmed for their minimum values */
		sensor_write_register(PGC_ADDR, 0x00);
       // sensor_write_register(APGC_ADDR + 1, 0x00);
	//	sensor_write_register(DPGC_ADDR, 0x00);
	}
}
Exemplo n.º 18
0
/*
 * This function applies the new gains to the ISP registers.
 */
static __inline HI_U16 cmos_gains_update(cmos_gains_const_ptr_t p_gains)
{

	HI_U16 data16;
	HI_U16 lut_val;

    /* analog gain 
      * analog gain = PGC * 0.3 db.
      * APGC = [0,80];
      * analog gain = [0db, 24db]. */
      
	{
        if(p_gains->again_db <= 80);
		{
            
		 sensor_write_register(PGC_ADDR, p_gains->again_db);
        }
	}

    /* digital gain. 
      * digital_gain = DPGC * 0.3 db.
      * DPCG  = [51h, 8Ch];
      * digital_gain = [0db, 18db]. */
      if(p_gains->again_db==80)
        {
     	  {
            if(p_gains->dgain_db <= 0x3C);
            {
                    lut_val = digital_gain_lut_get_value(p_gains->dgain_db);
            }
    		sensor_write_register(PGC_ADDR, lut_val);
    	   }
        }
	
	
}
Exemplo n.º 19
0
void sensor_prog(int* rom) 
{
    int i = 0;
    while (1) {
        int lookup = rom[i++];
        int addr = (lookup >> 16) & 0xFFFF;
        int data = lookup & 0xFFFF;
        if (addr == 0xFFFE) {
            delay_ms(data);
        } else if (addr == 0xFFFF) {
            return;
        } else {
			sensor_write_register(addr, data);
        }
    }
}
Exemplo n.º 20
0
static HI_VOID cmos_slow_framerate_set(HI_U16 u16FullLines,
    AE_SENSOR_DEFAULT_S *pstAeSnsDft)
{
    HI_U16 u16Vmax = u16FullLines;
    HI_U16 u16Current;
    u16Current = sensor_read_register(VMAX_ADDR+2);
    
    sensor_write_register(VMAX_ADDR, (u16Vmax&0x00ff));
    sensor_write_register(VMAX_ADDR+1, ((u16Vmax&0xff00) >> 8));
    //sensor_write_register(VMAX_ADDR+2,(((u16Vmax & 0x10000) >> 16)+(u16Current&0xFE)));

    pstAeSnsDft->u32MaxIntTime = u16Vmax - 2;
    gu32FullLines = u16Vmax;

    return;
}
Exemplo n.º 21
0
/*
 * This function applies the new gains to the ISP registers.
 */
static __inline HI_U16 cmos_gains_update2(cmos_gains_const_ptr_t p_gains)
{

	HI_U16 data16;
//	HI_U16 out_offset;
//	HI_U32 data32;
	HI_U16 lut_val;

	{
		lut_val = analog_gain_lut_get_value(p_gains->again);

		sensor_write_register(COL_BUF_GAIN_EVEN_EAST_ADDR, lut_val);
		sensor_write_register(COL_BUF_GAIN_EVEN_WEST_ADDR, lut_val);
		sensor_write_register(COL_BUF_GAIN_ODD_EAST_ADDR, lut_val);
		sensor_write_register(COL_BUF_GAIN_ODD_WEST_ADDR, lut_val);

		// Update the ext status	
		//apical_ext_exposure_status_analog_gain_status_write(lut_val);
	}

	{
		 data16 = p_gains->dgain_fine;
		// digital_gain_fine data - set bit15
		data16 = data16 | 0x8000;

		sensor_write_register(DP_FINE_GAIN_FACTOR_E_ADDR, data16);
		sensor_write_register(DP_FINE_GAIN_FACTOR_O_ADDR, data16);

		// Update the ext status
		//apical_ext_exposure_status_fine_digital_gain_status_write(data16);
	}

	{
		HI_U8 data_lut = p_gains->dgain + 4;
		if (data_lut > 15)
			data_lut = 15;

		data16 = (data_lut << 4) | data_lut;
		// digital_gain_coarse data - set bit15
		// digital_gain_coarse data - set bit8
		data16 = data16 | 0x8100;

		sensor_write_register(DP_COARSE_ADDR, data16);

		// Update the ext status
		//apical_ext_exposure_status_coarse_digital_gain_status_write(data16);
	}

	return cmos_gains_dpga_update(p_gains);
}
Exemplo n.º 22
0
/*
 * This function applies the digital gain
 * input and output offset and correction
 */
static __inline void cmos_gains_update(cmos_gains_const_ptr_t p_gains)
{

	switch (p_gains->again_db)
    {
    case 0:
        sensor_write_register(0xC001, 0x0);
		break;

	case 3:
        sensor_write_register(0xC001, 0x1);
        break;

    case 6:
        sensor_write_register(0xC001, 0x2);
        break;

    case 9:
        sensor_write_register(0xC001, 0x3);
        break;

    case 12:
        sensor_write_register(0xC001, 0x4);
        break;

    case 15:
        sensor_write_register(0xC001, 0x5);
        break;

    case 18:
        sensor_write_register(0xC001, 0x6);
        break;

    default:
        break;
    }

	//set the dgain
	 sensor_write_register(0xC002, (p_gains->dgain_db & 0x3ff));

	//printf("again = %d,dgain = %d\n",p_gains->again_db,p_gains->dgain_db);

}
Exemplo n.º 23
0
static void setup_sensor(int isp_mode)
{
	if(0 == isp_mode) /* setup for ISP 'normal mode' */
	{
        sensor_write_register(VMAX_ADDR, 0x48);
        sensor_write_register(VMAX_ADDR + 1, 0x06);
	}
	else if(1 == isp_mode) /* setup for ISP pixel calibration mode */
	{
        /* Sensor must be programmed for slow frame rate (5 fps and below)*/
        sensor_write_register(VMAX_ADDR, 0x5E);
        sensor_write_register(VMAX_ADDR + 1, 0x1A);

        /* Analog and Digital gains both must be programmed for their minimum values */
		sensor_write_register(APGC_ADDR, 0x00);
        sensor_write_register(APGC_ADDR + 1, 0x00);
		sensor_write_register(DPGC_ADDR, 0x00);
	}
}
Exemplo n.º 24
0
static void setup_sensor(int isp_mode)
{
		return;
	if(0 == isp_mode) /* setup for ISP 'normal mode' */
	{
		sensor_write_register(0x00A5,0x0000);
	}
	else if(1 == isp_mode) /* setup for ISP pixel calibration mode */
	{
        //set the gain to 0
		sensor_write_register(0x0020,0x0080);
		sensor_write_register(0x0021,0x0080);
		sensor_write_register(0x00A1,0x0400);
		sensor_write_register(0x00A2,0x0002);
		sensor_write_register(0x00A5,0x0005);
	}
}
Exemplo n.º 25
0
void sensor_init()
{
	// sequence according to "Flow  Power-on to Operation Start(Sensor Master Mode)
	sensor_write_register(0x200,0x45);
	sensor_write_register(0x201,0x00);
	sensor_write_register(0x202,0x00);
	sensor_write_register(0x203,0x08);
	sensor_write_register(0x204,0x12);
	sensor_write_register(0x205,0x00);
	sensor_write_register(0x206,0x00);
	sensor_write_register(0x207,0xB8);
	sensor_write_register(0x208,0x08);
	sensor_write_register(0x209,0x48);
	sensor_write_register(0x20A,0x06);
	sensor_write_register(0x20B,0x00);
	sensor_write_register(0x20C,0x00);
	sensor_write_register(0x20D,0x00);
	sensor_write_register(0x20E,0x00);
	sensor_write_register(0x20F,0x00);
	sensor_write_register(0x210,0x00);
	sensor_write_register(0x211,0x00);
	sensor_write_register(0x212,0x00);
	sensor_write_register(0x213,0x00);
	sensor_write_register(0x214,0x00);
	sensor_write_register(0x215,0x00);
	sensor_write_register(0x216,0x00);
	sensor_write_register(0x217,0x0D);
	sensor_write_register(0x218,0x00);
	sensor_write_register(0x219,0xE0);
	sensor_write_register(0x21A,0x00);
	sensor_write_register(0x21B,0x00);
	sensor_write_register(0x21C,0x0F);
	sensor_write_register(0x21D,0x00);
	sensor_write_register(0x21E,0x00);
	sensor_write_register(0x21F,0xF0);
	sensor_write_register(0x220,0x00);
	sensor_write_register(0x221,0x13);
	sensor_write_register(0x222,0x5C);
	sensor_write_register(0x223,0x00);
	sensor_write_register(0x224,0x00);
	sensor_write_register(0x225,0x47);
	sensor_write_register(0x226,0x00);
	sensor_write_register(0x227,0xD6);
	sensor_write_register(0x228,0x00);
	sensor_write_register(0x229,0x00);
	sensor_write_register(0x22A,0x00);
	sensor_write_register(0x22B,0x10);
	sensor_write_register(0x22C,0x00);
	sensor_write_register(0x22D,0x88);
	sensor_write_register(0x22E,0x06);
	sensor_write_register(0x22F,0x06);
	sensor_write_register(0x230,0x24);
	sensor_write_register(0x231,0x04);
	sensor_write_register(0x232,0x86);
	sensor_write_register(0x233,0x01);
	sensor_write_register(0x234,0x00);
	sensor_write_register(0x235,0x00);
	sensor_write_register(0x236,0x00);
	sensor_write_register(0x237,0x00);
	sensor_write_register(0x238,0x40);
	sensor_write_register(0x239,0x00);
	sensor_write_register(0x23A,0x00);
	sensor_write_register(0x23B,0xC0);
	sensor_write_register(0x23C,0x00);
	sensor_write_register(0x23D,0x00);
	sensor_write_register(0x23E,0xB8);
	sensor_write_register(0x23F,0x08);
	sensor_write_register(0x240,0x40);
	sensor_write_register(0x241,0x00);
	sensor_write_register(0x242,0xC0);
	sensor_write_register(0x243,0x16);
	sensor_write_register(0x244,0x00);
	sensor_write_register(0x245,0x00);
	sensor_write_register(0x246,0x00);
	sensor_write_register(0x247,0x00);
	sensor_write_register(0x248,0x00);
	sensor_write_register(0x249,0x00);
	sensor_write_register(0x24A,0x00);
	sensor_write_register(0x24B,0x00);
	sensor_write_register(0x24C,0x00);
	sensor_write_register(0x24D,0x00);
	sensor_write_register(0x24E,0x00);
	sensor_write_register(0x24F,0x00);
	sensor_write_register(0x250,0x00);
	sensor_write_register(0x251,0x00);
	sensor_write_register(0x252,0x00);
	sensor_write_register(0x253,0x00);
	sensor_write_register(0x254,0x00);
	sensor_write_register(0x255,0x00);
	sensor_write_register(0x256,0x00);
	sensor_write_register(0x257,0x00);
	sensor_write_register(0x258,0x00);
	sensor_write_register(0x259,0x00);
	sensor_write_register(0x25A,0x00);
	sensor_write_register(0x25B,0x20);
	sensor_write_register(0x25C,0x80);
	sensor_write_register(0x25D,0x00);
	sensor_write_register(0x25E,0xFF);
	sensor_write_register(0x25F,0x02);
	sensor_write_register(0x260,0x00);
	sensor_write_register(0x261,0x00);
	sensor_write_register(0x262,0x00);
	sensor_write_register(0x263,0x00);
	sensor_write_register(0x264,0x00);
	sensor_write_register(0x265,0x00);
	sensor_write_register(0x266,0x00);
	sensor_write_register(0x267,0x00);
	sensor_write_register(0x268,0x01);
	sensor_write_register(0x269,0x00);
	sensor_write_register(0x26A,0x01);
	sensor_write_register(0x26B,0x09);
	sensor_write_register(0x26C,0xA0);
	sensor_write_register(0x26D,0x20);
	sensor_write_register(0x26E,0x00);
	sensor_write_register(0x26F,0x00);
	sensor_write_register(0x270,0x80);
	sensor_write_register(0x271,0x00);
	sensor_write_register(0x272,0x00);
	sensor_write_register(0x273,0xB1);
	sensor_write_register(0x274,0x01);
	sensor_write_register(0x275,0x70);
	sensor_write_register(0x276,0x60);
	sensor_write_register(0x277,0x00);
	sensor_write_register(0x278,0x00);
	sensor_write_register(0x279,0x00);
	sensor_write_register(0x27A,0x00);
	sensor_write_register(0x27B,0x00);
	sensor_write_register(0x27C,0x00);
	sensor_write_register(0x27D,0x00);
	sensor_write_register(0x27E,0x00);
	sensor_write_register(0x27F,0x00);
	sensor_write_register(0x280,0x00);
	sensor_write_register(0x281,0x00);
	sensor_write_register(0x282,0x00);
	sensor_write_register(0x283,0x00);
	sensor_write_register(0x284,0x82);
	sensor_write_register(0x285,0x00);
	sensor_write_register(0x286,0x02);
	sensor_write_register(0x287,0x00);
	sensor_write_register(0x288,0x2C);
	sensor_write_register(0x289,0x2C);
	sensor_write_register(0x28A,0x00);
	sensor_write_register(0x28B,0x00);
	sensor_write_register(0x28C,0xF2);
	sensor_write_register(0x28D,0x19);
	sensor_write_register(0x28E,0x00);
	sensor_write_register(0x28F,0x05);
	sensor_write_register(0x290,0x20);
	sensor_write_register(0x291,0x00);
	sensor_write_register(0x292,0x00);
	sensor_write_register(0x293,0x40);
	sensor_write_register(0x294,0x00);
	sensor_write_register(0x295,0x00);
	sensor_write_register(0x296,0x30);
	sensor_write_register(0x297,0x00);
	sensor_write_register(0x298,0x00);
	sensor_write_register(0x299,0x00);
	sensor_write_register(0x29A,0x18);
	sensor_write_register(0x29B,0x00);
	sensor_write_register(0x29C,0x00);
	sensor_write_register(0x29D,0x00);
	sensor_write_register(0x29E,0x00);
	sensor_write_register(0x29F,0x00);
	sensor_write_register(0x2A0,0x00);
	sensor_write_register(0x2A1,0x00);
	sensor_write_register(0x2A2,0x00);
	sensor_write_register(0x2A3,0x02);
	sensor_write_register(0x2A4,0x04);
	sensor_write_register(0x2A5,0x0F);
	sensor_write_register(0x2A6,0x00);
	sensor_write_register(0x2A7,0x01);
	sensor_write_register(0x2A8,0x48);
	sensor_write_register(0x2A9,0x05);
	sensor_write_register(0x2AA,0x00);
	sensor_write_register(0x2AB,0x00);
	sensor_write_register(0x2AC,0x00);
	sensor_write_register(0x2AD,0xFF);
	sensor_write_register(0x2AE,0x01);
	sensor_write_register(0x2AF,0xFF);
	sensor_write_register(0x2B0,0x02);
	sensor_write_register(0x2B1,0x7F);
	sensor_write_register(0x2B2,0x03);
	sensor_write_register(0x2B3,0xBF);
	sensor_write_register(0x2B4,0x03);
	sensor_write_register(0x2B5,0x00);
	sensor_write_register(0x2B6,0x00);
	sensor_write_register(0x2B7,0x0A);
	sensor_write_register(0x2B8,0x00);
	sensor_write_register(0x2B9,0x00);
	sensor_write_register(0x2BA,0x00);
	sensor_write_register(0x2BB,0x00);
	sensor_write_register(0x2BC,0x00);
	sensor_write_register(0x2BD,0x00);
	sensor_write_register(0x2BE,0x00);
	sensor_write_register(0x2BF,0x00);
	sensor_write_register(0x2C0,0x00);
	sensor_write_register(0x2C1,0x00);
	sensor_write_register(0x2C2,0x00);
	sensor_write_register(0x2C3,0x00);
	sensor_write_register(0x2C4,0x00);
	sensor_write_register(0x2C5,0x00);
	sensor_write_register(0x2C6,0x00);
	sensor_write_register(0x2C7,0x00);
	sensor_write_register(0x2C8,0x00);
	sensor_write_register(0x2C9,0x00);
	sensor_write_register(0x2CA,0x00);
	sensor_write_register(0x2CB,0x00);
	sensor_write_register(0x2CC,0x00);
	sensor_write_register(0x2CD,0x00);
	sensor_write_register(0x2CE,0x00);
	sensor_write_register(0x2CF,0x00);
	sensor_write_register(0x2D0,0x00);
	sensor_write_register(0x2D1,0x00);
	sensor_write_register(0x2D2,0x00);
	sensor_write_register(0x2D3,0x10);
	sensor_write_register(0x2D4,0x00);
	sensor_write_register(0x2D5,0x10);
	sensor_write_register(0x2D6,0x40);
	sensor_write_register(0x2D7,0x20);
	sensor_write_register(0x2D8,0x66);
	sensor_write_register(0x2D9,0x0E);
	sensor_write_register(0x2DA,0x01);
	sensor_write_register(0x2DB,0x06);
	sensor_write_register(0x2DC,0x06);
	sensor_write_register(0x2DD,0x0C);
	sensor_write_register(0x2DE,0x10);
	sensor_write_register(0x2DF,0x00);
	sensor_write_register(0x2E0,0x7C);
	sensor_write_register(0x2E1,0x00);
	sensor_write_register(0x2E2,0x00);
	sensor_write_register(0x2E3,0xFF);
	sensor_write_register(0x2E4,0xFF);
	sensor_write_register(0x2E5,0xFF);
	sensor_write_register(0x2E6,0xFF);
	sensor_write_register(0x2E7,0xFF);
	sensor_write_register(0x2E8,0xFF);
	sensor_write_register(0x2E9,0x00);
	sensor_write_register(0x2EA,0xC9);
	sensor_write_register(0x2EB,0x00);
	sensor_write_register(0x2EC,0x00);
	sensor_write_register(0x2ED,0x00);
	sensor_write_register(0x2EE,0x12);
	sensor_write_register(0x2EF,0x01);
	sensor_write_register(0x2F0,0x00);
	sensor_write_register(0x2F1,0x00);
	sensor_write_register(0x2F2,0x00);
	sensor_write_register(0x2F3,0x00);
	sensor_write_register(0x2F4,0x00);
	sensor_write_register(0x2F5,0x00);
	sensor_write_register(0x2F6,0x00);
	sensor_write_register(0x2F7,0x00);
	sensor_write_register(0x2F8,0x00);
	sensor_write_register(0x2F9,0x00);
	sensor_write_register(0x2FA,0x00);
	sensor_write_register(0x2FB,0x00);
	sensor_write_register(0x2FC,0x00);
	sensor_write_register(0x2FD,0x00);
	sensor_write_register(0x2FE,0x00);
			
	
	sensor_write_register(0x300,0x01);
	sensor_write_register(0x301,0x50);
	sensor_write_register(0x302,0x1C);
	sensor_write_register(0x303,0x01);
	sensor_write_register(0x304,0x20);
	sensor_write_register(0x305,0x01);
	sensor_write_register(0x306,0x93);
	sensor_write_register(0x307,0xD0);
	sensor_write_register(0x308,0x09);
	sensor_write_register(0x309,0xE3);
	sensor_write_register(0x30A,0xB1);
	sensor_write_register(0x30B,0x1F);
	sensor_write_register(0x30C,0xC5);
	sensor_write_register(0x30D,0x31);
	sensor_write_register(0x30E,0x21);
	sensor_write_register(0x30F,0x2B);
	sensor_write_register(0x310,0x02);
	sensor_write_register(0x311,0x59);
	sensor_write_register(0x312,0x15);
	sensor_write_register(0x313,0x59);
	sensor_write_register(0x314,0x15);
	sensor_write_register(0x315,0x71);
	sensor_write_register(0x316,0x1D);
	sensor_write_register(0x317,0x59);
	sensor_write_register(0x318,0x15);
	sensor_write_register(0x319,0x00);
	sensor_write_register(0x31A,0x00);
	sensor_write_register(0x31B,0x00);
	sensor_write_register(0x31C,0x00);
	sensor_write_register(0x31D,0x00);
	sensor_write_register(0x31E,0x00);
	sensor_write_register(0x31F,0x9C);
	sensor_write_register(0x320,0xF0);
	sensor_write_register(0x321,0x09);
	sensor_write_register(0x322,0x01);
	sensor_write_register(0x323,0xB0);
	sensor_write_register(0x324,0x22);
	sensor_write_register(0x325,0xC5);
	sensor_write_register(0x326,0x31);
	sensor_write_register(0x327,0x21);
	sensor_write_register(0x328,0x01);
	sensor_write_register(0x329,0x30);
	sensor_write_register(0x32A,0x21);
	sensor_write_register(0x32B,0xC5);
	sensor_write_register(0x32C,0x31);
	sensor_write_register(0x32D,0x21);
	sensor_write_register(0x32E,0x2C);
	sensor_write_register(0x32F,0x62);
	sensor_write_register(0x330,0x1C);
	sensor_write_register(0x331,0x01);
	sensor_write_register(0x332,0xF0);
	sensor_write_register(0x333,0x00);
	sensor_write_register(0x334,0x00);
	sensor_write_register(0x335,0x40);
	sensor_write_register(0x336,0x01);
	sensor_write_register(0x337,0xC5);
	sensor_write_register(0x338,0x11);
	sensor_write_register(0x339,0x00);
	sensor_write_register(0x33A,0xC5);
	sensor_write_register(0x33B,0x11);
	sensor_write_register(0x33C,0x00);
	sensor_write_register(0x33D,0x01);
	sensor_write_register(0x33E,0x90);
	sensor_write_register(0x33F,0x03);
	sensor_write_register(0x340,0x02);
	sensor_write_register(0x341,0x10);
	sensor_write_register(0x342,0x00);
	sensor_write_register(0x343,0x91);
	sensor_write_register(0x344,0x20);
	sensor_write_register(0x345,0x09);
	sensor_write_register(0x346,0x2F);
	sensor_write_register(0x347,0x10);
	sensor_write_register(0x348,0x00);
	sensor_write_register(0x349,0x01);
	sensor_write_register(0x34A,0x00);
	sensor_write_register(0x34B,0x35);
	sensor_write_register(0x34C,0x00);
	sensor_write_register(0x34D,0x3F);
	sensor_write_register(0x34E,0x00);
	sensor_write_register(0x34F,0x3F);
	sensor_write_register(0x350,0x00);
	sensor_write_register(0x351,0xAD);
	sensor_write_register(0x352,0x00);
	sensor_write_register(0x353,0xAD);
	sensor_write_register(0x354,0x00);
	sensor_write_register(0x355,0x01);
	sensor_write_register(0x356,0x00);
	sensor_write_register(0x357,0x46);
	sensor_write_register(0x358,0x00);
	sensor_write_register(0x359,0x12);
	sensor_write_register(0x35A,0x00);
	sensor_write_register(0x35B,0xC5);
	sensor_write_register(0x35C,0x01);
	sensor_write_register(0x35D,0x11);
	sensor_write_register(0x35E,0x00);
	sensor_write_register(0x35F,0x97);
	sensor_write_register(0x360,0x00);
	sensor_write_register(0x361,0x02);
	sensor_write_register(0x362,0x00);
	sensor_write_register(0x363,0xC4);
	sensor_write_register(0x364,0x01);
	sensor_write_register(0x365,0x02);
	sensor_write_register(0x366,0x00);
	sensor_write_register(0x367,0x01);
	sensor_write_register(0x368,0x00);
	sensor_write_register(0x369,0x44);
	sensor_write_register(0x36A,0x00);
	sensor_write_register(0x36B,0x3A);
	sensor_write_register(0x36C,0x00);
	sensor_write_register(0x36D,0xA0);
	sensor_write_register(0x36E,0x00);
	sensor_write_register(0x36F,0x9D);
	sensor_write_register(0x370,0x00);
	sensor_write_register(0x371,0x01);
	sensor_write_register(0x372,0x00);
	sensor_write_register(0x373,0x3A);
	sensor_write_register(0x374,0x00);
	sensor_write_register(0x375,0x03);
	sensor_write_register(0x376,0x00);
	sensor_write_register(0x377,0x01);
	sensor_write_register(0x378,0x00);
	sensor_write_register(0x379,0x3C);
	sensor_write_register(0x37A,0x00);
	sensor_write_register(0x37B,0x3A);
	sensor_write_register(0x37C,0x00);
	sensor_write_register(0x37D,0x9F);
	sensor_write_register(0x37E,0x00);
	sensor_write_register(0x37F,0x9D);
	sensor_write_register(0x380,0x00);
	sensor_write_register(0x381,0x01);
	sensor_write_register(0x382,0x00);
	sensor_write_register(0x383,0x9D);
	sensor_write_register(0x384,0x00);
	sensor_write_register(0x385,0x0B);
	sensor_write_register(0x386,0x00);
	sensor_write_register(0x387,0x16);
	sensor_write_register(0x388,0x00);
	sensor_write_register(0x389,0x21);
	sensor_write_register(0x38A,0x00);
	sensor_write_register(0x38B,0x00);
	sensor_write_register(0x38C,0x00);
	sensor_write_register(0x38D,0x00);
	sensor_write_register(0x38E,0x00);
	sensor_write_register(0x38F,0x00);
	sensor_write_register(0x390,0x00);
	sensor_write_register(0x391,0x00);
	sensor_write_register(0x392,0x00);
	sensor_write_register(0x393,0x00);
	sensor_write_register(0x394,0x00);
	sensor_write_register(0x395,0x00);
	sensor_write_register(0x396,0x00);
	sensor_write_register(0x397,0x00);
	sensor_write_register(0x398,0x9E);
	sensor_write_register(0x399,0x00);
	sensor_write_register(0x39A,0xA7);
	sensor_write_register(0x39B,0x00);
	sensor_write_register(0x39C,0x07);
	sensor_write_register(0x39D,0x00);
	sensor_write_register(0x39E,0x11);
	sensor_write_register(0x39F,0x00);
	sensor_write_register(0x3A0,0x00);
	sensor_write_register(0x3A1,0x00);
	sensor_write_register(0x3A2,0x00);
	sensor_write_register(0x3A3,0x00);
	sensor_write_register(0x3A4,0x00);
	sensor_write_register(0x3A5,0x00);
	sensor_write_register(0x3A6,0x00);
	sensor_write_register(0x3A7,0x00);
	sensor_write_register(0x3A8,0x00);
	sensor_write_register(0x3A9,0x00);
	sensor_write_register(0x3AA,0x00);
	sensor_write_register(0x3AB,0x00);
	sensor_write_register(0x3AC,0x1B);
	sensor_write_register(0x3AD,0x00);
	sensor_write_register(0x3AE,0x08);
	sensor_write_register(0x3AF,0x00);
	sensor_write_register(0x3B0,0x1B);
	sensor_write_register(0x3B1,0x00);
	sensor_write_register(0x3B2,0x08);
	sensor_write_register(0x3B3,0x00);
	sensor_write_register(0x3B4,0x11);
	sensor_write_register(0x3B5,0x00);
	sensor_write_register(0x3B6,0xA7);
	sensor_write_register(0x3B7,0x00);
	sensor_write_register(0x3B8,0xA7);
	sensor_write_register(0x3B9,0x00);
	sensor_write_register(0x3BA,0x11);
	sensor_write_register(0x3BB,0x00);
	sensor_write_register(0x3BC,0x11);
	sensor_write_register(0x3BD,0x00);
	sensor_write_register(0x3BE,0xA7);
	sensor_write_register(0x3BF,0x00);
	sensor_write_register(0x3C0,0xA9);
	sensor_write_register(0x3C1,0x00);
	sensor_write_register(0x3C2,0xAB);
	sensor_write_register(0x3C3,0x00);
	sensor_write_register(0x3C4,0x16);
	sensor_write_register(0x3C5,0x00);
	sensor_write_register(0x3C6,0x1B);
	sensor_write_register(0x3C7,0x00);
	sensor_write_register(0x3C8,0x9E);
	sensor_write_register(0x3C9,0xB0);
	sensor_write_register(0x3CA,0x0A);
	sensor_write_register(0x3CB,0x07);
	sensor_write_register(0x3CC,0xB0);
	sensor_write_register(0x3CD,0x01);
	sensor_write_register(0x3CE,0x46);
	sensor_write_register(0x3CF,0x00);
	sensor_write_register(0x3D0,0x92);
	sensor_write_register(0x3D1,0x80);
	sensor_write_register(0x3D2,0x0B);
	sensor_write_register(0x3D3,0x81);
	sensor_write_register(0x3D4,0x01);
	sensor_write_register(0x3D5,0x17);
	sensor_write_register(0x3D6,0x02);
	sensor_write_register(0x3D7,0x1B);
	sensor_write_register(0x3D8,0x02);
	sensor_write_register(0x3D9,0x00);
	sensor_write_register(0x3DA,0x00);
	sensor_write_register(0x3DB,0x00);
	sensor_write_register(0x3DC,0x00);
	sensor_write_register(0x3DD,0x53);
	sensor_write_register(0x3DE,0x00);
	sensor_write_register(0x3DF,0x91);
	sensor_write_register(0x3E0,0x00);
	sensor_write_register(0x3E1,0xBC);
	sensor_write_register(0x3E2,0x00);
	sensor_write_register(0x3E3,0x80);
	sensor_write_register(0x3E4,0x01);
	sensor_write_register(0x3E5,0x00);
	sensor_write_register(0x3E6,0x00);
	sensor_write_register(0x3E7,0x00);
	sensor_write_register(0x3E8,0x00);
	sensor_write_register(0x3E9,0x00);
	sensor_write_register(0x3EA,0x00);
	sensor_write_register(0x3EB,0x00);
	sensor_write_register(0x3EC,0x00);
	
	
	// standby cancel
	//sensor_write_register(0x200, 0x54);
	sensor_write_register(0x200, 0x44);

	// waiting for internal regular stabilization
	usleep(200000);
	
	// master mode start
	sensor_write_register(0x22D, 0x08);

	// XVS,XHS output start
	sensor_write_register(0x229, 0xC0);

	// waiting for image stabilization
	usleep(200000);

	printf("-------Sony IMX036 Sensor Initial OK!-------\n");
}
Exemplo n.º 26
0
void sensor_init()
{
	sensor_write_register(0x200, 0x01); //Standby
	usleep(200000);

    // chip_id = 0x2
	sensor_write_register(0x205, 0x01); //12bit
	sensor_write_register(0x206, 0x00); //Drive mode:All-pix scan mode(720p mode)
	sensor_write_register(0x207, 0x10); //Window mode:720p mode
	sensor_write_register(0x209, 0x02); //30fps mode
	sensor_write_register(0x20A, 0xF0); //black level

    /*linear & WDR mode is different*/
    sensor_write_register(0x20C, 0x00);
    sensor_write_register(0x20F, 0x01);
    sensor_write_register(0x210, 0x39);
    sensor_write_register(0x212, 0x50);

	sensor_write_register(0x217, 0x01);
	sensor_write_register(0x218, 0xF0);
	sensor_write_register(0x219, 0x02);
	sensor_write_register(0x21A, 0x00);
	
	sensor_write_register(0x21B, 0xC0);//different from imx104
	sensor_write_register(0x21C, 0x19);
	
	sensor_write_register(0x21D, 0xFF);
	sensor_write_register(0x21E, 0x01);
	sensor_write_register(0x236, 0x14); //VB size
	
	sensor_write_register(0x238, 0x00); //cropping postion(Vertical position)
	sensor_write_register(0x239, 0x00);
	
	sensor_write_register(0x23A, 0x19); //cropping size(Vertical direction)
	sensor_write_register(0x23B, 0x04);
	
	sensor_write_register(0x23C, 0x00); //cropping postion(horizontal position)
	sensor_write_register(0x23D, 0x00);
	sensor_write_register(0x23E, 0x1C); //cropping size(horizontal direction)
	sensor_write_register(0x23F, 0x05);
	sensor_write_register(0x244, 0x01); //Parallel CMOS SDR output
	sensor_write_register(0x254, 0x63);
	sensor_write_register(0x25B, 0x00); //CLK 37.125MHz
	sensor_write_register(0x25D, 0x00); //CLK 37.125MHz
	sensor_write_register(0x25F, 0x10); //invalid
	sensor_write_register(0x2BF, 0x1F);

    /*linear & WDR mode is different*/
    sensor_write_register(0x265, 0x20);
    sensor_write_register(0x286, 0x01);
    sensor_write_register(0x2CF, 0xD1);
    sensor_write_register(0x2D0, 0x1B);
    sensor_write_register(0x2D2, 0x5F);
    sensor_write_register(0x2D3, 0x00);

	// chip_id = 0x3
	sensor_write_register(0x312, 0x00);
	sensor_write_register(0x31D, 0x07);
	sensor_write_register(0x323, 0x07);
	sensor_write_register(0x326, 0xDF);
	sensor_write_register(0x347, 0x87);

	// chip_id = 0x4
	sensor_write_register(0x403, 0xCD);
	sensor_write_register(0x407, 0x4B);
	sensor_write_register(0x409, 0xE9);
	sensor_write_register(0x413, 0x1B);
	sensor_write_register(0x415, 0xED);
	sensor_write_register(0x416, 0x01);
	sensor_write_register(0x418, 0x09);
	sensor_write_register(0x41A, 0x19);
	sensor_write_register(0x41B, 0xA1);
	sensor_write_register(0x41C, 0x11);
	sensor_write_register(0x427, 0x00);
	sensor_write_register(0x428, 0x05);
	sensor_write_register(0x429, 0xEC);
	sensor_write_register(0x42A, 0x40);
	sensor_write_register(0x42B, 0x11);
	sensor_write_register(0x42D, 0x22);
	sensor_write_register(0x42E, 0x00);
	sensor_write_register(0x42F, 0x05);
	sensor_write_register(0x431, 0xEC);
	sensor_write_register(0x432, 0x40);
	sensor_write_register(0x433, 0x11);
	sensor_write_register(0x435, 0x23);
	sensor_write_register(0x436, 0xB0);
	sensor_write_register(0x437, 0x04);
	sensor_write_register(0x439, 0x24);
	sensor_write_register(0x43A, 0x30);
	sensor_write_register(0x43B, 0x04);
	sensor_write_register(0x43C, 0xED);
	sensor_write_register(0x43D, 0xC0);
	sensor_write_register(0x43E, 0x10);
	sensor_write_register(0x440, 0x44);
	sensor_write_register(0x441, 0xA0);
	sensor_write_register(0x442, 0x04);
	sensor_write_register(0x443, 0x0D);
	sensor_write_register(0x444, 0x31);
	sensor_write_register(0x445, 0x11);
	sensor_write_register(0x447, 0xEC);
	sensor_write_register(0x448, 0xD0);
	sensor_write_register(0x449, 0x1D);
	sensor_write_register(0x455, 0x03);
	sensor_write_register(0x456, 0x54);
	sensor_write_register(0x457, 0x60);
	sensor_write_register(0x458, 0x1F);
	sensor_write_register(0x45A, 0xA9);
	sensor_write_register(0x45B, 0x50);
	sensor_write_register(0x45C, 0x0A);
	sensor_write_register(0x45D, 0x25);
	sensor_write_register(0x45E, 0x11);
	sensor_write_register(0x45F, 0x12);
	sensor_write_register(0x461, 0x9B);
	sensor_write_register(0x466, 0xD0);
	sensor_write_register(0x467, 0x08);
	sensor_write_register(0x46A, 0x20);
	sensor_write_register(0x46B, 0x0A);
	sensor_write_register(0x46E, 0x20);
	sensor_write_register(0x46F, 0x0A);
	sensor_write_register(0x472, 0x20);
	sensor_write_register(0x473, 0x0A);
	sensor_write_register(0x475, 0xEC);
	sensor_write_register(0x47D, 0xA5);
	sensor_write_register(0x47E, 0x20);
	sensor_write_register(0x47F, 0x0A);
	sensor_write_register(0x481, 0xEF);
	sensor_write_register(0x482, 0xC0);
	sensor_write_register(0x483, 0x0E);
	sensor_write_register(0x485, 0xF6);
	sensor_write_register(0x48A, 0x60);
	sensor_write_register(0x48B, 0x1F);
	sensor_write_register(0x48D, 0xBB);
	sensor_write_register(0x48E, 0x90);
	sensor_write_register(0x48F, 0x0D);
	sensor_write_register(0x490, 0x39);
	sensor_write_register(0x491, 0xC1);
	sensor_write_register(0x492, 0x1D);
	sensor_write_register(0x494, 0xC9);
	sensor_write_register(0x495, 0x70);
	sensor_write_register(0x496, 0x0E);
	sensor_write_register(0x497, 0x47);
	sensor_write_register(0x498, 0xA1);
	sensor_write_register(0x499, 0x1E);
	sensor_write_register(0x49B, 0xC5);
	sensor_write_register(0x49C, 0xB0);
	sensor_write_register(0x49D, 0x0E);
	sensor_write_register(0x49E, 0x43);
	sensor_write_register(0x49F, 0xE1);
	sensor_write_register(0x4A0, 0x1E);
	sensor_write_register(0x4A2, 0xBB);
	sensor_write_register(0x4A3, 0x10);
	sensor_write_register(0x4A4, 0x0C);
	sensor_write_register(0x4A6, 0xB3);
	sensor_write_register(0x4A7, 0x30);
	sensor_write_register(0x4A8, 0x0A);
	sensor_write_register(0x4A9, 0x29);
	sensor_write_register(0x4AA, 0x91);
	sensor_write_register(0x4AB, 0x11);
	sensor_write_register(0x4AD, 0xB4);
	sensor_write_register(0x4AE, 0x40);
	sensor_write_register(0x4AF, 0x0A);
	sensor_write_register(0x4B0, 0x2A);
	sensor_write_register(0x4B1, 0xA1);
	sensor_write_register(0x4B2, 0x11);
	sensor_write_register(0x4B4, 0xAB);
	sensor_write_register(0x4B5, 0xB0);
	sensor_write_register(0x4B6, 0x0B);
	sensor_write_register(0x4B7, 0x21);
	sensor_write_register(0x4B8, 0x11);
	sensor_write_register(0x4B9, 0x13);
	sensor_write_register(0x4BB, 0xAC);
	sensor_write_register(0x4BC, 0xC0);
	sensor_write_register(0x4BD, 0x0B);
	sensor_write_register(0x4BE, 0x22);
	sensor_write_register(0x4BF, 0x21);
	sensor_write_register(0x4C0, 0x13);
	sensor_write_register(0x4C2, 0xAD);
	sensor_write_register(0x4C3, 0x10);
	sensor_write_register(0x4C4, 0x0B);
	sensor_write_register(0x4C5, 0x23);
	sensor_write_register(0x4C6, 0x71);
	sensor_write_register(0x4C7, 0x12);
	sensor_write_register(0x4C9, 0xB5);
	sensor_write_register(0x4CA, 0x90);
	sensor_write_register(0x4CB, 0x0B);
	sensor_write_register(0x4CC, 0x2B);
	sensor_write_register(0x4CD, 0xF1);
	sensor_write_register(0x4CE, 0x12);
	sensor_write_register(0x4D0, 0xBB);
	sensor_write_register(0x4D1, 0x10);
	sensor_write_register(0x4D2, 0x0C);
	sensor_write_register(0x4D4, 0xE7);
	sensor_write_register(0x4D5, 0x90);
	sensor_write_register(0x4D6, 0x0E);
	sensor_write_register(0x4D8, 0x45);
	sensor_write_register(0x4D9, 0x11);
	sensor_write_register(0x4DA, 0x1F);
	sensor_write_register(0x4EB, 0xA4);
	sensor_write_register(0x4EC, 0x60);
	sensor_write_register(0x4ED, 0x1F);

    /*linear & WDR mode is different*/
    sensor_write_register(0x461, 0x9B);
    sensor_write_register(0x466, 0xD0);
    sensor_write_register(0x467, 0x08);

	usleep(200000);
	sensor_write_register(0x200, 0x00); //release standy
	usleep(200000);
	sensor_write_register(0x202, 0x00); //Master mose start
	usleep(200000);
	sensor_write_register(0x249, 0x0A); //XVS & XHS output
	usleep(200000);

	printf("-------Sony IMX138 Sensor Initial OK!-------\n");
}
Exemplo n.º 27
0
void sensor_init()
{
#ifdef HI_FPGA
	int framerate = 23;
#else
	int framerate = 30;
#endif	

	// PCA_9543 Init
	general_i2c_write(pca9543_i2c_addr, 0x1, 0x1);
	usleep(1000);
	
	sensor_write_register(0x0D,1);//RESET_REG
	usleep(1000);
	sensor_write_register(0x0D,0);//RESET_REG
	usleep(600000);
	//demo setup
	sensor_write_register(0x08, 0x0000);	//(7) SHUTTER_WIDTH_HI
    sensor_write_register(0x09, 0x00E6);	//(8) INTEG_TIME_REG
	sensor_write_register(0x0C, 0x0613);	//(7) SHUTTER_DELAY_REG
	sensor_write_register(0x2B, 0x0008);	//(3) GREEN1_GAIN_REG
	sensor_write_register(0x2C, 0x0008);	//(3) BLUE_GAIN_REG
	sensor_write_register(0x2D, 0x0008);	//(3) RED_GAIN_REG
	sensor_write_register(0x2E, 0x0008);	//(3) GREEN2_GAIN_REG
	// set 72 meg
	sensor_write_register(0x05,0x0600);// HORZ_BLANK_REG (HB)=1536
	sensor_write_register(0x10,0x0051);// PLL_CONTROL; POWER UP PLL

	switch ( framerate )
	{
	    case 4 :
			// 14MHz PixClk	1080p@5fps	== 4.6Hz
			sensor_write_register(0x11, 0x1801);	// PLL_CONFIG_1: m=24, n=1
			sensor_write_register(0x12, 0x0013);	// PLL_CONFIG_2: p1=16, p2=0  -> our=24Mhz*m/(n+1)/(p1+1) = 24*24/2/20=14
	        break;
	    case 5 :
			// 16MHz PixClk	1080p@6fps	== 5.2Hz
			sensor_write_register(0x11, 0x1801);	// PLL_CONFIG_1: m=24, n=1
			sensor_write_register(0x12, 0x0011);	// PLL_CONFIG_2: p1=16, p2=0  -> our=24Mhz*m/(n+1)/(p1+1) = 24*24/2/18=16
	        break;
	    case 12 :
			// 36MHz PixClk	1080p@12fps
			sensor_write_register(0x11, 0x1801);	// PLL_CONFIG_1: m=24, n=1
			sensor_write_register(0x12, 0x0007);	// PLL_CONFIG_2: p1=7, p2=0  -> our=24Mhz*m/(n+1)/(p1+1) = 24*24/2/8=36
	        break;
	    case 15 :
			// 48MHz PixClk	1080p@15fps
			sensor_write_register(0x11, 0x1801);	// PLL_CONFIG_1: m=24, n=1
			sensor_write_register(0x12, 0x0005);	// PLL_CONFIG_2: p1=3, p2=0  -> our=24Mhz*m/(n+1)/(p1+1) = 24*24/2/6=48
	        break;
	    case 23 :
			// 72MHz PixClk	1080p@23fps
			sensor_write_register(0x11, 0x1801);	// PLL_CONFIG_1: m=24, n=1
			sensor_write_register(0x12, 0x0003);	// PLL_CONFIG_2: p1=3, p2=0  -> our=24Mhz*m/(n+1)/(p1+1) = 24*24/2/4=72
	        break;
	    case 30 :
			// 96MHz PixClk	1080p@31fps
			sensor_write_register(0x11, 0x1001);	// PLL_CONFIG_1: m=16, n=1
			sensor_write_register(0x12, 0x0001);	// PLL_CONFIG_2: p1=1, p2=0  -> our=24Mhz*m/(n+1)/(p1+1) = 24*16/2/2=96
	        break;
	    default:
			// 72MHz PixClk	1080p@23fps
			sensor_write_register(0x11, 0x1801);	// PLL_CONFIG_1: m=24, n=1
			sensor_write_register(0x12, 0x0003);	// PLL_CONFIG_2: p1=3, p2=0  -> our=24Mhz*m/(n+1)/(p1+1) = 24*24/2/4=72
	}

	usleep(1000);			// Wait 1ms for VCO to lock
	sensor_write_register(0x10, 0x0053); 	// PLL_CONTROL; USE PLL
	usleep(200*1000);
	sensor_write_register(0x05, 0x01C2);	//(1) HORZ_BLANK_REG
	sensor_write_register(0x07, 0x1F8E - 4);	//Enable Parallel Fifo Data
	usleep(200*1000);
	// set geometry
#if 0
	sensor_write_register(0x01, 0x0020);		// ROW_WINDOW_START_REG
	sensor_write_register(0x02, 0x0018);		// COL_WINDOW_START_REG
#else
	// remove dark rows
	sensor_write_register(0x01, 0x0036);		// ROW_WINDOW_START_REG
	sensor_write_register(0x02, 0x0010);		// COL_WINDOW_START_REG
#endif
	sensor_write_register(0x03, 0x05FF);	 	// ROW_WINDOW_SIZE_REG=1536
	sensor_write_register(0x04, 0x07FF);	 	// COL_WINDOW_SIZE_REG=2048

	sensor_write_register(0x22, 0x0000);	 	// ROW_MODE, ROW_SKIP=0. ROW_BIN=0
	sensor_write_register(0x23, 0x0000);	 	// COL_MODE, COL_SKIP=0, COL_BIN=0
	sensor_write_register(0x08, 0x0000);		//(1) SHUTTER_WIDTH_HI
	sensor_write_register(0x09, 0x0296);		//(1) INTEG_TIME_REG
	sensor_write_register(0x0C, 0x0000);		//(1) SHUTTER_DELAY_REG


	sensor_write_register(0x1e, 0x4406);		// Continuous LV mode
//	sensor_write_register(0x1e, 0x4806);		// XOR LV mode
//	sensor_write_register(0x1e, 0x4006);		// Default LV mode	

	sensor_write_register(0x06, 0x09);			// Vertical blanking
	sensor_write_register(0x09, 0x0469);		//(1) INTEG_TIME_REG		

	printf("Aptina MT9P031 sensor 3M fr(%d) init success!\n", framerate);
}
Exemplo n.º 28
0
void sensor_init()
{
//[720p30]
#if 0	
    sensor_write_register(0x301A, 0x0001);  // RESET_REGISTER
    sensor_write_register(0x301A, 0x10D8);  // RESET_REGISTER
    
    delay_ms(200);  //DELAY= 200
    
    sensor_write_register(0x3088, 0x8000);  // SEQ_CTRL_PORT
    sensor_write_register(0x3086, 0x0225);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x5050);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2D26);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0828);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0D17);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0926);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0028);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0526);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0xA728);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0725);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x8080);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2917);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0525);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0040);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2702);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1616);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2706);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1736);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x26A6);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1703);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x26A4);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x171F);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2805);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2620);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2804);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2520);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2027);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0017);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1E25);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0020);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2117);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1028);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x051B);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1703);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2706);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1703);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1741);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2660);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x17AE);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2500);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x9027);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0026);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1828);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x002E);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2A28);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x081E);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0831);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1440);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x4014);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2020);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1410);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1034);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1400);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1014);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0020);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1400);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x4013);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1802);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1470);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x7004);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1470);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x7003);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1470);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x7017);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2002);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1400);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2002);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1400);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x5004);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1400);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2004);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x1400);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x5022);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0314);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0020);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0314);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x0050);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2C2C);  // SEQ_DATA_PORT
    sensor_write_register(0x3086, 0x2C2C);  // SEQ_DATA_PORT
    sensor_write_register(0x309E, 0x0000);  // ERS_PROG_START_ADDR
    
    delay_ms(200);  //DELAY= 200
    
    sensor_write_register(0x30E4, 0x6372);  // ADC_BITS_6_7
    sensor_write_register(0x30E2, 0x7253);  // ADC_BITS_4_5
    sensor_write_register(0x30E0, 0x5470);  // ADC_BITS_2_3
    sensor_write_register(0x30E6, 0xC4CC);  // ADC_CONFIG1
    sensor_write_register(0x30E8, 0x8050);  // ADC_CONFIG2
    sensor_write_register(0x3082, 0x0029);  // OPERATION_MODE_CTRL
    sensor_write_register(0x30B0, 0x1300);  // DIGITAL_TEST
    sensor_write_register(0x30D4, 0xE007);  // COLUMN_CORRECTION
    sensor_write_register(0x301A, 0x10DC);  // RESET_REGISTER
    sensor_write_register(0x301A, 0x10D8);  // RESET_REGISTER
    sensor_write_register(0x3044, 0x0400);  // DARK_CONTROL
    sensor_write_register(0x3EDA, 0x0F03);  // DAC_LD_14_15
    sensor_write_register(0x3ED8, 0x01EF);  // DAC_LD_12_13
    sensor_write_register(0x3012, 0x02A0);  // COARSE_INTEGRATION_TIME
    sensor_write_register(0x3032, 0x0000);  // DIGITAL_BINNING
    sensor_write_register(0x3002, 0x003e);  // Y_ADDR_START
    sensor_write_register(0x3004, 0x0004);  // X_ADDR_START
    sensor_write_register(0x3006, 0x030d);  // Y_ADDR_END
    sensor_write_register(0x3008, 0x0503);  // X_ADDR_END
    sensor_write_register(0x300A, 0x02EE);  // FRAME_LENGTH_LINES
    sensor_write_register(0x300C, 0x0CE4);  // LINE_LENGTH_PCK
    sensor_write_register(0x301A, 0x10D8);  // RESET_REGISTER
    sensor_write_register(0x31D0, 0x0001);  // HDR_COMP

    //Load = PLL Enabled 27Mhz to 74.25Mhz
    sensor_write_register(0x302C, 0x0002);  // VT_SYS_CLK_DIV
    sensor_write_register(0x302A, 0x0004);  // VT_PIX_CLK_DIV
    sensor_write_register(0x302E, 0x0002);  // PRE_PLL_CLK_DIV
    sensor_write_register(0x3030, 0x002C);  // PLL_MULTIPLIER
    sensor_write_register(0x30B0, 0x0000);  // DIGITAL_TEST 
    delay_ms(100);  //DELAY= 100
#endif
    sensor_write_register( 0x301A, 0x0001 );    // RESET_REGISTER
    delay_ms(200); //ms
    sensor_write_register( 0x301A, 0x10D8 );    // RESET_REGISTER
    delay_ms(200); //ms
    //Linear Mode Setup
    //AR0130 Rev1 Linear sequencer load  8-2-2011
    sensor_write_register( 0x3088, 0x8000 );// SEQ_CTRL_PORT
    sensor_write_register( 0x3086, 0x0225 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x5050 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2D26 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0828 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0D17 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0926 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0028 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0526 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0xA728 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0725 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x8080 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2917 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0525 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0040 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2702 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1616 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2706 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1736 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x26A6 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1703 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x26A4 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x171F );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2805 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2620 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2804 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2520 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2027 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0017 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1E25 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0020 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2117 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1028 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x051B );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1703 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2706 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1703 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1747 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2660 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x17AE );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2500 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x9027 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0026 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1828 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x002E );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2A28 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x081E );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0831 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1440 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x4014 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2020 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1410 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1034 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1400 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1014 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0020 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1400 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x4013 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1802 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1470 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x7004 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1470 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x7003 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1470 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x7017 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2002 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1400 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2002 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1400 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x5004 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1400 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2004 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x1400 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x5022 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0314 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0020 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0314 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x0050 );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2C2C );// SEQ_DATA_PORT
    sensor_write_register( 0x3086, 0x2C2C );// SEQ_DATA_PORT
    sensor_write_register( 0x309E, 0x0000 );// DCDS_PROG_START_ADDR
    sensor_write_register( 0x30E4, 0x6372 );// ADC_BITS_6_7
    sensor_write_register( 0x30E2, 0x7253 );// ADC_BITS_4_5
    sensor_write_register( 0x30E0, 0x5470 );// ADC_BITS_2_3
    sensor_write_register( 0x30E6, 0xC4CC );// ADC_CONFIG1
    sensor_write_register( 0x30E8, 0x8050 );// ADC_CONFIG2
    delay_ms(200); //ms
    sensor_write_register( 0x3082, 0x0029 );    // OPERATION_MODE_CTRL
    //AR0130 Rev1 Optimized settings
    sensor_write_register( 0x301E, 0x00C8); // DATA_PEDESTAL
    sensor_write_register( 0x3EDA, 0x0F03); // DAC_LD_14_15
    sensor_write_register( 0x3EDE, 0xC005); // DAC_LD_18_19
    sensor_write_register( 0x3ED8, 0x09EF); // DAC_LD_12_13
    sensor_write_register( 0x3EE2, 0xA46B); // DAC_LD_22_23
    sensor_write_register( 0x3EE0, 0x047D); // DAC_LD_20_21
    sensor_write_register( 0x3EDC, 0x0070); // DAC_LD_16_17
    sensor_write_register( 0x3044, 0x0404); // DARK_CONTROL
    sensor_write_register( 0x3EE6, 0x8303); // DAC_LD_26_27
    sensor_write_register( 0x3EE4, 0xD208); // DAC_LD_24_25
    sensor_write_register( 0x3ED6, 0x00BD); // DAC_LD_10_11
    sensor_write_register( 0x30B0, 0x1300); // DIGITAL_TEST
    sensor_write_register( 0x30D4, 0xE007); // COLUMN_CORRECTION
    sensor_write_register( 0x301A, 0x10DC); // RESET_REGISTER
    delay_ms(500 );//ms                 
    sensor_write_register( 0x301A, 0x10D8); // RESET_REGISTER
    delay_ms(500); //ms                   
    sensor_write_register( 0x3044, 0x0400); // DARK_CONTROL
                                    
    sensor_write_register( 0x3012, 0x02A0); // COARSE_INTEGRATION_TIME

    
    //720p 30fps Setup                   
    sensor_write_register( 0x3032, 0x0000); // DIGITAL_BINNING
    sensor_write_register( 0x3002, 0x0002); // Y_ADDR_START
    sensor_write_register( 0x3004, 0x0000); // X_ADDR_START
    sensor_write_register( 0x3006, 0x02D1);//Row End (A) = 721
    sensor_write_register( 0x3008, 0x04FF);//Column End (A) = 1279
    sensor_write_register( 0x300A, 0x02EA);//Frame Lines (A) = 746
    sensor_write_register( 0x300C, 0x08ba);
    sensor_write_register( 0x3012, 0x0133);//Coarse_IT_Time (A) = 307
    sensor_write_register( 0x306e, 0x9211);//Coarse_IT_Time (A) = 307


    //Enable Parallel Mode
    sensor_write_register( 0x301A, 0x10D8); // RESET_REGISTER
    sensor_write_register( 0x31D0, 0x0001); // HDR_COMP
    
    //PLL Enabled 27Mhz to 50Mhz
    sensor_write_register( 0x302A, 0x0009 );//VT_PIX_CLK_DIV = 9
    sensor_write_register( 0x302C, 0x0001 );//VT_SYS_CLK_DIV = 1
    sensor_write_register( 0x302E, 0x0003 );//PRE_PLL_CLK_DIV = 3
    sensor_write_register( 0x3030, 0x0032 );//PLL_MULTIPLIER = 50
    sensor_write_register( 0x30B0, 0x1300 );    // DIGITAL_TEST
    delay_ms(100); //ms
    sensor_write_register( 0x301A, 0x10DC );    // RESET_REGISTER
    sensor_write_register( 0x301A, 0x10DC );    // RESET_REGISTER
                                          
    //exposure                            
    sensor_write_register( 0x3012, 0x0671 );    // COARSE_INTEGRATION_TIME
    sensor_write_register( 0x30B0, 0x1330 );    // DIGITAL_TEST
    sensor_write_register( 0x3056, 0x003B );    // GREEN1_GAIN
    sensor_write_register( 0x305C, 0x003B );    // GREEN2_GAIN
    sensor_write_register( 0x305A, 0x003B );    // RED_GAIN
    sensor_write_register( 0x3058, 0x003B );    // BLUE_GAIN
    //High Conversion gain                
    sensor_write_register( 0x3100, 0x0004 );    // AE_CTRL_REG


    //LOAD= Disable Embedded Data and Stats
    sensor_write_register(0x3064, 0x1802);  // SMIA_TEST, EMBEDDED_STATS_EN, 0x0000
    sensor_write_register(0x3064, 0x1802);  // SMIA_TEST, EMBEDDED_DATA, 0x0000 

    sensor_write_register(0x30BA, 0x0008);       //20120502

    sensor_write_register(0x3EE4, 0xD308);  //the default value former is 0xd208

    sensor_write_register(0x301A, 0x10DC);  // RESET_REGISTER

    delay_ms(200);  //DELAY= 200


    printf("Aptina AR0130 sensor 720P30fps init success!\n");
    
}
Exemplo n.º 29
0
void sensor_init()
{
	// sequence according to "Flow  Power-on to Operation Start(Sensor Master Mode)

	// chip_id = 0x2
	sensor_write_register(0x200, 0x55);
	sensor_write_register(0x201, 0x70);
	sensor_write_register(0x203, 0x08);
	sensor_write_register(0x204, 0x0D);
	sensor_write_register(0x207, 0x98);
	sensor_write_register(0x209, 0x65);
	sensor_write_register(0x20A, 0x04);
	sensor_write_register(0x21F, 0xF0);
	sensor_write_register(0x225, 0x47);
	sensor_write_register(0x25E, 0xFF);
	sensor_write_register(0x25F, 0x02);
	sensor_write_register(0x273, 0xB1);
	sensor_write_register(0x274, 0x01);
	sensor_write_register(0x276, 0x60);
	sensor_write_register(0x29D, 0x00);
	sensor_write_register(0x2D4, 0x00);
	sensor_write_register(0x2D6, 0x40);
	sensor_write_register(0x2D8, 0x66);
	sensor_write_register(0x2D9, 0x0E);
	sensor_write_register(0x2DB, 0x06);
	sensor_write_register(0x2DC, 0x06);
	sensor_write_register(0x2DD, 0x0C);
	sensor_write_register(0x2E0, 0x7C);

	// chip_id = 0x3
	sensor_write_register(0x302, 0x3F);
	sensor_write_register(0x304, 0xF0);
	sensor_write_register(0x305, 0x00);
	sensor_write_register(0x306, 0xF0);
	sensor_write_register(0x307, 0xA0);
	sensor_write_register(0x308, 0x10);
	sensor_write_register(0x309, 0x10);
	sensor_write_register(0x30A, 0x24);
	sensor_write_register(0x30B, 0x42);
	sensor_write_register(0x30C, 0xFA);
	sensor_write_register(0x30D, 0x43);
	sensor_write_register(0x30E, 0x43);
	sensor_write_register(0x30F, 0x46);
	sensor_write_register(0x310, 0x04);
	sensor_write_register(0x311, 0x41);
	sensor_write_register(0x312, 0x35);
	sensor_write_register(0x313, 0x41);
	sensor_write_register(0x314, 0x35);
	sensor_write_register(0x315, 0x51);
	sensor_write_register(0x316, 0x49);
	sensor_write_register(0x317, 0x41);
	sensor_write_register(0x318, 0x35);
	sensor_write_register(0x319, 0x00);
	sensor_write_register(0x31B, 0x00);
	sensor_write_register(0x31F, 0x09);
	sensor_write_register(0x320, 0xC1);
	sensor_write_register(0x321, 0x10);
	sensor_write_register(0x323, 0x60);
	sensor_write_register(0x324, 0x44);
	sensor_write_register(0x325, 0xFA);
	sensor_write_register(0x326, 0x43);
	sensor_write_register(0x327, 0x43);
	sensor_write_register(0x329, 0x40);
	sensor_write_register(0x32A, 0x43);
	sensor_write_register(0x32B, 0xFA);
	sensor_write_register(0x32C, 0x43);
	sensor_write_register(0x32D, 0x43);
	sensor_write_register(0x32E, 0x4A);
	sensor_write_register(0x32F, 0xB4);
	sensor_write_register(0x330, 0x3F);
	sensor_write_register(0x332, 0xD0);
	sensor_write_register(0x335, 0x10);
	sensor_write_register(0x337, 0xFA);
	sensor_write_register(0x338, 0x13);
	sensor_write_register(0x33A, 0xFA);
	sensor_write_register(0x33B, 0x13);
	sensor_write_register(0x33E, 0xC0);
	sensor_write_register(0x33F, 0x02);
	sensor_write_register(0x343, 0xEE);
	sensor_write_register(0x344, 0xF0);
	sensor_write_register(0x345, 0x0E);
	sensor_write_register(0x346, 0x21);
	sensor_write_register(0x34B, 0x28);
	sensor_write_register(0x34D, 0x31);
	sensor_write_register(0x34F, 0x31);
	sensor_write_register(0x351, 0x16);
	sensor_write_register(0x352, 0x01);
	sensor_write_register(0x353, 0x16);
	sensor_write_register(0x354, 0x01);
	sensor_write_register(0x357, 0x36);
	sensor_write_register(0x359, 0x0F);
	sensor_write_register(0x35B, 0xFA);
	sensor_write_register(0x35C, 0x03);
	sensor_write_register(0x35D, 0x0E);
	sensor_write_register(0x35F, 0xF1);
	sensor_write_register(0x363, 0xF9);
	sensor_write_register(0x364, 0x03);
	sensor_write_register(0x369, 0x34);
	sensor_write_register(0x36B, 0x2D);
	sensor_write_register(0x36D, 0xFB);
	sensor_write_register(0x36F, 0xF6);
	sensor_write_register(0x373, 0x2D);
	sensor_write_register(0x379, 0x2F);
	sensor_write_register(0x37B, 0x2D);
	sensor_write_register(0x37D, 0xF8);
	sensor_write_register(0x37F, 0xF6);
	sensor_write_register(0x383, 0xF6);
	sensor_write_register(0x398, 0xF7);
	sensor_write_register(0x39A, 0x0B);
	sensor_write_register(0x39B, 0x01);
	sensor_write_register(0x39C, 0x06);
	sensor_write_register(0x39E, 0x0E);
	sensor_write_register(0x3AC, 0x16);
	sensor_write_register(0x3AE, 0x07);
	sensor_write_register(0x3B0, 0x16);
	sensor_write_register(0x3B2, 0x07);
	sensor_write_register(0x3B4, 0x0E);
	sensor_write_register(0x3B6, 0x0B);
	sensor_write_register(0x3B7, 0x01);
	sensor_write_register(0x3B8, 0x0B);
	sensor_write_register(0x3B9, 0x01);
	sensor_write_register(0x3BA, 0x0E);
	sensor_write_register(0x3BC, 0x0E);
	sensor_write_register(0x3BE, 0x0B);
	sensor_write_register(0x3BF, 0x01);
	sensor_write_register(0x3C0, 0x0F);
	sensor_write_register(0x3C1, 0x01);
	sensor_write_register(0x3C2, 0x13);
	sensor_write_register(0x3C3, 0x01);
	sensor_write_register(0x3C4, 0x12);
	sensor_write_register(0x3C6, 0x16);
	sensor_write_register(0x3C8, 0xF7);
	sensor_write_register(0x3C9, 0x30);
	sensor_write_register(0x3CA, 0x11);
	sensor_write_register(0x3CB, 0x06);
	sensor_write_register(0x3CC, 0x60);
	sensor_write_register(0x3CE, 0x36);
	sensor_write_register(0x3D0, 0xEF);
	sensor_write_register(0x3D1, 0x60);
	sensor_write_register(0x3D2, 0x13);
	sensor_write_register(0x3D3, 0xFB);
	sensor_write_register(0x3D4, 0x03);
	sensor_write_register(0x3D5, 0x24);
	sensor_write_register(0x3D6, 0x04);
	sensor_write_register(0x3D7, 0x28);
	sensor_write_register(0x3D8, 0x04);
	sensor_write_register(0x3DD, 0x3F);
	sensor_write_register(0x3DF, 0xEE);
	sensor_write_register(0x3E1, 0x3F);
	sensor_write_register(0x3E2, 0x01);
	sensor_write_register(0x3E3, 0xFA);
	sensor_write_register(0x3E4, 0x03);
	
	// standby cancel
	sensor_write_register(0x200, 0x54);

	// waiting for internal regular stabilization
	usleep(200000);
	
	// master mode start
	sensor_write_register(0x22D, 0x08);

	// XVS,XHS output start
	sensor_write_register(0x229, 0xC0);

	// waiting for image stabilization
	usleep(200000);

	printf("-------Sony IMX036 Sensor Initial OK!-------\n");
}
Exemplo n.º 30
0
/*
 * This function applies the new integration time to the ISP registers.
 */
static __inline void cmos_inttime_update(cmos_inttime_ptr_t p_inttime) 
{

    HI_U16 exp_time,current;
    ISP_I2C_DATA_S stI2cData;
    static HI_U32 _last_exposure_time = 0xFFFFFFFF;
    
    if(_last_exposure_time == p_inttime->exposure_ashort)
    {
        return;
    }else
    {
        _last_exposure_time = p_inttime->exposure_ashort;
    }
    
    switch(gu8SensorMode)
    {
        default:
        case 0: //linear mode
            exp_time = p_inttime->full_lines - p_inttime->exposure_ashort;  
            current = sensor_read_register(EXPOSURE_ADDR+2);
#if CMOS_IMX236_ISP_WRITE_SENSOR_ENABLE
            
            stI2cData.bDelayCfg = HI_FALSE;
            stI2cData.u8DevAddr = sensor_i2c_addr;
            stI2cData.u32AddrByteNum = sensor_addr_byte;
            stI2cData.u32DataByteNum = sensor_data_byte;
            
            stI2cData.u32RegAddr = 0x3020;
            stI2cData.u32Data = (exp_time & 0xFF);
            HI_MPI_ISP_I2cWrite(&stI2cData);  

            stI2cData.u32RegAddr = 0x3020+1;
            stI2cData.u32Data = ((exp_time & 0xFF00) >> 8);
            HI_MPI_ISP_I2cWrite(&stI2cData);

            
            stI2cData.u32RegAddr = 0x3020+2;
            stI2cData.u32Data = ((((exp_time & 0x10000) >> 16)+(current&0xFE)) );
            HI_MPI_ISP_I2cWrite(&stI2cData);
            
#else   
            sensor_write_register(EXPOSURE_ADDR, exp_time & 0xFF);
            sensor_write_register(EXPOSURE_ADDR + 1, (exp_time & 0xFF00) >> 8);
            current = sensor_read_register(EXPOSURE_ADDR+2);
            sensor_write_register(EXPOSURE_ADDR+2, (((exp_time & 0x10000) >> 16)+(current&0xFE)) );
#endif

        break;
        
        case 1: //WDR mode
            //short exposure
            if (p_inttime->exposure_ashort < p_inttime->min_lines_target)
            {
                p_inttime->exposure_ashort = p_inttime->min_lines_target;
            }
            if (p_inttime->exposure_ashort > p_inttime->max_lines_target)
            {
                p_inttime->exposure_ashort = p_inttime->max_lines_target;
            }
            
            exp_time = p_inttime->full_lines - p_inttime->exposure_ashort;
            current = sensor_read_register(EXPOSURE_ADDR+2);
#if CMOS_IMX236_ISP_WRITE_SENSOR_ENABLE

            stI2cData.bDelayCfg = HI_FALSE;
            stI2cData.u8DevAddr = sensor_i2c_addr;
            stI2cData.u32AddrByteNum = sensor_addr_byte;
            stI2cData.u32DataByteNum = sensor_data_byte;

            stI2cData.u32RegAddr = 0x3020;
            stI2cData.u32Data = exp_time & 0xFF;
            HI_MPI_ISP_I2cWrite(&stI2cData);  

            stI2cData.u32RegAddr = 0x3020+1;
            stI2cData.u32Data = ((exp_time & 0xFF00) >> 8);
            HI_MPI_ISP_I2cWrite(&stI2cData);  

            
            stI2cData.u32RegAddr = 0x3020+2;
            stI2cData.u32Data = (((exp_time & 0x10000) >> 16)+(current&0xFE));
            HI_MPI_ISP_I2cWrite(&stI2cData);  

            //long exposure
            exp_time = p_inttime->full_lines - (p_inttime->exposure_ashort << 4);
            stI2cData.u32RegAddr = 0x3023;
            stI2cData.u32Data = (exp_time & 0xFF);
            HI_MPI_ISP_I2cWrite(&stI2cData);

            stI2cData.u32RegAddr = 0x3023+1;
            stI2cData.u32Data = ( (exp_time & 0xFF00) >> 8);
            HI_MPI_ISP_I2cWrite(&stI2cData);

            current = sensor_read_register(LONG_EXPOSURE_ADDR+2);
            stI2cData.u32RegAddr = 0x3023+2;
            stI2cData.u32Data = (((exp_time & 0x10000) >> 16)+(current&0xFE));
            HI_MPI_ISP_I2cWrite(&stI2cData);
#else
            sensor_write_register(EXPOSURE_ADDR, exp_time & 0xFF);
            sensor_write_register(EXPOSURE_ADDR+1, (exp_time & 0xFF00) >> 8);
            current = sensor_read_register(EXPOSURE_ADDR+2);
            sensor_write_register(EXPOSURE_ADDR+2, (((exp_time & 0x10000) >> 16)+(current&0xFE)) );

            //long exposure
            exp_time = p_inttime->full_lines - (p_inttime->exposure_ashort << 4);
            
            sensor_write_register(LONG_EXPOSURE_ADDR, exp_time & 0xFF);
            sensor_write_register(LONG_EXPOSURE_ADDR+1, (exp_time & 0xFF00) >> 8);
            //current = sensor_read_register(LONG_EXPOSURE_ADDR+2);
            sensor_write_register(LONG_EXPOSURE_ADDR+2, (((exp_time & 0x10000) >> 16)+(current&0xFE)) );
#endif
        break;
    }

}