?? al242decoder.c
字號:
#include <at89x52.H> // SFR definition header file
#include <stdio.h> // prototype declarations for I/O functions
#include "ChipType.h"
#include "SystemEvent.h"
#include "Function.h"
//#include "Include\CalledFunction.h"
//#include "Include\Parameter.h"
#include "ExternVariable.h"
#include <intrins.h>
/*#ifdef _FastSwitch
// ********************************************************************************
// Function: SetupAL242FastChannelSwitch;
// Description: Turn on AL242/240 fast channel switch
// set AL242 REG 0xb7.3 to 1
// Input parameters: None.
// Output parameters: None.
// Return values: None.
// ********************************************************************************
void SetupAL242FastChannelSwitch(void){
unsigned char _dx;
_dx=GetReg(_SubIDOfAL242,0xb7);
_dx&=0xf7;
_dx|=0x08;//_gx;
SetReg(_SubIDOfAL242,0xb7,_dx);
InitTimer2(_Timer2ForFastSwitch,0x400);
}
#endif*/
#define _colour_mode 0
#define _vline_625 1
#define _hpixel 2
#define _ped 3
#define _hagc 4
#define _hactive_start 5
#define _vactive_start 6
#define _vactive_high 7
#define _adaptive_mode 8
#define _Cautopos 9
#define _Cage 10
#define _comb_wide_band 11
#define _chroma_burst 12
#define _Chroma_bw_lo 13
#define _14_318 0
#define _20_0 1
#define _20_25 2
#define _24_00 3
#define _24_576 4
#define _27_0 5
#define _28_6364 6
code double _Crystal[]={
14.318,
20.0,
20.25,
24.00,
24.576,
27.0,
28.6364
};
code double _4xSubCarrier[9]={
14.31818182, // _NTSC_M 0
17.73447500, // _NTSC_443 2
17.73447500, // _PAL_I 3
14.30244596, // _PAL_M 5
17.73447500, // _PAL_N 4
17.14400000, // _SECAM 8
14.32822500, // _PAL_CN 6
17.73447500, // _PAL_60 7
14.31818182 // _NTSC_J 1
};
#define _NTSC_M 0
#define _NTSC_443 1
#define _PAL_I 2
#define _PAL_M 3
#define _PAL_N 4
#define _SECAMx 5
#define _PAL_CN 6
#define _PAL_60 7
#define _NTSC_J 8
code unsigned int VideoSpec[14][9]={
//_colour_mode
{0,0,1,2,1,4,3,1,0},
//_vline_625
{0,0,1,0,1,1,1,0,0},
//_hpixel
{0,0,1,0,1,1,1,0,0},
//_ped
{1,1,0,0,0,0,0,0,0},
//_hagc
{221,221,220,221,220,220,220,220,221},
//_hactive_start
{0x88,0x88,0x8e,0x88,0x8e,0x8e,0x8e,0x88,0x88},
//{0x86,0x86,0x8c,0x86,0x8c,0x8c,0x8c,0x86,0x86}, ////QNAP_DVB
//_vactive_start
{34,34,42,34,42,42,42,34,34},
//_vactive_high
{97,97,193,97,193,193,193,97,97},
//{100,100,191,100,191,191,191,100,100}, //QNAP_DVB==>add 3 lines (481--484)
//_adaptive_mode
{0,3,2,2,2,0,2,2,1},
//_Cautopos
{0x2c,0x2c,0x2c,0x2c,0x2c,8,0x2c,0x2c,0x2c},
//_Cage
{0,0,103,0,0,0,0,0,0},
//_comb_wide_band
{0,0,1,1,0,0,0,0,0},
//_chroma_burst
{1,1,1,1,0,0,0,0,0},
//_Chroma_bw_lo
{0x02,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02}
};
#define _Contrast 0
#define _Brightness 1
#define _Saturation 2
code unsigned char _CBS[3][3][9]={ // Contrast,Brightness,Saturation
// Composite input
{
//_Contrast
{0x88,0x88,0x80,0x80,0x80,0x80,0x80,0x80,0x88},
//{0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75},
//_Brightness
{0x26,0x26,0x20,0x20,0x20,0x20,0x20,0x20,0x26},
//{0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16},
//_Satruration
{0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93}
},
// Svideo input
{
//_Contrast
{0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83},
//_Brightness
{0x2b,0x2b,0x16,0x16,0x16,0x16,0x16,0x16,0x2b},
//_Satruration
{0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93}
},
// Component input
{
//_Contrast
{0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83},
//_Brightness
{0x31,0x31,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x31},
//_Satruration
{0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93}
}
};
unsigned char GetAL242EVBOSCType(void){
unsigned char _OSCTypeX;
_OSCTypeX=_20_0;
return(_OSCTypeX);
}
// ********************************************************************************
// Function: SoftWareResetAL242;
// Description: Software reset to AL242
// Input parameters: none:
// Output parameters: None.
// Return values: None.
// ********************************************************************************
void SoftWareResetAL242(void){
SetReg(_SubIDOfAL242,0x3f,0x01);
SetReg(_SubIDOfAL242,0x3f,0x00);
}
// ********************************************************************************
// Function: AL242DecoderInitial ;
// Description: setting some registers which will be write once after power on
// Input parameters: none:
// Output parameters: None.
// Return values: None.
// ********************************************************************************
void AL242DecoderInitial(void){
double _OSC;
double _NxOSC;
unsigned int _PLL;
unsigned long _gx;
unsigned int _ix;
unsigned char _dx;
SetReg(_SubIDOfAL242,0xfe,0xff);
SetReg(_SubIDOfAL242,0xd5,00);
SetReg(_SubIDOfAL242,0xd4,0x3c);
SetReg(_SubIDOfAL242,0xb1,0x90);
SetReg(_SubIDOfAL242,0x41,0x01);
SetReg(_SubIDOfAL242,0x51,0x01);
SetReg(_SubIDOfAL242,0x40,0x05);
SetReg(_SubIDOfAL242,0x83,0xdf);
//SetReg(_SubIDOfAL242,0x2f,0x52); //add 4 lines
//SetReg(_SubIDOfAL242,0x20,0x3a); //shift left(2005/08/01)3A
_OSC=_Crystal[GetAL242EVBOSCType()];//////_24_576
_dx=GetReg(_SubIDOfAL242,0x02);
_dx|=0x01; // enable auto gain control
SetReg(_SubIDOfAL242,0x02,_dx);
_gx=(unsigned long)((13.5/_OSC)*0x40000000);
for(_ix=0;_ix<4;_ix++){
SetReg(_SubIDOfAL242,(0x1f-_ix),(unsigned char)(_gx&0x00ff));
_gx>>=8;
}
_dx=0x18;//8;//10;
SetReg(_SubIDOfAL242,0xba,_dx);
_NxOSC=((_dx+2)/2)*_OSC;
_PLL=(unsigned int)((2*27.0*0x10000)/_NxOSC);
SetReg(_SubIDOfAL242,0xbc,_PLL&0x00ff);
_PLL>>=8;
SetReg(_SubIDOfAL242,0xbb,_PLL&0x00ff);
SetReg(_SubIDOfAL242,0x2d,0x50);
SetReg(_SubIDOfAL242,0x0a,0xb8);
}
// ********************************************************************************
// Function: SetUpAL242DisplayQuality;
// Description: Setup AL242 decoder to assigned video standard.
// Input parameters: _VideoModeX,_AL242InputMode:
// Output parameters: None.
// Return values: None.
// ********************************************************************************
//add in Ver.302
void SetUpAL242DisplayQuality(unsigned char _VideoModeX,
unsigned char _AL242InputMode){
unsigned char _dx;
_dx=_CBS[_AL242InputMode][_Contrast][_VideoModeX];
SetReg(_SubIDOfAL242,0x08,_dx);// contrast
_dx=_CBS[_AL242InputMode][_Brightness][_VideoModeX];
SetReg(_SubIDOfAL242,0x09,_dx);// brightness
_dx=_CBS[_AL242InputMode][_Saturation][_VideoModeX];
SetReg(_SubIDOfAL242,0x0a,_dx);// saturation
}
// ********************************************************************************
// Function: SetupAL242VideoModeX;
// Description: Setup AL242 decoder to assigned video standard.
// Input parameters: _VideoModeX:
// _NTSC_M 0
// _NTSC_443 1
// _PAL_I 2
// _PAL_M 3
// _PAL_N 4
// _SECAMx 5
// _PAL_CN 6
// _PAL_60 7
// _NTSC_J 8
// Output parameters: None.
// Return values: None.
// ********************************************************************************
void SetupAL242VideoModeX(unsigned int _VideoModeX,unsigned char _AL242InputMode)
{
unsigned char _dx;
unsigned long _gx;
unsigned int _ix;
double _Scale;
double _OSC;
_OSC=_Crystal[GetAL242EVBOSCType()];
_Scale=_OSC/27;
SetReg(_SubIDOfAL242,0xc1,(unsigned char)_OSC); //add in Ver.302
_dx=GetReg(_SubIDOfAL242,0x07);
_dx&=0xcf;
_dx|=0x10;
SetReg(_SubIDOfAL242,0x07,_dx);
_dx=GetReg(_SubIDOfAL242,0x00);
_dx&=0x81;
_dx|=(VideoSpec[_colour_mode][_VideoModeX]<<1)+
(VideoSpec[_vline_625][_VideoModeX]<<4)+
(VideoSpec[_hpixel][_VideoModeX]<<5);
SetReg(_SubIDOfAL242,0x00,_dx);
_dx=GetReg(_SubIDOfAL242,0x01);
_dx&=0xf0;
_dx|=VideoSpec[_ped][_VideoModeX];
_dx|=VideoSpec[_Chroma_bw_lo][_VideoModeX]<<2;
_dx|=(_VideoModeX!=_NTSC_443)?0x80:0x00;
SetReg(_SubIDOfAL242,0x01,_dx);
_dx=VideoSpec[_hagc][_VideoModeX];
SetReg(_SubIDOfAL242,0x04,_dx);
_gx=(unsigned long)((_4xSubCarrier[_VideoModeX]/_OSC)*0x40000000);
for(_ix=0;_ix<4;_ix++){
SetReg(_SubIDOfAL242,(0x1b-_ix),(unsigned char)(_gx&0x00ff));
_gx>>=8;
}
_dx=VideoSpec[_hactive_start][_VideoModeX];
SetReg(_SubIDOfAL242,0x2e,_dx);
_dx=VideoSpec[_vactive_start][_VideoModeX];
SetReg(_SubIDOfAL242,0x30,_dx);
_dx=VideoSpec[_vactive_high][_VideoModeX];
SetReg(_SubIDOfAL242,0x31,_dx);
_dx=GetReg(_SubIDOfAL242,0x03);
_dx&=0xf8;
_dx|=(VideoSpec[_adaptive_mode][_VideoModeX]&0x07);
SetReg(_SubIDOfAL242,0x03,_dx);
if (_AL242InputMode==_Input1){ //S-Video Filter Setup 2005/08/11
if((_VideoModeX==_NTSC_M)||(_VideoModeX==_NTSC_443)){
_dx=GetReg(_SubIDOfAL242,0x03);
_dx&=0xf8;
_dx|=0x03;
SetReg(_SubIDOfAL242,0x03,_dx);}
else {
_dx=GetReg(_SubIDOfAL242,0x03);
_dx&=0xf8; // 2d filter for PAL...
SetReg(_SubIDOfAL242,0x03,_dx);}
}
_dx=GetReg(_SubIDOfAL242,0x0f);
_dx&=0xc0;
_dx|=VideoSpec[_Cautopos][_VideoModeX];
SetReg(_SubIDOfAL242,0x0f,_dx);
_dx=GetReg(_SubIDOfAL242,0x82);
_dx&=0xef;
_dx|=VideoSpec[_comb_wide_band][_VideoModeX]<<4;
SetReg(_SubIDOfAL242,0x82,_dx);
SetUpAL242DisplayQuality(_VideoModeX,_AL242InputMode);
SoftWareResetAL242();
delay(0x400);
_dx=GetReg(_SubIDOfAL242,0x07);
_dx&=0xcf;
_dx|=0x20;
SetReg(_SubIDOfAL242,0x07,_dx);
if (_Check!=1){
P3&=0x0f;
P3|=(_VideoModeX<<4);}
_KeyInCommand[_VideoStandardSwitch]=_VideoModeX;
}
// ********************************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -