📄 scaler.c
字号:
if(GETSCALERSDIO3())
value |= 0x02;
CScalerSETSCLK();
if(GETSCALERSDIO3())
value |= 0x04;
CScalerCLRSCLK();
if(GETSCALERSDIO3())
value |= 0x08;
CScalerSETSCLK();
if(GETSCALERSDIO3())
value |= 0x10;
CScalerCLRSCLK();
if(GETSCALERSDIO3())
value |= 0x20;
CScalerSETSCLK();
if(GETSCALERSDIO3())
value |= 0x40;
CScalerCLRSCLK();
if(GETSCALERSDIO3())
value |= 0x80;
CScalerSETSCLK();
return value;
}
#else
BYTE CScalerGetByte(void)
{
BYTE value = 0;
CScalerCLRSCLK();
if(GETSCALERSDIO3())
value |= 0x01;
CScalerSETSCLK();
if(GETSCALERSDIO3())
value |= 0x02;
CScalerCLRSCLK();
if(GETSCALERSDIO3())
value |= 0x04;
CScalerSETSCLK();
if(GETSCALERSDIO3())
value |= 0x08;
CScalerCLRSCLK();
if(GETSCALERSDIO3())
value |= 0x10;
CScalerSETSCLK();
if(GETSCALERSDIO3())
value |= 0x20;
CScalerCLRSCLK();
if(GETSCALERSDIO3())
value |= 0x40;
CScalerSETSCLK();
if(GETSCALERSDIO3())
value |= 0x80;
return value;
}
#endif
#endif // End of #if(_MCU_TYPE != _REALTEK_EMBEDDED)
#if(_MCU_TYPE == _REALTEK_EMBEDDED)
void CScalerSendAddr(BYTE ucAddr,bit bAutoInc)
{
if(bAutoInc)
*(&MCU_SCA_INF_CTRL_FFF3) |= 0x20;//Anderson 080310
else
*(&MCU_SCA_INF_CTRL_FFF3) &= 0xDF;//Anderson 080310
MCU_SCA_INF_ADDR_FFF4 = ucAddr;
}
void CScalerSendByte(BYTE ucValue)
{
MCU_SCA_INF_DATA_FFF5 = ucValue;
}
#endif // End of #if(_MCU_TYPE == _REALTEK_EMBEDDED)
//--------------------------------------------------
// Description : Write a data array into registers of scaler
// Input Value : ucAddr --> Start address of register
// ucLength --> Numbers of data we want to write
// pArray --> Pointer of the writing data array
// bAutoInc --> Address auto increasing select
// Output Value : None
//--------------------------------------------------
void CScalerWrite(BYTE ucAddr, WORD usLength, BYTE *pArray, bit bAutoInc)
{
#if(_MCU_TYPE == _REALTEK_EMBEDDED)
if(usLength > 0)
{
CScalerSendAddr(ucAddr, bAutoInc);
do
{
CScalerSendByte(*pArray++);
}while(--usLength);
}
#else
if(usLength > 0)
{
if(GET_INPUTSOURCE_TYPE() != _SOURCE_VGA)
{
//1231 sephinroth
CScalerSendAddr(0x9F, _WRITE, 0);
CScalerSendByte(ucTest);
CScalerSendWriteStop();
}
CScalerSendAddr(ucAddr, _WRITE, bAutoInc);
do
{
CScalerSendByte(*pArray++);
}while(--usLength);
CScalerSendWriteStop();
if(GET_INPUTSOURCE_TYPE() != _SOURCE_VGA)
{
//1231 sephinroth
CScalerSendAddr(0x9F, _READ, 0);
ucTest = CScalerGetByte1();
CScalerSendReadStop();
CScalerSendAddr(0x9F, _WRITE, 0);
CScalerSendByte(0x0D);
CScalerSendWriteStop();
CScalerSendAddr(0xBC, _WRITE, 0);
CScalerSendByte(0xCA);
SETSCALERSDIO3(_HIGH);
SETSCALERSDIO3(_LOW);
SETSCALERSDIO3(_HIGH);
}
}
#endif
}
//--------------------------------------------------
// Description : Read data from registers of scaler and put it into an reading data array
// Input Value : ucAddr --> Start address of register
// ucLength --> Numbers of data we want to read
// pArray --> Pointer of the reading data array
// bAutoInc --> Address auto increasing select
// Output Value : None
//--------------------------------------------------
void CScalerRead(BYTE ucAddr, BYTE ucLength, BYTE *pArray, bit bAutoInc)
{
BYTE odd = 0;
#if(_MCU_TYPE == _REALTEK_EMBEDDED)
if(bAutoInc)
*(&MCU_SCA_INF_CTRL_FFF3) |= 0x20;//Anderson 080310
else
*(&MCU_SCA_INF_CTRL_FFF3) &= 0xDF;//Anderson 080310
if(ucLength > 0)
{
*(&MCU_SCA_INF_ADDR_FFF4) = ucAddr;
do
{
*pArray++ = *(&MCU_SCA_INF_DATA_FFF5);
}while(--ucLength);
}
#else
if(ucLength > 0)
{
if(GET_INPUTSOURCE_TYPE() != _SOURCE_VGA)
{
//1231 sephinroth
CScalerSendAddr(0x9F, _WRITE, 0);
CScalerSendByte(ucTest);
CScalerSendWriteStop();
}
CScalerSendAddr(ucAddr, _READ, bAutoInc);
do
{
#if(_SCALER_TYPE == _RTD2545LR)
*pArray++ = (odd==0) ? CScalerGetByte1() : CScalerGetByte2();
odd = odd ^ 0x01;
#else
*pArray++ = CScalerGetByte();
#endif
}while(--ucLength);
CScalerSendReadStop();
if(GET_INPUTSOURCE_TYPE() != _SOURCE_VGA)
{
//1231 sephinroth
CScalerSendAddr(0x9F, _READ, 0);
ucTest = CScalerGetByte1();
CScalerSendReadStop();
CScalerSendAddr(0x9F, _WRITE, 0);
CScalerSendByte(0x0D);
CScalerSendWriteStop();
CScalerSendAddr(0xBC, _WRITE, 0);
CScalerSendByte(0xCA);
SETSCALERSDIO3(_HIGH);
SETSCALERSDIO3(_LOW);
SETSCALERSDIO3(_HIGH);
}
}
#endif
}
//--------------------------------------------------
// Description : Write a data array into registers of scaler
// Input Value : ucAddr --> Start address of register
// ucLength --> Numbers of data we want to write
// pValue --> Value we want to write
// bAutoInc --> Address auto increasing select
// Output Value : None
//--------------------------------------------------
void CScalerWriteAmount(BYTE ucAddr, WORD usLength, BYTE ucValue, bit bAutoInc)
{
#if(_MCU_TYPE == _REALTEK_EMBEDDED)
if(bAutoInc)
*(&MCU_SCA_INF_CTRL_FFF3) |= 0x20;//Anderson 080310
else
*(&MCU_SCA_INF_CTRL_FFF3) &= 0xDF;//Anderson 080310
if(usLength > 0)
{
*(&MCU_SCA_INF_ADDR_FFF4) = ucAddr;
do
{
*(&MCU_SCA_INF_DATA_FFF5) = ucValue;
}while(--usLength);
}
#else
if(usLength > 0)
{
CScalerSendAddr(ucAddr, _WRITE, bAutoInc);
do
{
CScalerSendByte(ucValue);
}while(--usLength);
CScalerSendWriteStop();
}
#endif
}
//--------------------------------------------------
// Description : Set the value into selected register
// Input Value : ucAddr --> Address of register
// ucValue --> Value we want to set
// Output Value : None
//--------------------------------------------------
void CScalerSetByte(BYTE ucAddr, BYTE ucValue)
{
CScalerWrite(ucAddr, 1, &ucValue, _AUTOINC);
}
//--------------------------------------------------
// Description : Set the value into selected register in data port
// Input Value : ucAddr --> Access Port Address of register
// ucValue1 --> Data Port Value we want to set
// ucValue2 --> Data Value we want to set
// Output Value : None
//--------------------------------------------------
void CScalerSetDataPortByte(BYTE ucAddr, BYTE ucValue1, BYTE ucValue2)
{
if((ucAddr == _SU_ACCESS_PORT_33) || (ucAddr == _HW_ACCESS_PORT_60)
|| (ucAddr == _CB_ACCESS_PORT_64) || (ucAddr == _PC_ACCESS_PORT_9A))
{
CScalerSetByte(ucAddr, 0x80);
ucValue1 = ucValue1 | 0x80;
}
CScalerWrite(ucAddr, 1, &ucValue1, _AUTOINC);
CScalerWrite(ucAddr + 1, 1, &ucValue2, _AUTOINC);
CScalerSetByte(ucAddr, 0x00);
}
//--------------------------------------------------
// Description : Get bytes from selected register in data port
// Input Value : ucAddr --> Access Port Address of register
// ucValue --> Data Port Address we want to Get
// ucLength --> Numbers of data we want to read
// pArray --> Pointer of the reading data array
// bAutoInc --> Address auto increasing select
// Output Value : None
//--------------------------------------------------
void CScalerGetDataPortByte(BYTE ucAddr, BYTE ucValue, BYTE ucLength, BYTE *pArray, bit bAutoInc)
{
if(ucLength > 0)
{
if((ucAddr == _SU_ACCESS_PORT_33) || (ucAddr == _HW_ACCESS_PORT_60)
|| (ucAddr == _CB_ACCESS_PORT_64) || (ucAddr == _PC_ACCESS_PORT_9A))
{
CScalerSetByte(ucAddr, 0x80);
ucValue = ucValue | 0x80;
}
CScalerSetByte(ucAddr, ucValue);
CScalerRead(ucAddr + 1, ucLength, pArray, bAutoInc);
}
}
//--------------------------------------------------
// Description : Set some bits of selected register
// Input Value : ucAddr --> Address of register
// ucAnd --> & operation
// ucOr --> | operation
// Output Value : None
//--------------------------------------------------
void CScalerSetBit(BYTE ucAddr, BYTE ucAnd, BYTE ucOr)
{
BYTE value;
CScalerRead(ucAddr, 1, &value, _AUTOINC);
value = (value & ucAnd) | ucOr;
CScalerWrite(ucAddr, 1, &value, _AUTOINC);
}
//--------------------------------------------------
// Description : Set some bits of selected register in data port
// Input Value : ucAddr --> Access Port Address of register
// ucValue --> Data Port Value we want to set
// ucAnd --> & operation
// ucOr --> | operation
// Output Value : None
//--------------------------------------------------
void CScalerSetDataPortBit(BYTE ucAddr, BYTE ucValue, BYTE ucAnd, BYTE ucOr)
{
BYTE value;
if((ucAddr == _SU_ACCESS_PORT_33) || (ucAddr == _HW_ACCESS_PORT_60)
|| (ucAddr == _CB_ACCESS_PORT_64) || (ucAddr == _PC_ACCESS_PORT_9A))
{
CScalerSetByte(ucAddr, 0x80);
ucValue = ucValue | 0x80;
}
CScalerWrite(ucAddr, 1, &ucValue, _AUTOINC);
CScalerRead(ucAddr + 1, 1, &value, _AUTOINC);
value = (value & ucAnd) | ucOr;
if((ucAddr == _SU_ACCESS_PORT_33) || (ucAddr == _HW_ACCESS_PORT_60)
|| (ucAddr == _CB_ACCESS_PORT_64) || (ucAddr == _PC_ACCESS_PORT_9A))
{
CScalerSetByte(ucAddr, 0x80);
ucValue = ucValue | 0x80;
}
CScalerWrite(ucAddr, 1, &ucValue, _AUTOINC);
CScalerWrite(ucAddr + 1, 1, &value, _AUTOINC);
CScalerSetByte(ucAddr, 0x00);
}
//--------------------------------------------------
// Description : Get bits from selected register
// Input Value : ucAddr --> Address of register
// ucAnd --> & operation
// Output Value : Value after & operation
//--------------------------------------------------
BYTE CScalerGetBit(BYTE ucAddr, BYTE ucAnd)
{
BYTE value;
CScalerRead(ucAddr, 1, &value, _AUTOINC);
return (value & ucAnd);
}
/*
#if(_ADC_OFFSET_ADJUSTING == _ADJUST_BY_HW_OFF_LINE)
//--------------------------------------------------
// Description : Get bits from selected register in data port
// Input Value : ucAddr --> Access Port Address of register
// ucValue --> Data Port Value we want to set
// ucAnd --> & operation
// Output Value : Value after & operation
//--------------------------------------------------
BYTE CScalerGetDataPortBit(BYTE ucAddr, BYTE ucValue, BYTE ucAnd)
{
BYTE value;
if((ucAddr == _SU_ACCESS_PORT_33) || (ucAddr == _HW_ACCESS_PORT_60)
|| (ucAddr == _CB_ACCESS_PORT_64) || (ucAddr == _PC_ACCESS_PORT_9A))
{
CScalerSetByte(ucAddr, 0x80);
ucValue = ucValue | 0x80;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -