亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mxd_porting_maxim2165.c

?? mxd_tuner_ref_Ax.x.xxx :為了您使用方便
?? C
字號:
/*!
 *
 * \file    mxd_porting_maxim2165.c
 *
 * \brief	API porting for maxim tuner .
 *
 * C files to define the basic functions for maxscend SDK, 
 * which will be used in the custom application.
 *
 * \par    Include files
 *    - MxdPorting_Maxim2165.h
 *
 * \par    Functions
 *    - MxdPorting_Maxim2165InitTuner
 *    - MxdPorting_Maxim2165SetFreq
 *    - MxdPorting_Maxim2165GetTunerStatus
 * \par    Copyright (c) 2007 Maxscend Technologies Inc. All rights reserved
 *
 * PROPRIETARY RIGHTS of Maxscend Technologies Inc. are involved in
 * the subject matter of this material.  All manufacturing, reproduction, 
 * use, and sales rights pertaining to this subject matter are governed 
 * by the license agreement.  The recipient of this software implicitly 
 * accepts the terms of the license.
 * 
 * \version
 * Revision of last commit: $Rev:: 169                        $
 * Author of last commit  : $Author:: maxscend\lei.wei        $
 * Date of last commit    : $Date:: 2007-10-18 17:07:19 +0800#$
 *
 *
 * \par    Modification History 
 * [ Revision  data  author Bugzilla ID ] 
 * [ Description ]
 *
 */

#include "mxd_porting_maxim2165.h"

/*!
 * Init for tuner, including demod for tuner and tuner itself
 *
 * \param hDevice    [ in ] Device handle
 *
 * \return Return code by MXD_RTN_CODE_E enumeration
 *
 * \remarks 
 *
 */
MXD_RTN_CODE_E MXD_API MxdPorting_Maxim2165InitTuner (IN HMXDDEV hDevice)
{
    MXD_RTN_CODE_E eRtnCode = MXD_RTN_OK;

    /* Setup tuner interface */	
    DDS_WriteReg( hDevice,  COMMON_TIC_CONTROL_REG, MAXIM_MAX2165_CTRL_REG_VAL );
    DDS_WriteReg( hDevice,  COMMON_TIC_TUNER_SLAVE_ADDR_REG, MAXIM_MAX2165_SALVE_ADDR_VAL );
    DDS_WriteReg( hDevice,  COMMON_TIC_I2C_BIT_RATE_REG, MAXIM_MAX2165_I2CBRATE_CFIG_VAL );		

	/* PWM setting */
	DDS_WriteReg( hDevice,  DTMB_TDP_PWM_INI_REG, 0x30);/*PWM init value*/ 
	DDS_WriteReg( hDevice,  COMMON_ADC_MODE_CTRL_REG, 0xdf );
	DDS_WriteReg( hDevice,  DTMB_TDP_PWM_CONTROL_REG, 0x44);
	DDS_WriteReg( hDevice,  DTMB_TDP_PWM_CLK_STEP_REG, 0x64);

	return eRtnCode;
}/* enf of MxdPorting_Maxim2165InitTuner( )*/
 
/*!
 * Tune the tuner to the frequency, this function should be used 
 * after MXD_TIF_InitTuner having been called.
 *
 * \param hDevice    [ in ] Device handle
 * \param freqHz     [ in ] frequency to be tuned, unit: Hz
 *
 * \return Return code by MXD_RTN_CODE_E enumeration
 *
 * \remarks 
 *
 */
MXD_RTN_CODE_E MXD_API MxdPorting_Maxim2165SetFreq (
							IN HMXDDEV hDevice,
							IN MXD_U32 freqHz )
{
    /* MXD_S32 pllDiv; */
    /* DOUBLE xtrefFreq = 20.0; */ /* actual reference crystal frequency in MHz */
    MXD_U32 xtrefFreqKHz = 20*1000;   /* 20 MHz= 20kkHz*/
    MXD_U8 frac2 =  0x18;	/* (FRAC=Fractional Mode, LSB is set in Max2165set_pll */
    MXD_U8 lna = 0x01;	    /* (LnaSw=on)  */ 
    MXD_U8 pll = 0xa;       /* (Rdiv=1)(ICP=600)(CPS=ICP)(ADLY=1)(LF_DIV=2) */
    MXD_U8 shutDown	= 0x2;  /*  All shutdown bits off	*/
    MXD_U8 vco = 0x54;	    /* (VCO=1)(BS=1)(VAS=on)	*/
    MXD_U8 baseBand	= 0xc3; /* (BB_BW set in 2165set_bb_filter)(BB_BIA=low)(PD_TH=3)*/
    MXD_U8 dcOffset = 0x75; /* (DC_MO=normal)(DC_SP=slow)(DC_TH=1)			*/
    MXD_U8 tfn, tfb;
    MXD_U8 nta,ntb;
    MXD_U8 romVal = 0;
    MXD_U32 txFreq = 0;
    MXD_U8  balL,balH;
    MXD_U8 tfCaps = 0;   
    MXD_U8 bb8,tfFilter;
    MXD_U8 registers[16], i;
    MXD_U32 freqKHz;
    MXD_U32 quotientN=0;
    MXD_U32 quatientFrac=0;   	

    /* set the register defaults */
	registers[MAX2165_FRAC2]	= frac2;	/* (FRAC=Fractional Mode, LSB is set in Max2165set_pll */
	registers[MAX2165_LNA]		= lna;	/* (LnaSw=on)  */ 
	registers[MAX2165_PLL]		= pll;  /* (Rdiv=1)(ICP=600)(CPS=ICP)(ADLY=1)(LF_DIV=2) */
	registers[MAX2165_TEST]		= 0x8;  /* (CP_TST=Normal)(TURBO=on)(LD_MUX=Normal)	 */
	registers[MAX2165_SHUTDOWN]	= shutDown;  /*  All shutdown bits off	*/
	registers[MAX2165_VCO]		= 0x54;	/* (VCO=1)(BS=1)(VAS=on)	*/
	registers[MAX2165_BASEBAND]	= 0xc3; /* (BB_BW set in 2165set_bb_filter)(BB_BIA=low)(PD_TH=3)*/
	registers[MAX2165_DCOFFSET]	= dcOffset; /* (DC_MO=normal)(DC_SP=slow)(DC_TH=1)			*/
	registers[MAX2165_DCOFFSET_DAC] = 0x0;
	registers[MAX2165_ROM_ADDR]	= 0x00;

    freqKHz = (freqHz/1000);
	/* set Max2165 PLL divider ratio's for a given frequency*/
	/* pllDiv =(MXD_S32)(  ( 1 << 20 ) * freq / xtrefFreq); */
    UTIL_DivUint32(freqKHz,xtrefFreqKHz,&quotientN,&quatientFrac);    
    /* 20bits quatientFrac */
    quatientFrac = quatientFrac>>10;
    quatientFrac += 1;
    quatientFrac = quatientFrac>>1;
    
    registers[MAX2165_NDIV]= (MXD_U8) quotientN;

    registers[MAX2165_FRAC2]= (MXD_U8) ( (registers[MAX2165_FRAC2]&0xf0) | ( (quatientFrac>>16) &0x0f ));
    registers[MAX2165_FRAC1]= (MXD_U8) (quatientFrac >> 8) & 0xff;
    registers[MAX2165_FRAC0]= (MXD_U8) (quatientFrac & 0xff);

    /* RF tracking filter. Note different interpolation algorithms
      * used for VHF III vs. UHF band. No range checking done. 
      */
    romVal = ReadMax2165RomTable( hDevice, MAX2165_ROMTFNTCH);
    nta = romVal & 0xf; 
    ntb = romVal >>4; 
    
    if( txFreq >0 )
    {
        if(freqKHz < 725*1000)
        {
            tfn = ntb;
        }
        else
        {
            tfn = nta;
        }
    }
    else
    {
        tfn = 15;
    }

    romVal = ReadMax2165RomTable( hDevice, MAX2165_ROMTF_BAL);
    balL = romVal & 0xf;
    balH = (romVal >>4) & 0xf;

    tfb = (MXD_U8)( balL +(balH - balL)*(freqKHz - 470*1000)/(780*1000 -470*1000));
    /* just in case, limit to 4bits to prevent rounding problems near 470MHz*/
    if( tfb> 15)
    {
        tfb = 15;
    }
    tfCaps = (MXD_U8)(tfn <<4) | tfb;
	registers[MAX2165_TF_CAPS] = (MXD_U8)( tfn << 4 ) | tfb ;
	  
    romVal = ReadMax2165RomTable( hDevice, MAX2165_ROMBBBW );
    bb8 = romVal>>4;
	tfFilter=bb8+3;

    if (tfFilter >15)
	{
	    tfFilter=15;
	}

    baseBand = (baseBand & 0xf)|(MXD_U8)(tfFilter<<4);
    registers[MAX2165_BASEBAND]= (registers[MAX2165_BASEBAND] & 0xf) | (MXD_U8)(tfFilter<<4);

	for(i = 0; i < 15; i++)
    {
        TIF_WriteTunerReg( hDevice, i, registers[i] );	    
    }

    /* set fraction divider of vco*/
    TIF_WriteTunerReg( hDevice, MAX2165_FRAC2, registers[MAX2165_FRAC2] );
    TIF_WriteTunerReg( hDevice, MAX2165_FRAC1, registers[MAX2165_FRAC1] );
    TIF_WriteTunerReg( hDevice, MAX2165_FRAC0, registers[MAX2165_FRAC0]  );    
    /* set integer divider of vco */
    TIF_WriteTunerReg( hDevice, MAX2165_NDIV,   registers[MAX2165_NDIV] );
	TIF_WriteTunerReg( hDevice, MAX2165_TF_CAPS, tfCaps);
    TIF_WriteTunerReg( hDevice, MAX2165_BASEBAND, baseBand );
    TIF_WriteTunerReg( hDevice, MAX2165_VCO, vco);

    return MXD_RTN_OK;

}/* end of MxdPorting_Maxim2165SetFreq( )*/

/*!
 * Get tuner status. If locked, then return ok, if un-locked, then return failed.
 *
 * \param hDevice    [ in ] Device handle
 *
 * \return Return code by MXD_RTN_CODE_E enumeration
 *
 * \remarks 
 *
 */
MXD_RTN_CODE_E MXD_API MxdPorting_Maxim2165GetTunerStatus (IN HMXDDEV hDevice)
{
    MXD_RTN_CODE_E eRtnCode = MXD_RTN_FAIL;
    MXD_U8 regVal;
    MXD_U8 i;

    /* Read status byte*/
    for(i=0; i<200; i++)
    {
        TIF_ReadTunerReg( hDevice, MAX2165_STATUS, &regVal );
        if( (regVal&0x10) == 0x10 )
        {
            return MXD_RTN_OK; 
        }
    }
    return eRtnCode;
}/* end of MxdPorting_Maxim2165GetTunerStatus( )*/

/*!
 * Read Maxim Rom Table from MAX2165, get register value to be set to the maxim register
 *
 * \param tableIndex: [ in ] index of the Rom Table
 *
 * \return register value read back
 *
 */
MXD_U8 MXD_API ReadMax2165RomTable( IN HMXDDEV hDevice, IN MXD_U8 tableIndex )
{
    MXD_U8 romVal = 0;
    /* Set Index in ROM in table to read back Bias */
    TIF_WriteTunerReg( hDevice, MAX2165_ROM_ADDR, tableIndex );
    /* Read back from table */
    TIF_ReadTunerReg( hDevice, MAX2165_ROM_READ, &romVal );
    TIF_WriteTunerReg( hDevice, MAX2165_ROM_ADDR, 0 );
    
    return romVal; 
} /* end of ReadMax2165RomTable( ) */

/*!
 *  MAX2165 control
 *
 * \param hDevice: [ in ] the handle of device
 *
 * \return NULL
 *
 */
void MXD_API MxdPorting_Maxim2165LnaCtrl( HMXDDEV hDevice )
{
    MXD_U8 pwmVal;
    MXD_U8 uTunerRegValue;

    /* read the lna value */
	DDS_ReadReg(hDevice, DTMB_TDP_PWM_THD_REG, &pwmVal);
	TIF_ReadTunerReg( hDevice, MAX2165_LNA, &uTunerRegValue );
	if( (0x01 == (uTunerRegValue&0x01)) && pwmVal < PWM_MIN_THRESHOLD)
	{
	    /* lna off */
		OAL_DebugPrint(1, "lna off!, the 0x27: 0x%x", pwmVal);
        TIF_ReadTunerReg( hDevice, MAX2165_LNA, &uTunerRegValue );
        uTunerRegValue &= 0xfe;
        TIF_WriteTunerReg(hDevice, MAX2165_LNA, uTunerRegValue );
        return ;
	}
	else if( (0x00 == (uTunerRegValue&0x01)) && pwmVal >= PWM_MAX_THRESHOLD) 
	{	
		/*lna on */
        OAL_DebugPrint(1, "lna on !, the 0x27: 0x%x", pwmVal);
        TIF_ReadTunerReg( hDevice, MAX2165_LNA, &uTunerRegValue );
        uTunerRegValue |= 0x01;
		TIF_WriteTunerReg(hDevice, MAX2165_LNA, uTunerRegValue );
		return;
	}
	return;
}
/*!
 * set data with certain bit.
 *
 * \param inDividend		[ in ]		dividend.
 * \param inDivisor			[ in ]		divisor.
 * \param outQuotientN		[ out ]		integer value of the quotient.
 * \param outQuatientFrac	[ out ]		fractional value of the quotient. 
 *
 * \return Return code MXD_U8: 1: OK;0: the divisor is 0   
 *
 * \remark: (float)quatientN + (float)(quatientFrac)/(float)(1<<fracPosi)== (float)devidend/(float)divisor
 *
 */
MXD_U8 UTIL_DivUint32( MXD_U32 inDividend,
                 MXD_U32 inDivisor,
                 MXD_U32 * outQuotientN,
                 MXD_U32 * outQuatientFrac
                )
{
    
    MXD_U32 remainder;
    MXD_U32 quotientN;
    MXD_U32 quatientFrac;
    /*MXD_U8  fracPosi;*/
    MXD_U8 i;
    /*MXD_U8 j;*/
    MXD_U32 divisor  = inDivisor;
    MXD_U32 dividend = inDividend;       

    if (0 == divisor)
    {
        return 0;
    } 

    quotientN = dividend/divisor;
    
    remainder = dividend - quotientN*divisor;

    /* @here remainder < divisor */
    if (remainder>=0x80000000)
    {
        remainder = remainder >> 1;
        divisor   = divisor >> 1;
    }

    /* @here remainder <= divisor */
    quatientFrac = 0;

    if (remainder != divisor)
    {
        for (i=0;i<31;i++)
        {
            remainder = remainder<<1;    /* remainder *= 2; */

            if ( remainder >= divisor )
            {
                quatientFrac += 1;       /* BS_ (quatientFrac,bit0) */
                remainder -= divisor;
            }

            quatientFrac = quatientFrac<<1;
        } 

        if(0xffffffff==quatientFrac )
        {
            quotientN++;
            quatientFrac = 0;
        }
        else
        {
            quatientFrac = (quatientFrac+1)>>1;
        }
    }
    
    else   /* remainder == divisor */
    {
        quotientN++;
        quatientFrac = 0;
    }

    *outQuotientN = quotientN;
    *outQuatientFrac = quatientFrac;
    
    return 1;
}

/*end of _MXD_PORTING_MAXIM2165_C_ */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一线二线三线精华| 欧美日韩一区二区在线观看| 一区二区三区av电影| 国产精品萝li| 国产精品久久久久久久岛一牛影视 | 国产精品伦理在线| 视频一区二区国产| 日韩国产高清影视| 卡一卡二国产精品| 狠狠色伊人亚洲综合成人| 日韩精品乱码免费| www.综合网.com| 91行情网站电视在线观看高清版| 在线视频你懂得一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃 | 欧美日韩中字一区| 国产亚洲美州欧州综合国| 国产精品色一区二区三区| 日本v片在线高清不卡在线观看| 日韩成人伦理电影在线观看| 色综合久久综合中文综合网| 久久久久国产精品麻豆| 中文字幕一区二区三区精华液 | 亚洲一区二区三区四区在线| 亚洲影院理伦片| 成人免费的视频| 欧美一a一片一级一片| 制服丝袜国产精品| 国产午夜亚洲精品理论片色戒| 日韩精品亚洲专区| 欧美亚洲自拍偷拍| 一级特黄大欧美久久久| 91小视频在线免费看| 欧美精品在线观看一区二区| 久久久噜噜噜久噜久久综合| 蜜桃视频在线一区| aaa亚洲精品| 国产精品久久久久一区二区三区| 成人涩涩免费视频| 国产精品久久综合| 91在线观看视频| 亚洲欧美在线视频观看| 91老司机福利 在线| 亚洲综合色网站| 欧美三级蜜桃2在线观看| 一区二区久久久久| 欧美色成人综合| 日韩国产高清在线| 久久精品欧美日韩精品| 国产99久久久国产精品潘金 | 色综合久久久久综合体桃花网| 精品一区二区三区免费视频| 国产伦理精品不卡| 在线播放/欧美激情| 免费成人你懂的| 国产亚洲综合在线| 一本大道久久a久久精品综合| 亚洲午夜私人影院| 99精品热视频| 国产亚洲1区2区3区| 99国产精品久久久| 亚洲午夜三级在线| 久久久综合网站| 91女厕偷拍女厕偷拍高清| 亚洲在线观看免费| 久久久久久日产精品| 成人的网站免费观看| 国产日韩av一区二区| 国模冰冰炮一区二区| 国产精品久久久久久久久晋中| 在线日韩一区二区| 久久99精品国产91久久来源| 国产精品卡一卡二| 日韩一区二区电影在线| 亚洲成人1区2区| 欧美日韩一二三| 国产高清亚洲一区| 久久影院电视剧免费观看| 激情都市一区二区| 亚洲精品综合在线| 欧美日韩在线综合| 国产精品一区久久久久| 亚洲第一会所有码转帖| 久久久国产午夜精品| 欧美色网一区二区| 成人99免费视频| 国产真实精品久久二三区| 亚洲小少妇裸体bbw| 亚洲国产成人私人影院tom| 国产在线麻豆精品观看| 亚洲高清不卡在线| 自拍偷拍亚洲综合| 91国偷自产一区二区开放时间| 精品一区二区三区av| 亚洲一区二区三区小说| 日韩一区日韩二区| 国产女人水真多18毛片18精品视频| 欧美日本在线观看| 精品一区二区三区蜜桃| 天堂久久一区二区三区| 一区二区三区加勒比av| 中文字幕日韩精品一区| 国产调教视频一区| 精品国产乱码久久久久久蜜臀| 成人一区在线看| 国产真实乱子伦精品视频| 精品制服美女丁香| 美腿丝袜亚洲一区| 日本aⅴ免费视频一区二区三区| 亚洲国产日日夜夜| 一区二区三区高清| 一区二区三国产精华液| 一区二区三区欧美在线观看| 一区二区三区日韩精品视频| 亚洲精品视频自拍| 亚洲免费观看高清完整| 欧美一区二区在线不卡| 99久久精品国产一区二区三区 | 国产精品不卡在线| 中文字幕国产一区二区| 国产精品久久久久9999吃药| 国产精品欧美久久久久无广告| 国产精品免费aⅴ片在线观看| 国产亚洲欧美在线| 国产精品美女久久久久高潮| 日本aⅴ亚洲精品中文乱码| 日本亚洲免费观看| 奇米色777欧美一区二区| 国产主播一区二区| av不卡免费电影| 在线观看一区二区精品视频| 在线电影院国产精品| 日韩三级在线观看| www国产成人| 亚洲欧美一区二区在线观看| 亚洲曰韩产成在线| 久久精品72免费观看| 国产成人av自拍| 色婷婷av一区二区三区之一色屋| 欧美日韩国产免费| 2019国产精品| 自拍偷自拍亚洲精品播放| 日韩精品久久久久久| 国产成人av一区二区三区在线 | 亚洲精品在线免费播放| 欧美国产97人人爽人人喊| 一区二区三区精品在线| 人人精品人人爱| 成人a区在线观看| 制服丝袜国产精品| 欧美激情在线观看视频免费| 亚洲综合色婷婷| 国产一区二三区好的| 91日韩精品一区| 欧美成人a在线| 日韩视频免费直播| 国产精品国产三级国产aⅴ中文| 亚洲综合免费观看高清完整版| 精品一区二区国语对白| 色综合一区二区| 91国产视频在线观看| 日韩一级片网址| 亚洲摸摸操操av| 国产一区二区调教| 欧美日韩国产小视频| 1024亚洲合集| 国产精品一线二线三线精华| 亚洲欧洲精品一区二区精品久久久| 亚洲成av人片www| 北岛玲一区二区三区四区| 欧美一级片在线看| 亚洲在线视频免费观看| 成人av综合一区| 国产午夜久久久久| 蜜臀久久99精品久久久久宅男| 91麻豆免费视频| 亚洲国产高清在线观看视频| 麻豆精品在线播放| 欧美撒尿777hd撒尿| 国产精品不卡视频| 国产成人av电影在线播放| 日韩欧美在线不卡| 日精品一区二区| 欧美三级午夜理伦三级中视频| 亚洲少妇最新在线视频| 成人午夜伦理影院| 国产午夜亚洲精品理论片色戒| 韩国精品主播一区二区在线观看| 欧美年轻男男videosbes| 一区二区三区在线看| 97se亚洲国产综合自在线观| 国产精品人妖ts系列视频| 国产精品一区二区久久不卡| 精品福利在线导航| 麻豆精品一区二区综合av| 欧美v国产在线一区二区三区| 蜜臀av一区二区三区| 日韩一区二区高清| 国内久久婷婷综合| 久久久久久久av麻豆果冻|