📄 tv_image_sensor.c
字号:
#include "Tv_Include.h"
/* Global Valuable */
#ifdef WIN32
kal_bool isp_digital_zoom_flag=FALSE;
#endif /* WIN32 */
static void ATV_InitHostI2C()
{
// Initial host I2C interface
GPIO_ModeSetup(ATV_I2C_SDA, 0);
GPIO_InitIO(1, ATV_I2C_SDA);
GPIO_WriteIO(1, ATV_I2C_SDA);
GPIO_ModeSetup(ATV_I2C_SCL, 0);
GPIO_InitIO(1, ATV_I2C_SCL);
GPIO_WriteIO(1, ATV_I2C_SCL);
}
static void ATV_DeInitHostI2C()
{
// De-Init host I2C interface
GPIO_ModeSetup(ATV_I2C_SDA, 0);
GPIO_InitIO(1, ATV_I2C_SDA);
GPIO_WriteIO(0, ATV_I2C_SDA);
GPIO_ModeSetup(ATV_I2C_SCL, 0);
GPIO_InitIO(1, ATV_I2C_SCL);
GPIO_WriteIO(0, ATV_I2C_SCL);
}
static void ATV_ChipPowerOn()
{
// Turn on 1.2V & 2.8V LDO
GPIO_ModeSetup(ATV_POWER_PIN, 0);
GPIO_InitIO(1, ATV_POWER_PIN);
GPIO_WriteIO(1, ATV_POWER_PIN);
}
static void ATV_ChipPowerOff()
{
// Turn off 1.2V & 2.8V LDO
GPIO_ModeSetup(ATV_POWER_PIN, 0);
GPIO_InitIO(1, ATV_POWER_PIN);
GPIO_WriteIO(0, ATV_POWER_PIN);
}
static void ATV_ChipReset()
{
GPIO_ModeSetup(ATV_RESET_PIN, 0);
GPIO_InitIO(1, ATV_RESET_PIN);
GPIO_WriteIO(0, ATV_RESET_PIN);
TLG_Delay(25);
GPIO_WriteIO(1, ATV_RESET_PIN);
TLG_Delay(25);
}
static void ATV_TestI2C()
{
uint16 reg, write, read;
// Test I2C communication
for (reg = 0x7F, write = 1; reg <= 0x8E; reg++, write <<= 1)
TLG_WriteReg(tlg_i2c_addr, reg, write);
for (reg = 0x7F, write = 1; reg <= 0x8E; reg++, write <<= 1)
{
TLG_ReadReg(tlg_i2c_addr, reg, &read);
#ifdef WIN32
//printf("[ATV] I2C test: Reg=%04x Wr=%04x Rd=%04x\n", reg, write, read);
#else
#ifdef ADS_MTK
kal_prompt_trace(MOD_MMI, "[ATV] I2C test: Reg=%04x Wr=%04x Rd=%04x\n", reg, write, read);
#else /* default */
;
#endif /* ADS_MTK */
#endif /* WIN32 */
}
}
/*************************************************************************
* FUNCTION
* init_ATV
*
* DESCRIPTION
* This function initialize the ATV and ISP control register.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_int8 init_ATV(void)
{
uint16 y, u, v;
// Set polarities of PCLK, HSYNC and VSYNC
SET_CMOS_CLOCK_POLARITY_LOW;
SET_VSYNC_POLARITY_HIGH;
SET_HSYNC_POLARITY_LOW;
ENABLE_CAMERA_INDATA_FORMAT;
SET_CAMERA_INPUT_TYPE(INPUT_YUV422);
SET_CAMERA_INPUT_ORDER(INPUT_ORDER_YCbY1Cr);
ENABLE_CAMERA_TG_CLK_48M;
// Set ISP driving current
set_isp_driving_current(ISP_DRIVING_2MA);
ATV_InitHostI2C();
ATV_ChipPowerOn();
TLG_Delay(25);
ATV_ChipReset();
ATV_TestI2C();
TLGAPP_Restart();
TLGAPP_Init(tlg_i2c_addr);
TLGAPP_InitTvChannelMap();
TLGAPP_SetChannel(p_tlg_cur_map[gTvStorage.mCurChnIdx] CHN_S);
// Preset backlight according to gTvOptions.mBrightness
// ...
// Preset contrast and saturation
y = gTvOptions.mContrast;
u = min(235 * gTvOptions.mSaturation / SATURATION_DEFAULT, 255);
v = min(158 * gTvOptions.mSaturation / SATURATION_DEFAULT, 255);
TLG_SetYUVScale(tlg_i2c_addr, y, u, v);
// Preset definition
TLG_SetMobileVidEnhancement(tlg_i2c_addr, TLG_MVE_MANUAL, gTvOptions.mDefinition);
// Preset audio volume according to gTvOptions.mVolume
// ...
// Turn on FM audio amplifier
#ifdef ADS_MTK
AFE_SetOutputDevice(L1SP_FM_RADIO, L1SP_LOUD_SPEAKER);
AFE_TurnOnSpeaker(L1SP_FM_RADIO);
AFE_SwitchExtAmplifier(TRUE);
AFE_SetOutputVolume( L1SP_FM_RADIO, 128, 0);
#endif
return 1;
}
/*************************************************************************
* FUNCTION
* power_off_ATV
*
* DESCRIPTION
* This function is to turn off ATV power.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void power_off_ATV(void)
{
StopTimer(ATV_TIMER_CHANNEL_CHANGE);
// Turn off FM audio amplifier
#ifdef ADS_MTK
AFE_TurnOffSpeaker(L1SP_FM_RADIO);
AFE_SwitchExtAmplifier(FALSE);
#endif /* ADS_MTK */
// Restore backlight according to system default
TLGAPP_PowerDown();
ATV_ChipReset();
ATV_DeInitHostI2C();
ATV_ChipPowerOff();
}
/*************************************************************************
* FUNCTION
* get_ATV_id
*
* DESCRIPTION
* None
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void get_ATV_id(kal_uint8 *sensor_write_id, kal_uint8 *sensor_read_id)
{
}
/*************************************************************************
* FUNCTION
* get_ATV_size
*
* DESCRIPTION
* None
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void get_ATV_size(kal_uint16 *sensor_width, kal_uint16 *sensor_height)
{
if (gTvScanLines == TLG_TV_525_LINES)
{
*sensor_width = 360-(H_OFFSET_RANGE+H_REDUCE_525+gTvOptions.mHReduce)*PIXEL_STEP;
*sensor_height = 244-(V_OFFSET_RANGE+V_REDUCE_525+gTvOptions.mVReduce)*PIXEL_STEP;
}
else /* TvScanLines == TLG_TV_625_LINES */
{
*sensor_width = 360-(H_OFFSET_RANGE+H_REDUCE_625+gTvOptions.mHReduce)*PIXEL_STEP;
*sensor_height = 288-(V_OFFSET_RANGE+V_REDUCE_625+gTvOptions.mVReduce)*PIXEL_STEP;
}
}
/*************************************************************************
* FUNCTION
* get_ATV_period
*
* DESCRIPTION
* None
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void get_ATV_period(kal_uint16 *pixel_number, kal_uint16 *line_number)
{
if (gTvScanLines == TLG_TV_525_LINES)
{
*pixel_number = 360-(H_OFFSET_RANGE+H_REDUCE_525+gTvOptions.mHReduce)*PIXEL_STEP;
*line_number = 244-(V_OFFSET_RANGE+V_REDUCE_525+gTvOptions.mVReduce)*PIXEL_STEP;
}
else /* TvScanLines == TLG_TV_625_LINES */
{
*pixel_number = 360-(H_OFFSET_RANGE+H_REDUCE_625+gTvOptions.mHReduce)*PIXEL_STEP;
*line_number = 288-(V_OFFSET_RANGE+V_REDUCE_625+gTvOptions.mVReduce)*PIXEL_STEP;
}
}
void ATV_preview(image_sensor_exposure_window_struct *image_window, image_sensor_config_struct *sensor_config_data)
{
SET_TG_OUTPUT_CLK_DIVIDER(1);
SET_CMOS_RISING_EDGE(0);
SET_CMOS_FALLING_EDGE(0);
ENABLE_CAMERA_PIXEL_CLKIN_ENABLE;
SET_TG_PIXEL_CLK_DIVIDER(1);
SET_CMOS_DATA_LATCH(1);
DISABLE_CAMERA_TG_PHASE_COUNTER;
DISABLE_CAMERA_CLOCK_OUTPUT_TO_CMOS;
if (gTvScanLines == TLG_TV_525_LINES)
{
image_window->grab_start_x = 0;
image_window->grab_start_y = 1;
image_window->exposure_window_width = 360-(H_OFFSET_RANGE+H_REDUCE_525+gTvOptions.mHReduce)*PIXEL_STEP;
image_window->exposure_window_height = 244-(V_OFFSET_RANGE+V_REDUCE_525+gTvOptions.mVReduce)*PIXEL_STEP;
}
else /* TvScanLines == TLG_TV_625_LINES */
{
image_window->grab_start_x = 16;
image_window->grab_start_y = 1;
image_window->exposure_window_width = 360-(H_OFFSET_RANGE+H_REDUCE_625+gTvOptions.mHReduce)*PIXEL_STEP-16*2;
image_window->exposure_window_height = 288-(V_OFFSET_RANGE+V_REDUCE_625+gTvOptions.mVReduce)*PIXEL_STEP;
}
#ifdef WIN32
printf("ISP window: w=%d, h=%d\n", image_window->exposure_window_width, image_window->exposure_window_height);
printf("Aspect rate = %5.3f\n", (float)image_window->exposure_window_width / image_window->exposure_window_height);
#endif /* WIN32 */
}
void ATV_capture(image_sensor_exposure_window_struct *image_window, image_sensor_config_struct *sensor_config_data)
{
}
/*************************************************************************
* FUNCTION
* write_ATV_reg
*
* DESCRIPTION
* None
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void write_ATV_reg(kal_uint32 addr, kal_uint32 para)
{
}
/*************************************************************************
* FUNCTION
* read_cmos_sensor
*
* DESCRIPTION
* None
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 read_ATV_reg(kal_uint32 addr)
{
return 0;
}
/*************************************************************************
* FUNCTION
* set_ATV_shutter
*
* DESCRIPTION
* None
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void set_ATV_shutter(kal_uint16 shutter)
{
}
/*************************************************************************
* FUNCTION
* set_ATV_gain
*
* DESCRIPTION
* None
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint16 set_ATV_gain(kal_uint16 gain)
{
return 0;
}
/*************************************************************************
* FUNCTION
* ATV_night_mode
*
* DESCRIPTION
* None
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void ATV_night_mode(kal_bool enable)
{
}
/*************************************************************************
* FUNCTION
* set_ATV_flashlight
*
* DESCRIPTION
* None
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void set_ATV_flashlight(kal_bool enable)
{
}
/*************************************************************************
* FUNCTION
* yuv_ATV_setting
*
* DESCRIPTION
* None
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 yuv_ATV_setting(kal_uint32 cmd, kal_uint32 para)
{
return TRUE;
}
/*************************************************************************
* FUNCTION
* image_sensor_func_ATV
*
* DESCRIPTION
* ATV functions struct.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
image_sensor_func_struct image_sensor_func_ATV =
{
init_ATV,
get_ATV_id,
get_ATV_size,
get_ATV_period,
ATV_preview,
ATV_capture,
write_ATV_reg,
read_ATV_reg,
set_ATV_shutter,
ATV_night_mode,
power_off_ATV,
set_ATV_gain,
set_ATV_flashlight,
yuv_ATV_setting
};
void PowerOnFM(void)
{
ATV_InitHostI2C();
ATV_ChipPowerOn();
ATV_ChipReset();
ATV_TestI2C();
TLGAPP_Restart();
TLGAPP_Init(tlg_i2c_addr);
TLGAPP_SetChannelMapFM();
TLGAPP_SetChannel(p_tlg_cur_map[gFmStorage.mCurChnIdx] CHN_S);
}
void PowerOffFM(void)
{
TLGAPP_PowerDown();
ATV_ChipReset();
ATV_DeInitHostI2C();
ATV_ChipPowerOff();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -