sad9883.c
来自「Ad9882.c analog公司VGA/DVI AD芯片源码」· C语言 代码 · 共 670 行 · 第 1/2 页
C
670 行
/*------------------------------------------------------------------------
-- Copyright 2003 by Silicon Optix Inc. All rights reserved.
--
-- This document contains proprietary and confidential information of
-- Silicon Optix Inc. Distribution, copying, disclosure, or incorporation
-- in other material in whole, in part, or modified form is strictly
-- prohibited without written permission from Silicon Optix Inc.
-- Use of this information must be in accordance with the Silicon Optix
-- Software Licensing Agreement. If this information is received in error,
-- please delete and notify us immediately.
--
------------------------------------------------------------------------
-- File Name : sAd9883.c
-- Purpose :
-- :
------------------------------------------------------------------------
-- Revision History:
------------------------------------------------------------------------
-- <See $Log at end for detailed CVS history>
--
-- Creator's Name : Hung Nguyen
-- Creation Date : Oct. 10, 2003
-- Comment :
--
-- Revision :
-- Name :
-- Date :
-- Comment :
--
*-------------------------------------------------------------------------
$Id: sAd9883.c,v 1.2 2003/10/16 17:39:16 lawrence Exp $
*/
#define SAD9883_C
/****************************************************************************/
/* I N C L U D E F I L E S */
/****************************************************************************/
#include "main/aConfig.h"
#include "main/aGlobal.h"
#ifdef uI_NUCLEUS
#include "nucleus.h"
#include "Tc_defs.h"
#endif
#include "sd_defs.h"
#include "sd_extr.h"
#include "main/uItron/uI_types.h"
#include "main/uItron/uI_setm.h"
#include "main/uItron/uI_nplus.h"
#include "main/aInit.h"
#include "Driver.h"
#include "Driver/adc/dadc.h"
#include "Driver/adc/dadc2.h"
#include "Driver/common/aDrvTsk.h"
#include "Driver/Uart/dUart.h"
#include "Driver/Uart/dUart1.h"
#include "Driver/Uart/dUart2.h"
#include "aLogTsk.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Image/Detect/sMode.h"
#include "Image/Detect/sPort.h"
#include "Image/Detect/sDetect.h"
#include "sAd9883.h"
#if ADC_OPTION ==ADC_9883 || ADC2_OPTION ==ADC_9883
BYTE byWriteSingleDataAd9883(BYTE by_reg_address, BYTE by_data)
{
#if 0
tst_ADC_WRITE_CONFIG st_adc_write_config;
#ifdef Use_DRV_NONBLOCKING_OPTION
st_adc_write_config.t_blocking = BLOCKING;
#endif
st_adc_write_config.t_change_priority = PRI_NO_CHANGE;
st_adc_write_config.u32_delay = 0;
st_adc_write_config.u32_max_count = 5;
st_adc_write_config.u32_reg_address = by_reg_address;
st_adc_write_config.u32_length = 1;
#if ADC_OPTION ==ADC_9883
return st_adc_driver.Write(&by_data, &st_adc_write_config, &st_adc_driver);
#elif ADC2_OPTION ==ADC_9883
return st_adc2_driver.Write(&by_data, &st_adc_write_config, &st_adc2_driver);
#endif
#endif
return OK;
}
BYTE byReadSingleDataAd9883(BYTE by_reg_address, BYTE *byp_data)
{
#if 0
tst_ADC_READ_CONFIG st_adc_read_config;
#ifdef Use_DRV_NONBLOCKING_OPTION
st_adc_read_config.t_blocking = BLOCKING;
#endif
st_adc_read_config.t_change_priority = PRI_NO_CHANGE;
st_adc_read_config.u32_delay = 0;
st_adc_read_config.u32_max_count = 5;
st_adc_read_config.u32_reg_address = by_reg_address;
st_adc_read_config.u32_length = 1;
#if ADC_OPTION ==ADC_9883
return st_adc_driver.Read(byp_data, &st_adc_read_config, &st_adc_driver);
#elif ADC2_OPTION ==ADC_9883
return st_adc2_driver.Read(byp_data, &st_adc_read_config, &st_adc2_driver);
#endif
#endif
return OK;
}
BYTE byAd9883InitMsr(UWORD32 u32_port_id)
{
#if 0
u32_ifm_msr_tmr[u32_port_id]=10;
return OK;
#endif
return OK;
}
BYTE byAd9883GetInitMsrDone(UWORD32 u32_port_id, UWORD32 *u32p_init_done)
{
#if 0
if(u32_ifm_msr_tmr[u32_port_id] == 0)
*u32p_init_done = 1;
else
*u32p_init_done = 0;
return OK;
#endif
return OK;
}
BYTE byAd9883StartMsr(UWORD32 u32_port_id)
{
#if 0
u32_ifm_msr_tmr[u32_port_id] =10;
return OK;
#endif
return OK;
}
BYTE byAd9883GetMsrDone(UWORD32 u32_port_id, UWORD32 *u32p_msr_done)
{
#if 0
*u32p_msr_done = 1;
return OK;
#endif
return OK;
}
BYTE byAd9883GetMsrRaw(UWORD32 u32_port_id, st_RAW_MSR *stp_raw_msr )
{
#if 0
BYTE by_data;
byReadSingleDataAd9883(AD9883_SYNC_DETECT, &by_data);
if((by_data & AD9883_S_DET_VS_DET) && (by_data & AD9883_S_DET_HS_DET))
{
stp_raw_msr->u32_inp_setup |= VALID_DSS;
stp_raw_msr->u32_inp_setup &= (~VALID_DCS);
stp_raw_msr->u32_inp_setup &= (~VALID_ACS);
}
else if(!(by_data & AD9883_S_DET_VS_DET) && (by_data & AD9883_S_DET_HS_DET))
{
stp_raw_msr->u32_inp_setup |= VALID_DCS;
stp_raw_msr->u32_inp_setup &= (~VALID_DSS);
stp_raw_msr->u32_inp_setup &= (~VALID_ACS);
}
else if(by_data & AD9883_S_DET_SOG_DET)
{
stp_raw_msr->u32_inp_setup |= VALID_ACS;
stp_raw_msr->u32_inp_setup &= (~VALID_DSS);
stp_raw_msr->u32_inp_setup &= (~VALID_DCS);
}
else
{
stp_raw_msr->u32_inp_setup &= (~VALID_ACS);
stp_raw_msr->u32_inp_setup &= (~VALID_DSS);
stp_raw_msr->u32_inp_setup &= (~VALID_DCS);
}
stp_raw_msr->u32_valid_var |= (VALID_DSS | VALID_DCS | VALID_ACS);
return OK;
#endif
return OK;
}
BYTE byAd9883SetClampMidScale(UWORD32 u32_port_id, BYTE by_RGB_YUV)
{
#if 0
BYTE by_ret, by_data;
byReadSingleDataAd9883(AD9883_SOG_THRESHOLD, &by_data);
by_data &= 0xF8;
if(by_RGB_YUV == AD9883_INP_MIDSCALE_YUV)
{
by_data = by_data |BIT0 |BIT2;//Setup Clamp to MidScale for RED and BLUE channels
by_ret |=byWriteSingleDataAd9883(AD9883_RED_GAIN, 0x5e);// Configure as per Gary's liking
by_ret |=byWriteSingleDataAd9883(AD9883_BLUE_GAIN, 0x5a);
by_ret |=byWriteSingleDataAd9883(AD9883_GREEN_GAIN, 0x6a);
by_ret |=byWriteSingleDataAd9883(AD9883_RED_OFFSET, 0x6a);
by_ret |=byWriteSingleDataAd9883(AD9883_BLUE_OFFSET, 0x78);
by_ret |=byWriteSingleDataAd9883(AD9883_GREEN_OFFSET, 0x68);
}
else
{
by_ret |=byWriteSingleDataAd9883(AD9883_RED_GAIN, 0x80);
by_ret |=byWriteSingleDataAd9883(AD9883_BLUE_GAIN, 0x80);
by_ret |=byWriteSingleDataAd9883(AD9883_GREEN_GAIN, 0x80);
by_ret |=byWriteSingleDataAd9883(AD9883_RED_OFFSET, 0x80);
by_ret |=byWriteSingleDataAd9883(AD9883_BLUE_OFFSET, 0x80);
by_ret |=byWriteSingleDataAd9883(AD9883_GREEN_OFFSET, 0x80);
}
by_ret |=byWriteSingleDataAd9883(AD9883_SOG_THRESHOLD, by_data); // PLL VCO and Pump Current
return by_ret;;
#endif
return OK;
}
BYTE byAd9883SetMode(UWORD32 u32_port_id, VP byptable)
{
#if 0
BYTE by_ret;
BYTE *byp_table;
byp_table = byptable;
by_ret |=byWriteSingleDataAd9883(AD9883_VCO_CPMP, byp_table[0]);
by_ret |=byWriteSingleDataAd9883(AD9883_CLAMP_REPLACEMENT, byp_table[1]);
by_ret |=byWriteSingleDataAd9883(AD9883_CLAMP_DURATION, byp_table[2]);
by_ret |=byWriteSingleDataAd9883(AD9883_SYNC_SEPARATOR, byp_table[3]);
by_ret |=byWriteSingleDataAd9883(AD9883_PLL_CLAMP_CONTROL, byp_table[4]);
by_ret |=byWriteSingleDataAd9883(AD9883_PRE_COAST, 0x10); // To correct SOG Field signal from HDTV FPGA
by_ret |=byWriteSingleDataAd9883(AD9883_OUTPUT_FORMAT, 0xFE); // PLL VCO and Pump Current
return by_ret;
#endif
return OK;
}
BYTE byAd9883SetInpSetup(UWORD32 u32_port_id)
{
#if 0
UWORD32 u32_setup;
BYTE by_sync_dtct;
BYTE by_sync_ctrl = 0x16;
BYTE u32_data=0;
byReadSingleDataAd9883(AD9883_SYNC_DETECT, &by_sync_dtct); /* reading H sync polarity */
if(!(by_sync_dtct & AD9883_S_DET_HS_POL)) /* if HS active low */
by_sync_ctrl |= BIT5; /* set HS out polarity as HS in polarity */
PortGetInpSetup(u32_port_id, &u32_setup);
if(u32_setup & VALID_ACS)
by_sync_ctrl |= BIT3; /* */
if(u32_setup & (VALID_ACS | VALID_DCS))
by_sync_ctrl |= BIT0; /* */
u32_data = byWriteSingleDataAd9883(AD9883_SYNC_CONTROL, by_sync_ctrl); // PLL divider LSB
#endif
return OK;
}
BYTE byAd9883SetRedOffset (UWORD32 u32_port_id, UWORD32 u32_value)
{
#if 0
BYTE by_ret=0;
by_ret |= byWriteSingleDataAd9883(AD9883_RED_OFFSET, (BYTE)(u32_value));
return by_ret;
#endif
return OK;
}
BYTE byAd9883SetBlueOffset (UWORD32 u32_port_id, UWORD32 u32_value)
{
#if 0
BYTE by_ret=0;
by_ret |= byWriteSingleDataAd9883(AD9883_BLUE_OFFSET, (BYTE)(u32_value));
return by_ret;
#endif
return OK;
}
BYTE byAd9883SetGreenOffset (UWORD32 u32_port_id, UWORD32 u32_value)
{
#if 0
BYTE by_ret=0;
by_ret |= byWriteSingleDataAd9883(AD9883_GREEN_OFFSET, (BYTE)(u32_value));
return by_ret;
#endif
return OK;
}
BYTE byAd9883SetRedGain (UWORD32 u32_port_id, UWORD32 u32_value)
{
#if 0
BYTE by_ret=0;
by_ret |= byWriteSingleDataAd9883(AD9883_RED_GAIN, (BYTE)(u32_value));
return by_ret;
#endif
return OK;
}
BYTE byAd9883SetBlueGain (UWORD32 u32_port_id, UWORD32 u32_value)
{
#if 0
BYTE by_ret=0;
by_ret |= byWriteSingleDataAd9883(AD9883_BLUE_GAIN, (BYTE)(u32_value));
return by_ret;
#endif
return OK;
}
BYTE byAd9883SetGreenGain (UWORD32 u32_port_id, UWORD32 u32_value)
{
#if 0
BYTE by_ret=0;
by_ret |= byWriteSingleDataAd9883(AD9883_GREEN_GAIN, (BYTE)(u32_value));
return by_ret;
#endif
return OK;
}
BYTE byAd9883SetBright (UWORD32 u32_port_id, UWORD32 u32_value)
{
#if 0
BYTE by_ret=0;
WORD w_data;
w_data = AD9883_BRIGHT_MAX - u32_value;
w_data <<=1;
by_ret |= byAd9883SetRedOffset(u32_port_id, (w_data));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?