📄 cam_module.c
字号:
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 + -