📄 saa7115.c
字号:
#define __SAA7115_C__
//******************************************************************************
//
//
//==============================================================================
//
// MODULE: saa7115.c
//
// USAGE: Contains Functions related to video decoder SAA7115
//
//******************************************************************************
//******************************************************************************
// I N C L U D E F I L E S
//******************************************************************************
#include "kernel.h"
//******************************************************************************
// L O C A L D E F I N I T I O N S
//******************************************************************************
//******************************************************************************
// G L O B A L V A R I A B L E S
//******************************************************************************
//#ifdef USE_SAA7115_FOR_PIP
gmt_VideoDecoderStruct gmv_VideoDecoder[MAX_VIDEO_DECODERS];
#define SAA7115_ADJUSTSIGNAL_TOTALTIME 0x16
#define SAA7115_ADJUSTSIGNALISNOCOLOR_TIME SAA7115_ADJUSTSIGNAL_TOTALTIME -0x08
#define SAA7115_ADJUSTSIGNAL_TIME SAA7115_ADJUSTSIGNAL_TOTALTIME - 0x14
#if 0 //(NUM_DECODER == 1)
VIDEO_DECODER_ GVideoDecoder[NUM_DECODER];
//#else
extern VIDEO_DECODER_ GVideoDecoder[NUM_DECODER];
#endif
//******************************************************************************
// S T A T I C V A R I A B L E S
//******************************************************************************
//******************************************************************************
// S T A T I C F U N C T I O N P R O T O T Y P E S
//******************************************************************************
BYTE dev_saa7115Read(BYTE B_RegAddr);
void dev_saa7115Write(BYTE B_RegAddr, BYTE B_Value);
//******************************************************************************
// C O D E
//******************************************************************************
//******************************************************************************
//
// FUNCTION : static BYTE dev_saa7115Read(BYTE B_RegAddr)
// USAGE : Wrapper function for I2C Read for SAA7115
// INPUT : the register address that need to be read
// OUTPUT : The value read from the register
// GLOBALS : None
// USED_REGS :
//******************************************************************************
BYTE dev_saa7115Read(BYTE B_RegAddr)
{
BYTE ucReadBuffer[1];
// SleepDelay(2);
tdI2CCommit(SLAVE_ADDRESS_SAA7115, B_RegAddr, _NULL_, 0x00, ucReadBuffer, 0x01);
// SleepDelay(2);
return ucReadBuffer[0x00];
}
//******************************************************************************
//
// FUNCTION : static void dev_saa7115Write(BYTE B_RegAddr, BYTE B_Value)
// USAGE : Wrapper function for I2C Write for SAA7115
// INPUT : the register address , the value
// OUTPUT : None
// GLOBALS : None
// USED_REGS :
//******************************************************************************
tinyp BYTE g_b_SAA7115Reg,g_SAA7115RegValue;
void dev_saa7115Write_Test(void)
{
BYTE i = 1;
while(i)
tdI2CCommit(SLAVE_ADDRESS_SAA7115, g_b_SAA7115Reg, &g_SAA7115RegValue, 0x01, NULL, 0);
// gm_I2cWriteBuffer(SLAVE_ADDRESS_SAA7115,B_RegAddr, &B_Value,1);
}
tinyp BYTE g_b_SAA7115RegNum,g_SAA7115RegValue,g_Saa7115_delay;
void dev_saa7115Write_Test1(void)
{
BYTE i = 1;
for(g_b_SAA7115Reg =0;g_b_SAA7115Reg<0xFF;g_b_SAA7115Reg++)
{
for(g_SAA7115RegValue = 0x00;g_SAA7115RegValue<0xFF;g_SAA7115RegValue++)
{
tdI2CCommit(SLAVE_ADDRESS_SAA7115, g_b_SAA7115Reg, &g_SAA7115RegValue, 0x01, NULL, 0);
SleepDelay(g_Saa7115_delay);
}
}
// gm_I2cWriteBuffer(SLAVE_ADDRESS_SAA7115,B_RegAddr, &B_Value,1);
}
void dev_saa7115Write(BYTE B_RegAddr, BYTE B_Value)
{
// SleepDelay(2);
tdI2CCommit(SLAVE_ADDRESS_SAA7115, B_RegAddr, &B_Value, 0x01, NULL, 0);
// SleepDelay(2);
// gm_I2cWriteBuffer(SLAVE_ADDRESS_SAA7115,B_RegAddr, &B_Value,1);
}
void Dlp_Saa7115WriteParameter(BYTE code * p, BYTE ucSize, BYTE ucIndex)
{
BYTE ucRegName, ucRegValue;//must
while(_TRUE_)
{
LPREGVALUESTRUCT lp = (LPREGVALUESTRUCT)p;
ucRegName = lp->ucRegName;
if((ucRegName == END_REG) && (lp->ucRegValue[0x00] == END_VALUE)) return;
ucRegValue = lp->ucRegValue[ucIndex];
dev_saa7115Write(ucRegName, ucRegValue);
p += ucSize;
}
}
//******************************************************************************
//
// FUNCTION : void dev_saa7115ConfigVideoMode(BYTE VidDecId,BYTE B_Mode)
// USAGE : This function initializes SAA7115 in specified video mode
// INPUT : video decoder id, mode - NTSC/PAL/SECAM
// OUTPUT : None
// GLOBALS : None
// USED_REGS :
//******************************************************************************
void InitSaa7115(void)
{
dev_saa7115ConfigVideoMode(VDD_MODE_INIT);
dev_saa7115ConfigVideoMode(TV_SYSTEM_SIGNAL_PAL);
}
code REGVALUESTRUCT Saa7115INTTable[] =
{
{0x01, 0x08},//7115 INT table
{0x03, 0x33},//7115 INT table
{0x04, 0x00},//7115 INT table
{0x05, 0x00},//7115 INT table
{0x06, 0xEB},//7115 INT table
{0x07, 0xE0},//7115 INT table
{0x08, 0xB0},//7115 INT table
{0x09, 0x69},//7115 INT table //0x6d
{0x0a, 0xd0},//7115 INT table //lrq_modify_05_7_15
//{0x0a, 0xf8},
{0x0B, 0x46},//7115 INT table
//{0x0C, 0x20},//7115 INT table
{0x0C, 0x40},//7115 INT table //lrq_modify_05_08_05
{0x0D, 0x00},//7115 INT table
{0x0f, 0x0F},//7115 INT table
{0x10, 0x02},//7115 INT table
{0x11, 0x03},//7115 INT table
{0x12, 0x00},//7115 INT table
{0x14, 0x24},//7115 INT table
{0x15, 0x11},//7115 INT table
{0x16, 0xFE},//7115 INT table
{0x17, 0xD8},//7115 INT table
{0x18, 0x40},//7115 INT table
{0x19, 0x80},//7115 INT table
{0x1a, 0x77},//7115 INT table
{0x1b, 0x42},//7115 INT table
{0x1c, 0xA9},//7115 INT table
{0x1d, 0x01},//7115 INT table
{0x41, 0xFF},//7115 INT table
{0x42, 0xFF},//7115 INT table
{0x43, 0xFF},//7115 INT table
{0x44, 0xFF},//7115 INT table
{0x45, 0xFF},//7115 INT table
{0x46, 0xFF},//7115 INT table
{0x47, 0xFF},//7115 INT table
{0x48, 0xFF},//7115 INT table
{0x49, 0xFF},//7115 INT table
{0x4A, 0xFF},//7115 INT table
{0x4B, 0xFF},//7115 INT table
{0x4C, 0xFF},//7115 INT table
{0x4D, 0xFF},//7115 INT table
{0x4E, 0xFF},//7115 INT table //morning changed
{0x4F, 0xFF},//7115 INT table
{0x50, 0xFF},//7115 INT table
{0x51, 0xFF},//7115 INT table
{0x52, 0xFF},//7115 INT table
{0x53, 0x00},//7115 INT table
{0x54, 0x00},//7115 INT table //peaking_th 0x02 //mornig changed
{0x54, 0x44},//7115 INT table
{0x55, 0xFF},//7115 INT table
{0x56, 0xFF},//7115 INT table
{0x57, 0xFF},//7115 INT table
{0x80, 0x10},//7115 INT table
{0x81, 0x00},//7115 INT table
{0x82, 0x00},//7115 INT table
{0x83, 0x11},//7115 INT table
{0x86, 0x45},//7115 INT table
{0x87, 0x21},//7115 INT table
{0x88, 0xF0},//7115 INT table
{0xA4, 0x80},//7115 PAL table
{0xb4, 0x40},//7115 PAL table
{0xff, 0xff}
};
code REGVALUESTRUCT Saa7115NTSCTable[] =
{
{0x03, 0x33}, //7115 NTSC table
//{0x0a, 0x80}, //7115 NTSC table
//{0x0B, 0x40}, //7115 NTSC table
{0x09, 0x69},//7115 INT table //lrq_add_05_7_15
{0x0a, 0xE8},//7115 INT table //lrq_add_05_7_22
{0x0b, 0x60},//7115 INT table //lrq_add_05_7_22
//{0x0a, 0xf8},//7115 INT table //lrq_add_05_7_22
//{0x0b, 0x78},//7115 INT table //lrq_add_05_7_22
{0x0e, 0x0B}, //7115 NTSC table
{0x0F, 0x71}, //7115 NTSC table
{0x10, 0x02}, //7115 NTSC table //11.09 changed for the y/c
{0x11, 0x02}, //7115 NTSC table
{0x13, 0x80}, //7115 NTSC table
{0x1c, 0xA9}, //7115 NTSC table
{0x1d, 0x01}, //7115 NTSC table
{0x1e, 0x40}, //7115 NTSC table
{0x30, 0xde}, //7115 NTSC table
{0x31, 0x6f}, //7115 NTSC table
{0x5a, 0x06}, //7115 NTSC table
{0x66, 0x85}, //7115 NTSC table
{0x67, 0x00}, //7115 NTSC table
{0x68, 0x00}, //7115 NTSC table
{0x6b, 0xa5}, //7115 NTSC table
{0x72, 0xa6}, //7115 NTSC table
{0x77, 0xa6}, //7115 NTSC table
{0x84, 0x00}, //7115 NTSC table
{0x85, 0x01}, //7115 NTSC table
{0x98, 0x0a}, //7115 NTSC table
{0x9a, 0xfd}, //7115 NTSC table
{0x9b, 0x00}, //7115 NTSC table
{0x9e, 0x06}, //7115 NTSC table
//{0xb4, 0x01}, //7115 NTSC table
{0xff, 0xff} //7115 NTSC table
};
code REGVALUESTRUCT Saa7115PALTable[] =
{
{0x01, 0x08},//7115 INT table
{0x03, 0x33},//7115 INT table
{0x04, 0x00},//7115 INT table
{0x05, 0x00},//7115 INT table
{0x06, 0xEB},//7115 INT table
{0x07, 0xE0},//7115 INT table
{0x08, 0xB0},//7115 INT table
{0x09, 0x6D},//7115 INT table
{0x09, 0x0D},//7115 INT table //0xaf xuli changed for the pal disturb must set -> clear bit 7,5
//{0x09, 0x6D},//7115 INT table
{0x09, 0x69},//7115 INT table //lrq_add_05_7_15
//{0x0B, 0x40},//7115 INT table
//{0x0C, 0x40},//7115 INT table
//{0x0a, 0xE0},//7115 INT table //lrq_add_05_7_22
{0x0b, 0x69},//7115 INT table //lrq_add_05_7_22
//{0x0b, 0x78},
{0x0D, 0x00},//7115 INT table
{0x0e, 0x83},
{0x0f, 0x0F},//7115 INT table
{0x10, 0x02},//7115 INT table //11.09 changed for the y/c
{0x11, 0x03},//7115 INT table
{0x12, 0x00},//7115 INT table
{0x14, 0x24},//7115 INT table //24
{0x15, 0x11},//7115 INT table
{0x16, 0xFE},//7115 INT table
{0x17, 0xD8},//7115 INT table
{0x18, 0x40},//7115 INT table
{0x19, 0x80},//7115 INT table
{0x1a, 0x77},//7115 INT table
{0x1b, 0x40},
{0x1b, 0x42},//7115 INT table
{0x1c, 0xA9},//7115 INT table
{0x1d, 0x01},//7115 INT table
{0x41, 0xFF},//7115 INT table
{0x42, 0xFF},//7115 INT table
{0x43, 0xFF},//7115 INT table
{0x44, 0xFF},//7115 INT table
{0x45, 0xFF},//7115 INT table
{0x46, 0xFF},//7115 INT table
{0x47, 0xFF},//7115 INT table
{0x48, 0xFF},//7115 INT table
{0x49, 0xFF},//7115 INT table
{0x4A, 0xFF},//7115 INT table
{0x4B, 0xFF},//7115 INT table
{0x4C, 0xFF},//7115 INT table
{0x4D, 0xFF},//7115 INT table
{0x4E, 0xFF},//7115 INT table //morning changed
{0x4F, 0xFF},//7115 INT table
{0x50, 0xFF},//7115 INT table
{0x51, 0xFF},//7115 INT table
{0x52, 0xFF},//7115 INT table
{0x53, 0x00},//7115 INT table
{0x54, 0x00},//7115 INT table //peaking_th 0x02 //mornig changed
{0x54, 0x44},//7115 INT table
{0x55, 0xFF},//7115 INT table
{0x56, 0xFF},//7115 INT table
{0x57, 0xFF},//7115 INT table
{0x80, 0x10},//7115 INT table
{0x81, 0x00},//7115 INT table
{0x82, 0x00},//7115 INT table
{0x83, 0x11},//7115 INT table
{0x86, 0x45},//7115 INT table
{0x87, 0x21},//7115 INT table
{0x88, 0xF0},//7115 INT table
{0x13, 0x80},//7115 PAL table
//{0x0a, 0xE0},//7115 INT table //lrq_add_05_7_23
//{0x0a, 0x80},//7115 PAL table
{0x1e, 0x50},//7115 PAL table
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -