📄 tuner_sharp_6060.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 + -