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

📄 aprv_htv.c

📁 PLM1000C芯片驱动程序
💻 C
📖 第 1 页 / 共 4 页
字号:
			HMin = 160;
			HMax = 1112;
			VMin = 0;
			VMax = 1085;
			break;
	default:
			return;
	}
/*	if(Demo_Switch == 0)
	{
		iRegister_CE_Demo_left = RIGHT;
		iRegister_CE_Demo_up =DOWN;
		i11Register_CE_Demo_V_Location = 0;
		i12Register_CE_Demo_H_Location = 0;
	}*/
//	else if(Demo_Switch == 1)
switch(Demo_Switch)
{
	case 0:          /*  all on */
			break;
	case 1:	/*left right half*/
			iRegister_CE_Demo_left = LEFT;
		   	iRegister_CE_Demo_up = DOWN;
			i11Register_CE_Demo_V_Location = VMin ;
			i12Register_CE_Demo_H_Location = HMin + (HMax-HMin) /2 ;			
			break;
	case 2:  /* first leftup to rightdown ,then up to down*/
			#if(Demo_Switch_2)
		if(Demo_Switch_2_On)  //dh modify demo2 071008
		{
			iRegister_CE_Demo_left = LEFT;
			iRegister_CE_Demo_up = UP;
			i11Register_CE_Demo_V_Location = VMin + ( (long)( (long)(DemoCounter % 100) * (VMax-VMin)) / 100);
			i12Register_CE_Demo_H_Location =HMin + ( (long)( (long)(DemoCounter % 100)* (HMax-HMin)) / 100 );
			if(DemoCounter % 100==99)
				Demo_Switch_2_On=0;
	}
			//			#endif
			
//		  	#if (Demo_Switch_3)	
		else
		{
			iRegister_CE_Demo_left = RIGHT;
			iRegister_CE_Demo_up = UP;
			i11Register_CE_Demo_V_Location = VMin + ( (long)( (long)(DemoCounter % 100)* (VMax-VMin)) / 100 );
			i12Register_CE_Demo_H_Location = 0;
			if(DemoCounter % 100==99)
				Demo_Switch_2_On=1;
		}	
			#endif	//Demo_Switch_2
			
			#if (Demo_Switch_4)	
			i11Register_CE_Demo_V_Location = VMin + (VMax-VMin)>>1 ;
			i12Register_CE_Demo_H_Location = HMin + (HMax-HMin)>>1 ;
			switch(Demo_State_Machine)
	{
				case 0:
					iRegister_CE_Demo_left = LEFT;
					iRegister_CE_Demo_up = UP;
					break;
				case 1:
		iRegister_CE_Demo_left = RIGHT;
					iRegister_CE_Demo_up = UP;
					break;
				case 2:
					iRegister_CE_Demo_left = RIGHT;
					iRegister_CE_Demo_up = DOWN;
					break;
				case 3:
					iRegister_CE_Demo_left = LEFT;
					iRegister_CE_Demo_up = DOWN;
					break;
				default:
					Demo_State_Machine = 0;
					break;
			}
			#endif //Demo_Switch_4

			#if (Demo_Switch_5)	
			iRegister_CE_Demo_left = LEFT;
		iRegister_CE_Demo_up =DOWN;
		i11Register_CE_Demo_V_Location = 0;
			i12Register_CE_Demo_H_Location =HMin + ( (long)( (long)(DemoCounter % 100)* (HMax-HMin)) / 100 );
			#endif //Demo_Switch_5	

			break;
		default:
			return;
	}
#if 0
	if(Demo_Switch == 0)
	{
		iRegister_CE_Demo_left = LEFT;
		iRegister_CE_Demo_up = DOWN;
		i11Register_CE_Demo_V_Location = VMin ;
		i12Register_CE_Demo_H_Location = HMin + (HMax-HMin)>>1 ;
	}
//#if (Demo_Switch_2)	
//else if(Demo_Switch == 2)
else if(Demo_Switch == 1)
	{
		iRegister_CE_Demo_left = LEFT;
		iRegister_CE_Demo_up = UP;
		i11Register_CE_Demo_V_Location = VMin + ( (long)( (long)(DemoCounter % 100) * (VMax-VMin)) / 100);
		i12Register_CE_Demo_H_Location =HMin + ( (long)( (long)(DemoCounter % 100)* (HMax-HMin)) / 100 );
	}
//#endif //#if (Demo_Switch_2)	

#if (Demo_Switch_3)	
	else if(Demo_Switch == 2)
	{
		iRegister_CE_Demo_left = RIGHT;
		iRegister_CE_Demo_up = UP;
		i11Register_CE_Demo_V_Location = VMin + ( (long)( (long)(DemoCounter % 100)* (VMax-VMin)) / 100 );
		i12Register_CE_Demo_H_Location = 0;
	}
#endif	//Demo_Switch_3

#if (Demo_Switch_4)	
	else if(Demo_Switch == 2)
	{
		i11Register_CE_Demo_V_Location = VMin + (VMax-VMin)>>1 ;
		i12Register_CE_Demo_H_Location = HMin + (HMax-HMin)>>1 ;
		switch(Demo_State_Machine)
		{
		case 0:
			iRegister_CE_Demo_left = LEFT;
			iRegister_CE_Demo_up = UP;
			break;
		case 1:
			iRegister_CE_Demo_left = RIGHT;
			iRegister_CE_Demo_up = UP;
			break;
		case 2:
			iRegister_CE_Demo_left = RIGHT;
			iRegister_CE_Demo_up = DOWN;
			break;
		case 3:
			iRegister_CE_Demo_left = LEFT;
			iRegister_CE_Demo_up = DOWN;
			break;
		default:
			Demo_State_Machine = 0;
			break;
			}
	}
#endif //Demo_Switch_4

#if (Demo_Switch_5)	
	else if(Demo_Switch == 2)
	{
		iRegister_CE_Demo_left = LEFT;
		iRegister_CE_Demo_up = DOWN;
		i11Register_CE_Demo_V_Location = 0;
		i12Register_CE_Demo_H_Location =HMin + ( (long)( (long)(DemoCounter % 100)* (HMax-HMin)) / 100 );
	}
#endif //Demo_Switch_5
#endif  //#if 0
#if (Demo_Switch_4)	
	if( ((DemoCounter%(100>>2))==0) && (Demo_Switch == 2) )
	{
		Demo_State_Machine++;
		if(Demo_State_Machine>3)
			Demo_State_Machine = 0;
		Config_Register_CE(i11Register_CE_Demo_V_Location,i12Register_CE_Demo_H_Location,iRegister_CE_Demo_left,iRegister_CE_Demo_up);
	}
	else 
#endif //Demo_Switch_4
		Config_Register_CE(i11Register_CE_Demo_V_Location,i12Register_CE_Demo_H_Location,iRegister_CE_Demo_left,iRegister_CE_Demo_up);
		Write_Enable(FALSE);
}

static void AGC_Adjustment(Byte format)
{
	Byte RI2C_EXP_RAM temp[3];
	Byte sogslcrthres;
	Word Clamp_Level_Y,SyncAmplitude_Y,RegisterAGC_Gain_Y,SyncAmplitude_Y_NoGain;

	Clamp_Level_Y = (format==0x06 ? 350 : 300);//06-480p

	ri2c_ReadSub(PLM1000_ADDR,2,temp,120);
	temp[0]= ( temp[0] & 0xf0) | (( Clamp_Level_Y & 0x3c0 )>> 6) ;
	temp[1]= ( temp[1] & 0xc0) | ( Clamp_Level_Y & 0x3f ) ;
	Write_HTV_Register(PLM1000_ADDR,2,temp,120);

	ri2c_ReadSub(PLM1000_ADDR,2,temp,228);
	ri2c_ReadSub(PLM1000_ADDR,1,&temp[2],235);
	SyncAmplitude_Y = ((Word)(temp[0] & 0x1) << 9) + ((Word)temp[1] << 1) +(Word)((temp[2] & 0x80) >> 7);

	ri2c_ReadSub(PLM1000_ADDR,1,&temp[0],174);
	ri2c_ReadSub(PLM1000_ADDR,1,&temp[1],176);
	RegisterAGC_Gain_Y = ((Word)(temp[0] & 0x3) << 8) +(Word)temp[1] ;
	if(RegisterAGC_Gain_Y == 0)
		RegisterAGC_Gain_Y = 512;
	if(AGCth)
	{
		SyncAmplitude_Y_NoGain = (long)SyncAmplitude_Y*512/RegisterAGC_Gain_Y;
		if(SyncAmplitude_Y_NoGain>155 &&SyncAmplitude_Y_NoGain<=224)
			sogslcrthres = (Word)(SyncAmplitude_Y_NoGain*2/69-0.5);
		else if(SyncAmplitude_Y_NoGain>224 &&SyncAmplitude_Y_NoGain<=296)
			sogslcrthres = (Word)(SyncAmplitude_Y_NoGain*5/71)-10;
		else if(SyncAmplitude_Y_NoGain>296 && SyncAmplitude_Y_NoGain<320)
			sogslcrthres = (Word)(SyncAmplitude_Y_NoGain/6)-38;
		else
			sogslcrthres =0;

		if((pre_sog-sogslcrthres)>1 ||(pre_sog-sogslcrthres)<-1)
		{
			ri2c_ReadSub(PLM1000_ADDR,1,&temp[0],16);
			temp[0] = ( ( sogslcrthres & 0x1f )<< 3 ) | ( temp[0] & 0x07 ) ;
			Write_HTV_Register(PLM1000_ADDR,1,&temp[0],16);
		}
		pre_sog=sogslcrthres;
	}
	/*
	if(AGCGain)
	{
		if(SyncAmplitude_Y<100)
			return;
		else if(SyncAmplitude_Y<(format==0x06 ? 230 : 270)) 
			RegisterAGC_Gain_Y++;
		else 
			RegisterAGC_Gain_Y--;
		
		if(RegisterAGC_Gain_Y>1023)
			RegisterAGC_Gain_Y=1023;

		ri2c_ReadSub(PLM1000_ADDR,1,&temp[0],174);
		temp[0] = ( temp[0] & 0xfc ) | (( RegisterAGC_Gain_Y & 0x300 ) >> 8 );
		temp[1] =  RegisterAGC_Gain_Y & 0xff;
		Write_HTV_Register(PLM1000_ADDR,1,&temp[0],174);
		Write_HTV_Register(PLM1000_ADDR,1,&temp[1],176);
	}
	*/
}

static void i2c_config(void)
{
	Byte RI2C_EXP_RAM value = 1;
	
	Write_HTV_Register(PLM1000_ADDR,1,&value,0x66);

	ri2c_ReadSub(PLM1000_ADDR,1,&value,0x9d);
	value = value & 0xef ;
	Write_HTV_Register(PLM1000_ADDR,1,&value,0x9d);

	value = value | 0x10 ;
	Write_HTV_Register(PLM1000_ADDR,1,&value,0x9d);

	value = value & 0xef ;
	Write_HTV_Register(PLM1000_ADDR,1,&value,0x9d);
}


static void Switch_to_VGA(void)
{
	Byte RI2C_EXP_RAM value[3];
	if(VGA_Input ==1)
		return;
	else
		VGA_Input=1;
	ri2c_ReadSub(PLM1000_ADDR,2,value,14);
	value[0] = (value[0] & 0xf6) ;
	value[1] = (value[1] & 0xdf) ;
	value[2] = 80;
	Write_HTV_Register(PLM1000_ADDR,3,value,14);


//	ri2c_ReadSub(PLM1000_ADDR,1,&value,14);
//	value = (value & 0xf6) ;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,14);

//	ri2c_ReadSub(PLM1000_ADDR,1,&value,15);
//	value = (value & 0xdf) ;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,15);

//	value = 80;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,16);

	value[0] = 142;
	value[1] = 190;
	value[2] = 142;
	Write_HTV_Register(PLM1000_ADDR,3,value,22);


//	value = 142;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,22);
//	value = 190;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,23);
//	value = 142;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,24);
}

