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

📄 scaler.c

📁 realtek LCD monitor, TV开发源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    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 + -