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

📄 cam_module.c

📁 手机摄像头带jpeg压缩芯片PAP1302有关C语言代码,含ISP
💻 C
📖 第 1 页 / 共 5 页
字号:
	    read_data1=pap1302_READ_DATA;
	     	  
	    read_data2=pap1302_READ_DATA;
	    read_data_1th=(read_data2<<8)|read_data1;                  
          pap1302_reg_write(pap1302_INTERRUPT_FLAG_ADDR,0);
  // 2th read       
          pap1302_WRITE_CMD(pap1302_REG_READ_ADDR);//0xF9
	    pap1302_delay(0x2);
	    pap1302_WRITE_CMD(reg_address);//sensor_address
	    pap1302_delay(0x2);
	     
	     while (!pap1302_READY) {};
	    
	    read_data1=pap1302_READ_DATA;
	     	  
	    read_data2=pap1302_READ_DATA;
	    read_data_2th=(read_data2<<8)|read_data1;                  
          pap1302_reg_write(pap1302_INTERRUPT_FLAG_ADDR,0);
     
   // 3th read       
          pap1302_WRITE_CMD(pap1302_REG_READ_ADDR);//0xF9
	    pap1302_delay(0x2);
	    pap1302_WRITE_CMD(reg_address);//sensor_address
	    pap1302_delay(0x2);
	     
	     while (!pap1302_READY) {};
	    
	    read_data1=pap1302_READ_DATA;
	     	  
	    read_data2=pap1302_READ_DATA;
	    read_data_3th=(read_data2<<8)|read_data1;                  
          pap1302_reg_write(pap1302_INTERRUPT_FLAG_ADDR,0);       
      
	pap1302_reg_write(0xEF,0x0000);//select register bank to ASIC	
	pap1302_reg_write(0xE2,read_int);//resotre 0xE2
	 if(read_data_1th==read_data_2th)
        return read_data_1th;
      else if(read_data_1th==read_data_3th)
        return read_data_1th;
      else if(read_data_2th==read_data_3th)
        return read_data_2th;  
         
	//pap1302_reg_write(0x88,read_88H);//resotre 0x88
	return read_data_1th;
}	/* OV7660_reg_read() */
//============================================================================
kal_uint16 pap1302_reg_read(kal_uint8 reg_address)
{
	kal_uint16 read_data;
	kal_uint8 read_data1,read_data2;
    
	pap1302_WRITE_CMD(pap1302_REG_READ_ADDR);
	pap1302_delay(0x2);
	pap1302_WRITE_CMD(reg_address);
	pap1302_delay(0x2);
		read_data1=pap1302_READ_DATA;
		pap1302_delay(0x2);
		read_data2=pap1302_READ_DATA;
		read_data=(read_data2<<8)|read_data1;
	return read_data;
}	/* pap1302_reg_read() */

void pap1302_reg_write_if(kal_uint16 reg_address,kal_uint16 data)
{
	kal_uint16 read_data1,read_data;
    if ((reg_address==0x00ff)&&(data==1))
       ASIC_SELECT=KAL_TRUE; 
    else if ((reg_address==0x00ff)&&(data==0))
       ASIC_SELECT=KAL_FALSE;
   if ((reg_address!=0x00ff))   
   {
	if (ASIC_SELECT==KAL_TRUE)
	 pap1302_reg_write((kal_uint8)reg_address,data);
	else
	 pas302_reg_write((kal_uint8)reg_address,data);
    }
}	/* pap1302_reg_write_if() */

kal_uint16 pap1302_reg_read_if(kal_uint16 reg_address)
{
	 if (reg_address==0x00ff)
	   return(ASIC_SELECT);
	   
	if (ASIC_SELECT==KAL_TRUE)
	  return (pap1302_reg_read((kal_uint8) reg_address));
	else  
	 return (OV7660_reg_read((kal_uint8) reg_address));
	
}

void pap1302_set_buffer_address(kal_uint16 buffer_address)
{
	
	pap1302_WRITE_CMD(pap1302_SET_BUFFER_ADDR);//write address
	pap1302_delay(0x2);
	pap1302_WRITE_CMD(0);
	pap1302_delay(0x2);
	pap1302_WRITE_DATA((kal_uint8) (buffer_address&0xFF));
	pap1302_delay(0x2);
	pap1302_WRITE_DATA((kal_uint8) ((buffer_address&0xFF00)>>8));	
}

//add by boy
void pap1302_set_buffer_read_address(kal_uint16 buffer_read_address)
{
	
	
	pap1302_WRITE_CMD(0xFC);
	pap1302_delay(0x2);
	pap1302_WRITE_CMD(0);
	pap1302_delay(0x2);
	pap1302_WRITE_DATA((kal_uint8) (buffer_read_address&0xFF));
	pap1302_delay(0x2);
	pap1302_WRITE_DATA((kal_uint8) ((buffer_read_address&0xFF00)>>8));	
}

void pap1302_mem_read_write(void)
{
	
	pap1302_WRITE_CMD(pap1302_BUFFER_READ_WRITE_ADDR);
	pap1302_delay(0x2);
	pap1302_WRITE_CMD(0);
	pap1302_delay(0x2);
}

void pap1302_sensor_on_off(kal_bool on)
{
	kal_uint16 read_data1;
    
    
	read_data1=pap1302_reg_read(0xE4);		/* read Sensor control register */

	if (on==KAL_TRUE)
		pap1302_reg_write(0xE4,(read_data1&0xFF7F));	/* turn on CMOS sensor */
	else
		pap1302_reg_write(0xE4,(read_data1|0x80));	/* turn off CMOS sensor */
}	/* pap1302_sensor_on_off() */

void pap1302_isp_on_off(kal_bool on)
{
	kal_uint16 read_data1,read_data2;
    
    
	read_data1=pap1302_reg_read(0xE5);
	read_data2=pap1302_reg_read(0x80);
	if (on==KAL_TRUE)
	{
		pap1302_reg_write(0xE5,(read_data1|0x10));		/* turn on clock of ISP */
		pap1302_reg_write(0x80,(read_data2|0x2000));		/* Enable ISP function */
	}
}

void pap1302_init_sensor(void)
{
	kal_uint8 i;
    
   
    //test on 0407 for OV7660
    pap1302_reg_write(0x95, 0x420F);//OV7660 - Slave_ID    
	pap1302_reg_write(0x97, 0x006f);//-50khz----- *************************************** I2C Speed     ******************* important !!!(7F ~ 5F is OK)
	pap1302_reg_write(0x96, 0x0100);//----------- *************************************** Sclk divider  *******************
    pap1302_reg_write(0x9D, 0x0002);//----------- *************************************** Sclk delay     ******************    
    
	pap1302_sensor_on_off(KAL_TRUE);	
	
	  for (i=0;i<OV7660_Initial_Step;i++)
	    pas302_reg_write(OV7660_Reg[i],OV7660_Dat[i]);	
	
	//sensor_flip_status = 0x00;//for OV7660
	//sensor_flip_status = OV7660_reg_read(0x1E);
	sensor_flip_status = 0x01;
	//sensor_flip_status=pap1302_reg_read(0x21);
}	/* pap1302_init_sensor() */