static void Switch_to_HD(void)
{
	Byte RI2C_EXP_RAM value[3];
	if(VGA_Input ==0)
		return;
	else
		VGA_Input=0;
	ri2c_ReadSub(PLM1000_ADDR,2,value,14);
	value[0] = (value[0] & 0xf6) | (1<<3) | 1 ;
	value[1] = ((value[1] & 0xdf) | (1<<5)) ;
	value[2] = 85;
	Write_HTV_Register(PLM1000_ADDR,3,value,14);

//	ri2c_ReadSub(PLM1000_ADDR,1,&value,14);
//	value = (value & 0xf6) | (1<<3) | 1 ;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,14);

//	ri2c_ReadSub(PLM1000_ADDR,1,&value,15);
//	value = ((value & 0xdf) | (1<<5)) ;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,15);
//	value = 85;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,16);

	value[0] = 156;
	value[1] = 220;
	value[2] = 156;
	Write_HTV_Register(PLM1000_ADDR,3,value,22);
//	value = 156;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,22);
//	value = 220;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,23);
//	value = 156;
//	Write_HTV_Register(PLM1000_ADDR,1,&value,24);
}
static void jbl_Delay(void)
{
	jbl_DelayActive=TRUE;
	jbl_DelayNum=0;
}

static void Write_HTV_Register(Byte slv_addr,
                          Byte cnt,
                          Byte RI2C_EXP_RAM *src_ptr,
                          Byte sub_addr)
{

	ri2c_WriteSub( slv_addr,
                           cnt,
                           src_ptr,
                           sub_addr);
}
#if 0
Bool   jbl_get_det_src(void)		// only do in TV and AV1
{
	Detect_Num ++;
	if(Detect_Num < 18)
	{		
		if(Detect_Num < 3)			// 1,2 initial data 
		{
		       filter_number[0] = 0;
		Write_Enable(TRUE);
			PLM1000_init(FSRT_SRC_DVD);
		Switch_to_HD();
		Write_Enable(FALSE);
	}
	}
	else	 if(Detect_Num<36)		// VGA input
	{		
		if(Detect_Num < 20)		// 18,19 initial data
			{
		       filter_number[1] = 0;
		Write_Enable(TRUE);
			PLM1000_init(FSRT_SRC_VGA);
		Switch_to_VGA();
		Write_Enable(FALSE);
		}
	}
	if(Detect_Num < 13 ||(Detect_Num < 30 && Detect_Num >= 18))		// 14 * 50ms delay after switch
		return FALSE;
	
	if(Detect_Num >= 36)
		Detect_Num = 0;

	Jbl_plm1000_format_monitor();
	
	rbsc_Wait100uSteps(50);
	
	if(Jbl_plm1000_format_monitor())
	{
	
	 	if(((cur_ip_format&0x1f)>= 0)&&((cur_ip_format&0x1f) < 15)&&(jbl_bPreHD == 0))		//HD

		{
			jbl_bPreHD =TRUE;
			jbl_InputPortDetect=FSRT_SRC_DVD;
			return TRUE;
		}
	 	else if(((cur_ip_format&0x1f)>15)&&((cur_ip_format&0x1f)<19)&&(jbl_bPreVGA == 0))		// VGA
		{
			jbl_bPreVGA =TRUE;
			jbl_InputPortDetect=FSRT_SRC_VGA;
			return TRUE;
		}
	}	
	return (FALSE);
}
#endif


#endif /*#if(GTVA_HTV_PLM_PRESENT == TRUE)*/

⌨️ 快捷键说明

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