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

📄 scalar.c

📁 NT68617源程序代码集合
💻 C
📖 第 1 页 / 共 3 页
字号:
	WrScalarReg(rP16C, G_color);
	WrScalarReg(rP16D, B_color);
}


/*
********************************************************************************
* 	函 数 名: SarDispCtrl
* 	功能描述: SCALAR的MUTE控制
* 	输    入: ctrl   : 控制要求
						DISP_NORMAL
						DISP_POST
						DISP_OSD
						DISP_MUTE
* 	返    回: 无
********************************************************************************
*/
void SarDispCtrl(uint8 ctrl)
{
	WrScalarRegBit(rP154, (ctrl & 0x03), B0000_0011);
}


/*
********************************************************************************
* 	函 数 名: SarCapture
* 	功能描述: SCALAR的捕获控制
* 	输    入: ctrl   = ON		允许捕获数据
*                    = OFF		禁止捕获数据
* 	返    回: 无
********************************************************************************
*/
void SarCapture(uint8 ctrl)
{
	if (ctrl == ON)  {
		WrScalarRegBit(rP020, 0x01, 0x01);
		WrScalarRegBit(rP040, 0x01, 0x01);
		}
	else  {
		WrScalarRegBit(rP020, 0x00, 0x01);
		WrScalarRegBit(rP040, 0x00, 0x01);
		}
}


/*
********************************************************************************  
* 	函 数 名: SarDataOut
* 	功能描述: 控制SCALAR的显示输出是有效还是无效
* 	输    入: state     = ON  : 数据输出有效
*                       = OFF : 数据输出无效
* 	返    回: 无
********************************************************************************
*/
void SarDataOut(uint8 state)
{
	if (state == ON)  {
		WrScalarRegBit(rP150, 0x01, 0x01);			// 图形口的数据输出允许
		}
	else  {
		WrScalarRegBit(rP150, 0x00, 0x01);			// 图形口的数据输出禁止
		}
}


/*
********************************************************************************  
* 	函 数 名: SarSetDPLL
* 	功能描述: 根据指定的值, 设置输出的点时钟频率
* 	输    入: 无
* 	返    回: 无
*   注    意: 在调用这个函数之前必须正确设置ulDotClk的值, 否则会导致显示不正常
********************************************************************************
*/
void SarSetDPLL(void)
{
	uint32 temp;

	WrScalarReg(rP0F0, 0x00);
	WrScalarReg(rP0F1, 0x00);
	WrScalarRegBit(rPB04, B0000_0001, B0000_0001);
	WrScalarRegBit(rPB04, B0000_0000, B0000_0001);
	temp = ((float)ulDotClk * 16384) / 1500000;
	WrScalarReg(rP0F2, temp);
	WrScalarReg(rP0F3, temp >> 8);
	WrScalarReg(rP0F4, temp >> 16);
#if EN_NT68167_B
	WrScalarReg(rP0F0, 0x08);		//chen 08-05-09 from application note
#elif EN_NT68167_C
	WrScalarRegBit(rP0F0, B0000_1000, B0000_1000);
	WrScalarRegBit(rP0F0, B0000_0000, B0000_1000);
//	WrScalarReg(rP0F0, 0x08);		//chen 08-05-09 from application note
//	WrScalarReg(rP0F0, 0x00);		//chen 08-05-09 from application note
#endif
	WrScalarReg(rP0F0, 0x01);
	DebugModeEn();
}


/*
********************************************************************************
* 	函 数 名: SarDataOut
* 	功能描述: 控制Scalar输出到Panel的数据是有效还是无效
* 	输    入: ON/OFF	ON:数据输出有效 	OFF:数据输出无效
* 	返    回: 无
*   注    意: 关闭电源时可以全部关闭, 但是打开电源时要根据条件来打开,这样可以
*             节省不必要的电源损耗
********************************************************************************
*/
void SarPower(uint8 state)
{
#if EN_NT68167_C || EN_NT68167_B
	uint8 xdata *Addr;

//	Addr = 0xF050;
#endif
	switch(state) {
		case POWER_NORMAL:
#if EN_NT68167_C || EN_NT68167_B
			Addr = 0xF000 + IDX_LDO_ADJ;
			*Addr = 0x8B;			//Power up APLL	//chen 08-05-16
			
			Addr = 0xF000 + IDX_CURR_ADJ1;
			*Addr = 0x55;			//Set the current of PortB/PortA to mid value	//chen 08-05-16
#endif
			WrScalarReg(rP070, 0x30);		//enable pwma/pwmb	//chen 08-05-16
			
			SarMPLLPower(ON);
			SarHPLLPower(ON);
			SarClockPower(ON);
			SarAdcPower(ON);
			SarMiscPower(ON);
			
	
			break;

		case POWER_STADBY:
		case POWER_SUSPEND:
		case POWER_OFF:
			WrScalarReg(rP070, 0x00);		//disable pwma/pwmb 能降低功耗	//chen 08-05-16
			
			SarHPLLPower(OFF);
			SarClockPower(OFF);
			SarAdcPower(OFF);
			SarMiscPower(OFF);
			SarMPLLPower(OFF);		//add chen 08-05-12
#if EN_NT68167_C || EN_NT68167_B
			Addr = 0xF000 + IDX_LDO_ADJ;
			*Addr = 0x0B;			//Power down APLL
			
			Addr = 0xF000 + IDX_CURR_ADJ1;
			*Addr = 0x00;			//Set the current of PortB/PortA to min value	//chen 08-05-16
	
#endif
			break;

		case POWER_CUTOFF:
			WrScalarReg(rP070, 0x00);		//disable pwma/pwmb 能降低功耗 	//chen 08-05-16

			SarHPLLPower(OFF);
			SarClockPower(OFF);
			SarAdcPower(OFF);
			SarMiscPower(OFF);
			SarMPLLPower(OFF);
#if EN_NT68167_C || EN_NT68167_B
			Addr = 0xF000 + IDX_LDO_ADJ;
			*Addr = 0x0B;			//Power down APLL
			
			Addr = 0xF000 + IDX_CURR_ADJ1;
			*Addr = 0x00;		//Set the current of PortB/PortA to min value	//chen 08-05-16
#endif
			break;
		}
}


/*
********************************************************************************
* 	函 数 名: SarAutoOffset
* 	功能描述: 设置VGA输入条件下的自动偏置处理方式和参数
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void SarAutoOffset(void)
{
	WrScalarReg(rP1BB, 0x80);
	WrScalarReg(rP1BC, 0x03);
	WrScalarReg(rP1BD, 0x01);
	WrScalarReg(rP1BE, 0x00);
	WrScalarReg(rP1BF, 0x01);
}


/*
********************************************************************************
* 	函 数 名: SarHpos
* 	功能描述: 调节水平位置
* 	输    入: hpos   : 水平位置的值
* 	返    回: 无
********************************************************************************
*/
void SarHpos(uint16 hpos)
{
	WrScalarWord(rP034, hpos);
}


/*
********************************************************************************
* 	函 数 名: SarVpos
* 	功能描述: 调节水平位置
* 	输    入: hpos   : 水平位置的值
* 	返    回: 无
********************************************************************************
*/
void SarVpos(uint16 vpos)
{
	WrScalarWord(rP030, vpos);
	WrScalarWord(rP02E, vpos);
}


/*
********************************************************************************
* 	函 数 名: SarSetBri
* 	功能描述: 通过sRGB来调节亮度
* 	输    入: Bri   : 亮度值
* 	返    回: 无
*   注    意: 同时更新R/G/B/的数值
********************************************************************************
*/
void SarSetBri(uint8 Bri)
{
	Bri = ((uint16)Bri * 0xC0)/100 + 0x10;
	WrScalarReg(rP1D0, 0x21);
	WrScalarReg(rP1D7, Bri);
	WrScalarReg(rP1D0, 0x21 + 2);
	WrScalarReg(rP1D7, Bri);
	WrScalarReg(rP1D0, 0x21 + 4);
	WrScalarReg(rP1D7, Bri);
	WrScalarReg(rP1D0, 0x3D);
}


/*
********************************************************************************
* 	函 数 名: SarBF3Bri
* 	功能描述: 设置亮帧的亮度
* 	输    入: Bri   : 亮度值
* 	返    回: 无
********************************************************************************
*/
void SarBF3Bri(uint8 Bri)
{
	uint8 xdata BriBuf[3];
	
	Bri -= 0x80;

	BriBuf[0] = Bri;	BriBuf[1] = Bri;	BriBuf[2] = Bri;
	WrScalarBytes(rP3C1, 3, BriBuf);
}


/*
********************************************************************************
* 	函 数 名: SarBF3Con
* 	功能描述: 设置亮帧的对比度
* 	输    入: Bri   : 对比度的值
* 	返    回: 无
********************************************************************************
*/
void SarBF3Con(uint8 Con)
{
	uint8 xdata ConBuf[3];
	
	ConBuf[0] = Con;	ConBuf[1] = Con;	ConBuf[2] = Con;
	WrScalarBytes(rP3C4, 3, ConBuf);
}


/*
********************************************************************************
* 	函 数 名: SarBF3Sat
* 	功能描述: 设置亮帧的色饱和度
* 	输    入: Bri   : 饱和度的值
* 	返    回: 无
********************************************************************************
*/
void SarBF3Sat(uint8 Sat)
{
	WrScalarReg(rP3C8, Sat);
}


/*
********************************************************************************
* 	函 数 名: SarGetSCRev
* 	功能描述: 获取SCALAR的IC版本号, 同时将其保存到全局变量SCRev当中
* 	输    入: 无
* 	返    回: 无
*   注    意: 版本号保留在全局变量SCRev当中
*				对于NT68167而言
*					BA版	SCRev = 0x1A	
********************************************************************************
*/
static void SarGetSCRev(void)
{
	SCRev = RdScalarReg(rP100);
}


/*
********************************************************************************
* 	函 数 名: SarFreeRun
* 	功能描述: 设置Scalar自由运行的频率
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void SarFreeRun(void)
{
	WrScalarWord(rP179, PanelTypHTotal);
	
//	AdcSetPll(PanelMaxHTotal);	//add chen 08-05-12
	
	//	这条函数调用一定是要加上的, 否则在没有同步信号开机的条件下
	//	显示会不正常, 而且OSD显示也不正常
	ulDotClk = (uint32)PanelFreeRunHfre * PanelMinHTotal;
	SarSetDPLL();
}



/*
================================================================================
=	下面是归一化设置的亮帧窗口的大小和位置
================================================================================
*/
uint16 code BfWin_All[] = {
	0x01,				//	Bright Frame Horizontal Start
	PanelWidth - 1,		//	Bright Frame Horizontal Width
	0x00,				//	Bright Frame Vertical Start
	PanelHeight			//	Bright Frame Vertical Height
};

uint16 code BfWin_Half_Left[] = {
	0x01,				//	Bright Frame Horizontal Start
	PanelWidth/2,		//	Bright Frame Horizontal Width
	0x00,				//	Bright Frame Vertical Start
	PanelHeight,		//	Bright Frame Vertical Height
};


uint16 code BfWin_Half_Right[] = {
	PanelWidth/2,		//	Bright Frame Horizontal Start
	PanelWidth/2 - 1,	//	Bright Frame Horizontal Width
	0x00,				//	Bright Frame Vertical Start
	PanelHeight,		//	Bright Frame Vertical Height
};

uint16 code BfWin_Half_Top[] = {
	0x01,				//	Bright Frame Horizontal Start
	PanelWidth - 2,		//	Bright Frame Horizontal Width
	0x00,				//	Bright Frame Vertical Start
	PanelHeight/2,		//	Bright Frame Vertical Height
};


uint16 code BfWin_Half_Bottom[] = {
	0x01,				//	Bright Frame Horizontal Start
	PanelWidth - 2,			//	Bright Frame Horizontal Width
	PanelHeight/2,		//	Bright Frame Vertical Start
	PanelHeight/2,		//	Bright Frame Vertical Height
};


uint16 code BfWin_Qtr_TLC[] = {
	0x01,				//	Bright Frame Horizontal Start
	PanelWidth/2,		//	Bright Frame Horizontal Width
	0x00,				//	Bright Frame Vertical Start
	PanelHeight/2,		//	Bright Frame Vertical Height
};


uint16 code BfWin_Qtr_TRC[] = {
	(PanelWidth-PanelWidth/2),		//	Bright Frame Horizontal Start
	PanelWidth/2 - 1,					//	Bright Frame Horizontal Width
	0x00,							//	Bright Frame Vertical Start
	PanelHeight/2,					//	Bright Frame Vertical Height
};


uint16 code BfWin_Qtr_BLC[] = {
	0x01,							//	Bright Frame Horizontal Start
	PanelWidth/2,					//	Bright Frame Horizontal Width
	(PanelHeight-PanelHeight/2),	//	Bright Frame Vertical Start
	PanelHeight/2,					//	Bright Frame Vertical Height
};


uint16 code BfWin_Qtr_BRC[] = {
	(PanelWidth-PanelWidth/2),		//	Bright Frame Horizontal Start
	PanelWidth/2 - 1,					//	Bright Frame Horizontal Width
	(PanelHeight-PanelHeight/2),	//	Bright Frame Vertical Start
	PanelHeight/2,					//	Bright Frame Vertical Height
};


uint16 code BfWin_Qtr_Center[] = {
	(PanelWidth-PanelWidth/2)/2,		//	Bright Frame Horizontal Start
	PanelWidth/2,						//	Bright Frame Horizontal Width
	(PanelHeight-PanelHeight/2)/2,		//	Bright Frame Vertical Start
	PanelHeight/2,						//	Bright Frame Vertical Height
};


uint16 code * code BfWin[] = {
	BfWin_Half_Left,	//BF_HALF_LEFT = 0x00,
	BfWin_Half_Right,	//BF_HALF_RIGHT,
	BfWin_Half_Top,		//BF_HALF_TOP,
	BfWin_Half_Bottom,	//BF_HALF_BOTTOM,
	BfWin_Qtr_TLC,		//BF_QTR_TLC,
	BfWin_Qtr_TRC,		//BF_QTR_TRC,
	BfWin_Qtr_BLC,		//BF_QTR_BLC,
	BfWin_Qtr_BRC,		//BF_QTR_BRC,
	BfWin_Qtr_Center,	//BF_QTR_CENTER,

⌨️ 快捷键说明

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