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

📄 tuner_sharp_6060.c

📁 数字电视解调
💻 C
字号:

#include <stdio.h>

#include "lgs_8913.h"
#include "lgs_debug.h"


LGS_HANDLE 		g_sharpHandleI2c = 0;
extern LGS_OPEN_I2C 	LGS_OpenI2C;
extern LGS_READ_I2C 	LGS_ReadI2C;
extern LGS_WRITE_I2C 	LGS_WriteI2C;
extern LGS_CLOSE_I2C 	LGS_CloseI2C;
extern LGS_WAIT 	LGS_Wait;

/**
 *compute tuner register data
 *
 *@param	frequency	input frequency, MHz
 *@param	ppd1		tuner divider
 *@param	ppd2		tuner divider
 *@param	pcb1		control byte 1
 *@param	pcb2		control	byte 2
 *@param	pcb3a		control byte 3 a
 *@param	pcb3b		control	byte 3 b
 *@return	macros defined in lgs_8913.h
 */
INT8 LGS_ComputeTunerRegister(UINT16 frequency, 
			      UINT8 *ppd1, 
			      UINT8 *ppd2, 
			      UINT8 *pcb1, 
			      UINT8 *pcb2, 
			      UINT8 *pcb3a, 
			      UINT8 *pcb3b) 
{
	UINT16 tunerDivi;
	
	if (frequency >= 434 && frequency < 578) {
		*pcb2 = 0x94;
	}
	else if (frequency >= 578 && frequency < 650) {
		*pcb2 = 0xB4;
	}
	else if (frequency >= 650 && frequency < 746) {
		*pcb2 = 0xD4;
	}
	else if (frequency >= 746 && frequency <= 858) {
		*pcb2 = 0xF4;
	}
	else
		return LGS_FREQUENCY_ERROR; /* illegal tuner frequency */
	
	*pcb1  = 0xCA;
	*pcb3a = 0x8C;		/* Search Mode */
	*pcb3b = 0x84;		/* Normal Mode */
	
	/*Npro = (freq + 36.1667)*24/4 */
	tunerDivi = (frequency*6) + 217;

	/* now convert the tuner divider into the two tuner divider registers */
	*ppd1 = (tunerDivi >> 8) & 0xFF;  /* High byte	*/
	*ppd2 = tunerDivi & 0xFF;         /* Low  byte	*/
	
	return LGS_NO_ERROR;
}


INT8 LGS_StartTuner(UINT16 frequency)
{
	INT8 err = LGS_NO_ERROR;
	UINT8 tunerRegister[5];
  	UINT8 pd1, pd2, cb1, cb2, cb3a, cb3b, locked;
		
	err = LGS_ComputeTunerRegister(frequency, &pd1, &pd2, &cb1, &cb2, &cb3a, &cb3b);
	if(err != LGS_NO_ERROR)
	{
		LGS_Debug((FILE_INFO, "LGS_ComputeTunerRegister is failed!\n"));
		goto failed;
	}	
	
     		  
    	err = LGS_OpenTunerI2C(0x61);
    	if(err != LGS_NO_ERROR)
    	{
    		LGS_Debug((FILE_INFO, "LGS_OpenTunerI2C is failed!\n"));
    		goto failed;
    	}
    	
    	err = LGS_SoftReset();
    	if(err != LGS_NO_ERROR)
    	{
    		LGS_Debug((FILE_INFO, "LGS_SoftReset is failed!\n"));
    		goto failed;
    	}
	
	err = LGS_OpenI2C(&g_sharpHandleI2c, 0xC2, 1);
        if (err != LGS_NO_ERROR)
        {
            	LGS_Debug((FILE_INFO, "\t LGS_OpenI2C is failed!\n"));
		goto failed;
        }
	
	tunerRegister[0] = pd1;
	tunerRegister[1] = pd2;
	tunerRegister[2] = cb1;
	tunerRegister[3] = cb2;
	tunerRegister[4] = cb3a;
    	err = LGS_WriteI2C(g_sharpHandleI2c, tunerRegister, 5, 100);
    	if (err != LGS_NO_ERROR)
        {
            	LGS_Debug((FILE_INFO, "\t LGS_WriteI2C is failed!\n"));
		goto failed;
        }

	tunerRegister[0] = pd1;
	tunerRegister[1] = pd2;
	tunerRegister[2] = cb1;
	tunerRegister[3] = cb2;
	tunerRegister[4] = cb3b;
	err = LGS_WriteI2C(g_sharpHandleI2c, tunerRegister, 5, 100);
    	if (err != LGS_NO_ERROR)
        {
            	LGS_Debug((FILE_INFO, "\t LGS_WriteI2C is failed!\n"));
		goto failed;
        }
    
    	LGS_Wait(100);		/* wait 100 ms */
	
    	err = LGS_CloseI2C(g_sharpHandleI2c);
    	if (err != LGS_NO_ERROR)
        {
            	LGS_Debug((FILE_INFO, "\t LGS_CloseI2C is failed!\n"));
		goto failed;
        }

	err = LGS_OpenI2C(&g_sharpHandleI2c, 0xC3, 1);
        if (err != LGS_NO_ERROR)
        {
            	LGS_Debug((FILE_INFO, "\t LGS_OpenI2C is failed!\n"));
		goto failed;
        }

	err = LGS_ReadI2C(g_sharpHandleI2c, &locked, 1, 100);
    	if (err != LGS_NO_ERROR)
        {
            	LGS_Debug((FILE_INFO, "\t LGS_WriteI2C is failed!\n"));
		goto failed;
        }
	
	err = LGS_CloseI2C(g_sharpHandleI2c);
    	if (err != LGS_NO_ERROR)
        {
            	LGS_Debug((FILE_INFO, "\t LGS_CloseI2C is failed!\n"));
		goto failed;
        }
        
        err = LGS_CloseTunerI2C();
    	if(err != LGS_NO_ERROR)
    	{
    		LGS_Debug((FILE_INFO, "LGS_CloseTunerI2C is failed!\n"));
    		goto failed;
    	}
        
        LGS_Debug((FILE_INFO, "tuner register is 0x%x\n", locked));
        
	if((locked & 0x5C) == 0x5C)
	{
		LGS_Debug((FILE_INFO, "sharp tuner locked!\n"));
	}
	else
	{
		err = LGS_NO_LOCKED;
		LGS_Debug((FILE_INFO, "sharp tuner not locked!\n"));
		goto failed;
	}
	
failed:	
  	return err;
}

⌨️ 快捷键说明

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