void pap1302_init_isp(void)
{
    
   	pap1302_isp_on_off(KAL_TRUE);
   
    //initial setting by BOY     
    //Dac1 Setting
    pap1302_reg_write(0x03, 0x0000);//------OV7660
    pap1302_reg_write(0x04, 0x0000);//------OV7660
    pap1302_reg_write(0x05, 0x0000);//------OV7660
    pap1302_reg_write(0x06, 0x0000);//------OV7660
    pap1302_reg_write(0x07, 0x0000);//------OV7660
    pap1302_reg_write(0x08, 0x0000);//------OV7660
    pap1302_reg_write(0x09, 0x0000);//------OV7660
    pap1302_reg_write(0x0a, 0x0000);//------OV7660
    pap1302_reg_write(0x0b, 0x0000);//------OV7660
    pap1302_reg_write(0x0c, 0x0000);//------OV7660


    pap1302_reg_write(0x10, 0x0b0b);//------OV7660
    pap1302_reg_write(0x11, 0x0011);//------OV7660 
 	pap1302_reg_write(0x18, 0x0000);//------OV7660
 	pap1302_reg_write(0x19, 0x0000);//------OV7660
 	pap1302_reg_write(0x1a, 0x0000);//------OV7660 
 	pap1302_reg_write(0x1c, 0x0256);//R_AWB_Window_X //------OV7660
 	pap1302_reg_write(0x1d, 0x01b8);//R_AWB_Window_Y //------OV7660
 	pap1302_reg_write(0x1e, 0x11f4);//ny_min[15:12], lpf_min[9:0] //------OV7660
 	pap1302_reg_write(0x1f, 0x0256);//0x0180);//R_AE_Window_X     //------OV7660
 	pap1302_reg_write(0x20, 0x01b8);//R_AE_Window_Y               //------OV7660
 	pap1302_reg_write(0x21, 0x7840);//DGnB_UB[15:8], DGnR_LB[7:0]            //------OV7660
 	pap1302_reg_write(0x22, 0x7840);//0x7840);//DGnR_UB[15:8], DGnB_LB[7:0]  //------OV7660
 	pap1302_reg_write(0x23, 0x0001);//AWBColorTempEnH[0]                     //------OV7660

    // Color Correctin Matrix B for PAS6302
 	pap1302_reg_write(0x32, 0x0000);//------OV7660
 	pap1302_reg_write(0x39, 0x0001);//------OV7660
 	pap1302_reg_write(0x3a, 0x4000);//------OV7660
 	pap1302_reg_write(0x3b, 0x00F6);//------OV7660
 	pap1302_reg_write(0x3c, 0x74D6);//------OV7660
 	pap1302_reg_write(0x3d, 0x00E6);//------OV7660
 	pap1302_reg_write(0x3e, 0x5A00);//------OV7660
 	pap1302_reg_write(0x3f, 0x0000);//------OV7660
 	
 	//LCD gamma
 	pap1302_reg_write(0x5B,0x0009);
	pap1302_reg_write(0x5C,0x0f1b);
	pap1302_reg_write(0x5D,0x3043);
	pap1302_reg_write(0x5E,0x5493);
	pap1302_reg_write(0x5F,0xcbff);
	pap1302_reg_write(0x60,0x0000);

    pap1302_reg_write(0x6b, 0x0001);//AG_delay_EnH // initial value
    pap1302_reg_write(0x6c, 0x0314);//SumRatio_Manual[9],RegionTest[8],CbCrThd[6:0] //------OV7660
 	pap1302_reg_write(0x6d, 0x2020);//CbThd[14:8],CrThd[6:0]                        //------OV7660
 	pap1302_reg_write(0x6e, 0x0010);//AwbCountThd[5:4],AwbSpeed[1:0]                //------OV7660
 	pap1302_reg_write(0x6f, 0x0d00);       											//------OV7660
 	pap1302_reg_write(0x70, 0x8080);												//------OV7660

    
 	// saturation = 1.5
 	pap1302_reg_write(0x71, 0xac9a);//------OV7660
 	pap1302_reg_write(0x72, 0xb813);//------OV7660
 	pap1302_reg_write(0x73, 0x2507);//------OV7660
 	
 	pap1302_reg_write(0x74, 0x000f);//------OV7660--//AG_stage_UB[7:0]
   
 	
 	//ISP Gamma
 	//Hsin_1 smooth ==> // Gamma = 0.6, Contrast = 12
 	//pap1302_reg_write(0x7a, 0x0000);//------OV7660
 	//pap1302_reg_write(0x7b, 0x0016);//------OV7660
 	//pap1302_reg_write(0x7c, 0x3951);//------OV7660
 	//pap1302_reg_write(0x7d, 0x65a4);//------OV7660
 	//pap1302_reg_write(0x7e, 0xd5ff);//------OV7660
 	//pap1302_reg_write(0x7f, 0x0001);//------OV7660
 	
 	//Hsin_2 constrast big
 	pap1302_reg_write(0x7a, 0x0000);//------OV7660
 	pap1302_reg_write(0x7b, 0x0612);//------OV7660
 	pap1302_reg_write(0x7c, 0x2642);//------OV7660
 	pap1302_reg_write(0x7d, 0x62b2);//------OV7660
 	pap1302_reg_write(0x7e, 0xdeff);//------OV7660
 	pap1302_reg_write(0x7f, 0x0001);//------OV7660
    
    // For GLB Register 	
 	pap1302_reg_write(0xE2, 0x0080); 	
 	pap1302_reg_write(0xE6, 0x0101);
    
    //ISP
    pap1302_reg_write(0x80, 0x0020);//------OV7660
 	pap1302_reg_write(0x81, 0x0681);//------OV7660
 	pap1302_reg_write(0x82, 0x0150);//------OV7660,AE disable,
 	pap1302_reg_write(0x83, 0x3197);//------OV7660
 	pap1302_reg_write(0x84, 0x1004);//------OV7660
 	pap1302_reg_write(0x85, 0x1A05);//------OV7660
 	pap1302_reg_write(0x86, 0x6915);//------OV7660
 	pap1302_reg_write(0x87, 0x0196);//------OV7660  ----  change below
 	pap1302_reg_write(0x88, 0x0101);//------OV7660,AWB enable
 	pap1302_reg_write(0x89, 0xff6E);//------OV7660
 	pap1302_reg_write(0x8A, 0x3000);//------OV7660  ----  change below
 	pap1302_reg_write(0x8B, 0x0113);//------PAS6302
 	pap1302_reg_write(0x8C, 0x000e);//------OV7660------important
 	pap1302_reg_write(0x8D, 0x0008);//------OV7660
 	pap1302_reg_write(0x8E, 0x0006);//------OV7660
 	pap1302_reg_write(0x8F, 0x0030);//------PAS6302
 	pap1302_reg_write(0x90, 0xA007);
 	pap1302_reg_write(0x91, 0x0027);//------OV7660 // I2C_WrEn ----  change below
 	pap1302_reg_write(0x92, 0x7c10);//------OV7660
	//
 	pap1302_reg_write(0x94, 0x0b00);//------PAS6302
 	pap1302_reg_write(0x95, 0x420f);//Slave ID //------OV7660
 	pap1302_reg_write(0x96, 0x0100);//----------- *************************************** Sclk divider  ****************
	pap1302_reg_write(0x97, 0x006f);//----------- *************************************** I2C Speed     *****************
 	pap1302_reg_write(0x98, 0x0120);//Np*2 or Np/2 setting //------OV7660 
 	pap1302_reg_write(0x99, 0x006f);//------OV7660
 	pap1302_reg_write(0x9A, 0x004d);//------OV7660
 	pap1302_reg_write(0x9B, 0x0000);
 	pap1302_reg_write(0x9C, 0x0000);//0x010c);//------OV7660
 	pap1302_reg_write(0x9D, 0x0002);//------OV7660************************************** Sclk delay     ******************
 	
 	//Lens Shading compensation
 	pap1302_reg_write(0x9E, 0x0112);//------OV7660
 	pap1302_reg_write(0x9F, 0x786e);//------OV7660	
 	pap1302_reg_write(0xA0, 0x646e);//------OV7660
 	pap1302_reg_write(0xA1, 0x7864);//------OV7660 
 	pap1302_reg_write(0xA2, 0x5a55);//------OV7660
 	pap1302_reg_write(0xA3, 0x5a64);//------OV7660
 	pap1302_reg_write(0xA4, 0x5a50);//------OV7660
 	pap1302_reg_write(0xA5, 0x4050);//------OV7660
 	pap1302_reg_write(0xA6, 0x5a5a);//------OV7660
 	pap1302_reg_write(0xA7, 0x5040);//------OV7660
 	pap1302_reg_write(0xA8, 0x505a);//------OV7660
 	pap1302_reg_write(0xA9, 0x645a);//------OV7660
 	pap1302_reg_write(0xAA, 0x555a);//------OV7660
 	pap1302_reg_write(0xAB, 0x6478);//------OV7660
 	pap1302_reg_write(0xAC, 0x6e64);//------OV7660
 	pap1302_reg_write(0xAD, 0x6e78);//------OV7660
 	pap1302_reg_write(0xAE, 0x00FF);//------OV7660
 	pap1302_reg_write(0xAF, 0xFFFF);//------OV7660
 	pap1302_reg_write(0xB0, 0xFFFF);//------OV7660	
 	
 	
 	pap1302_reg_write(0xd2, 0x1478);
 	pap1302_reg_write(0xd5, 0x0F80);//Ptr_CapRGB 	
 	
 	pap1302_reg_write(0xEC, 0x0444);//important
     
 	    
	while (!pap1302_READY){};		/* wait for AE/AWB occupy I2C bus */
	pap1302_reg_write((kal_uint8)pap1302_INTERRUPT_FLAG_ADDR,0);
	ae_awb_occupy_i2c=KAL_TRUE;
}	/* pap1302_init_isp() */

/*************************************************************************
* FUNCTION
*	init_pap1302
*
* DESCRIPTION
*	This function execute initial procedure of external camera module pap1302
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void init_pap1302(void)
{
	volatile kal_uint16 i;
	kal_uint16 read_data;


	while (LCD_IS_RUNNING){};

	wb_selection_auto=KAL_FALSE;
	digital_zoom_factor=pap1302_DIGITAL_ZOOM_NORMAL;
	digital_zoom_flag=0;
#if (defined(MT6217))
	SET_LCD_PARALLEL2_WRITE_WAIT_STATE(10);
	SET_LCD_PARALLEL2_READ_LATENCY_TIME(10);
	SET_LCD_PARALLEL2_CE2WR_SETUP_TIME((kal_uint32)2);
   SET_LCD_PARALLEL2_CE2WR_HOLD_TIME(2);
   SET_LCD_PARALLEL2_CE2RD_SETUP_TIME(2);
   *(volatile kal_uint32 *)0x90000020 |= 0x00002000; //set 8 bit device
#else
	lcd_if_timing_ctrl_reg = DRV_Reg32(LCD_PARALLEL_CONFIG_REG);
	SET_LCD_PARALLEL_WRITE_WAIT_STATE(10);
	SET_LCD_PARALLEL_READ_LATENCY_TIME(10);
	SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)2);
   SET_LCD_PARALLEL_CE2WR_HOLD_TIME(2);
   SET_LCD_PARALLEL_CE2RD_SETUP_TIME(2);
#endif

	DRV_Reg(DRVPDN_CON1) &= ~(DRVPDN_CON1_TRC);  /* Power on Tracer */
    GPIO_ModeSetup(20,2);			               /* set GPIO20 as LCD parallel 2 CE */
    GPIO_ModeSetup(pap1302_READY_PIN,0);
    GPIO_ModeSetup(pap1302_RESET_PIN,0);
	GPIO_InitIO(INPUT,pap1302_READY_PIN	);		/* camera ready pin */
	GPIO_InitIO(OUTPUT,pap1302_POWER_PIN);		/* camera power pin */
	GPIO_InitIO(OUTPUT,pap1302_RESET_PIN);		/* camera reest pin */
    ENABLE_pap1302_CLK;
	SET_pap1302_RESET_PIN;
	pap1302_delay(0x40);
	CLEAR_pap1302_RESET_PIN;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -