📄 scalar.c
字号:
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 + -