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

📄 al242decoder.c

📁 Averlogic AL576芯片MPEG4压缩示例源程序
💻 C
📖 第 1 页 / 共 3 页
字号:

#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 + -