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

📄 proviewdtv_tda9975.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
    buffer[1] = 0x00;

    /*clkout_tog:1 bit*/
    buffer[1] &= 0x7F;

    /*clkout_sel:3 bits*/
    if(videoin == VIDEO_INPUT_AVI1
    || videoin == VIDEO_INPUT_AVI2
    || videoin == VIDEO_INPUT_AVI3)
    {
        /*analog in*/

        /*AVI CLKOUT*/
        buffer[1] |= (0x04 << 4);
    }
    else
    {
        /*HDMI IN*/
        if(outformat == YUV_444_FORMAT
        || outformat == YUV_422_SEMIPLANAR_FORMAT)
        {
            /*HDMI clock*/
            buffer[1] |= (0x02 << 4);
        }
        else
        {
            /*HDMI clock * 2*/
            buffer[1] |= (0x03 << 4);
        }
    }

    /*clkfor_sel:2bits*/
    if(outformat == YUV_422_CCIR656_FORMAT)
    {
        if(videoin == VIDEO_INPUT_AVI1
        || videoin == VIDEO_INPUT_AVI2
        || videoin == VIDEO_INPUT_AVI3)
        {
            buffer[1] |= (0x01 << 2);
        }
        else
        {
            buffer[1] |= (0x02 << 2);
        }
    }
    else
    {
        buffer[1] |= (0x03 << 2);
    }

    /*clkpix_sel:2bits*/
    if(videoin == VIDEO_INPUT_AVI1
    || videoin == VIDEO_INPUT_AVI2
    || videoin == VIDEO_INPUT_AVI3)
    {
        buffer[1] |= 0x02;
    }
    else
    {
        buffer[1] |= 0x03;
    }

    TDA9975_AVIPage();

    I2C_Write_TDA9975(buffer, 2);
}


void TDA9975_AVIClockGenerator(int in,
                               E_TDA9975_OUT_FORAMT out)
{
    unsigned char buffer[2];

    if(in >= VIDEO_INPUT_INVALID)
    {
        return;
    }

    if(out >= TDA9975_OUT_FORAMT_BUTT)
    {
        return;
    }

    TDA9975_AVIPage();

    buffer[0] = 0x11;
    if(in == VIDEO_INPUT_480I60
    || in == VIDEO_INPUT_576I50)
    {
        buffer[1] = 0xc3;
    }
    else
    {
        buffer[0] = 0x83;
    }
    I2C_Write_TDA9975(buffer, 2);

    buffer[0] = 0x14; buffer[1] = 0x00;
    I2C_Write_TDA9975(buffer, 2);

    buffer[0] = 0x15; buffer[1] = 0x00;
    I2C_Write_TDA9975(buffer, 2);

    buffer[0] = 0x16;
    if(out == YUV_444_FORMAT
    || out == YUV_422_SEMIPLANAR_FORMAT)
    {
        buffer[1] = 0x48;
    }
    else
    {
        buffer[1] = 0x28;
    }
    I2C_Write_TDA9975(buffer, 2);


}

void IDA9975_VideoVHREF(unsigned int videoin)
{
    unsigned char buffer[2];
    int i;

    if(videoin >= VIDEO_INPUT_INVALID)
    {
        return;
    }

    TDA9975_AVIPage();

    buffer[0] = 0xAA; buffer[1] = TDA9975_VIDEOVHREF[videoin][0];
    //I2C_Write_TDA9975(buffer, 2);
    buffer[0] = 0xAB; buffer[1] = TDA9975_VIDEOVHREF[videoin][1];
    //I2C_Write_TDA9975(buffer, 2);
    buffer[0] = 0xAC; buffer[1] = TDA9975_VIDEOVHREF[videoin][2];
    //I2C_Write_TDA9975(buffer, 2);

    switch(videoin)
    {
    case VIDEO_INPUT_480I60:
        for(i = 0; ; i++)
        {
            buffer[0] = TDA9975_480IVHREF[i][0];
            buffer[1] = TDA9975_480IVHREF[i][1];
            if(buffer[0] == 0xff && buffer[1] == 0xff)
            {
                break;
            }
            I2C_Write_TDA9975(buffer, 2);
        }
        break;
    case VIDEO_INPUT_480P60:
        for(i = 0; ; i++)
        {
            buffer[0] = TDA9975_480PVHREF[i][0];
            buffer[1] = TDA9975_480PVHREF[i][1];
            if(buffer[0] == 0xff && buffer[1] == 0xff)
            {
                break;
            }
            I2C_Write_TDA9975(buffer, 2);
        }
        break;
    case VIDEO_INPUT_720P60:
        for(i = 0; ; i++)
        {
            buffer[0] = TDA9975_720PVHREF[i][0];
            buffer[1] = TDA9975_720PVHREF[i][1];
            if(buffer[0] == 0xff && buffer[1] == 0xff)
            {
                break;
            }
            I2C_Write_TDA9975(buffer, 2);
        }
        break;
    case VIDEO_INPUT_1080I60:
        for(i = 0; ; i++)
        {
            buffer[0] = TDA9975_1080IVHREF[i][0];
            buffer[1] = TDA9975_1080IVHREF[i][1];
            if(buffer[0] == 0xff && buffer[1] == 0xff)
            {
                break;
            }
            I2C_Write_TDA9975(buffer, 2);
        }
        break;
    default:
        break;
    }
}

void TDA9975_ColorSpaceConvertByPass(void)
{
    unsigned char buffer[2];

    TDA9975_AVIPage();

    buffer[0] = 0x80;                       /* Subaddress of HDMI_SOFT_RST */
    buffer[1] = 0x06;                       /* Bypass Color conversion */
    I2C_Write_TDA9975(buffer, 2) ;
}

void TDA9975_ColorSpaceConvert(unsigned int in,
                               unsigned int YCbCr)
{
    unsigned char buffer[2];
    unsigned char (*ppdata)[2];
    int i = 0;

    if(YCbCr == TDA9975_HDMI_IN_YCbCr
    || in >= VIDEO_INPUT_INVALID)
    {
        TDA9975_ColorSpaceConvertByPass();
        return;
    }

    if(in == VIDEO_INPUT_VGA60)
    {
        ppdata = (unsigned char(*)[2])TDA9975_FULLRGBITU601Data;
    }
    else if(in == VIDEO_INPUT_480P60
         || in == VIDEO_INPUT_480I60
         || in == VIDEO_INPUT_576P50
         || in == VIDEO_INPUT_576I50)
    {
        ppdata = (unsigned char(*)[2])TDA9975_LIMITEDRGBITU601Data;
    }
    else
    {
        ppdata = (unsigned char(*)[2])TDA9975_LIMITEDRGBITU709Data;
    }

    TDA9975_AVIPage();
    for( i = 0; ; i++)
    {
        buffer[0] = ppdata[i][0];               /* Subaddress of MAT register */
        buffer[1] = ppdata[i][1];
        if(buffer[0] == 0xFF && buffer[1] == 0xFF)
        {
            break;
        }
        I2C_Write_TDA9975(buffer, 2);
    }
}

void TDA9975_DownSampling(int out)
{
    unsigned char buffer[2];

    TDA9975_AVIPage();

    buffer[0] = 0xE6;                           /* Subaddress of UPDOWN_CTRL */
    if(TDA9975_HDMICheck444Or422())
    {                                           /* YCbCr 4:2:2 pixel encoding */
        buffer[1] = 0x00;                       /* Bypass */
    }
    else
    {                                           /* 4:4:4 pixel encoding */
        if(out == YUV_444_FORMAT)
        {
            buffer[1] = 0x00;
        }
        else if(out == YUV_422_SEMIPLANAR_FORMAT)
        {
            buffer[1] = 0x04;                   /* down sample by 2*/
        }
        else
        {
            buffer[1] = 0x08;                   /* down sample by 4*/
        }
    }

    I2C_Write_TDA9975(buffer, 2);
}

void TDA9975_HDMIAudio(void)
{
    unsigned char buffer[2];

    TDA9975_HDMIPage();

    buffer[0] = 0xF8;                           // Subaddress of HDMI_INFO_RST
    buffer[1] = 0x01;                           // Reset audio FIFO
    I2C_Write_TDA9975(buffer, 2);

    buffer[0] = 0xF8;                           // Subaddress of HDMI_INFO_RST
    buffer[1] = 0x00;                           // Activate audio FIFO
    I2C_Write_TDA9975(buffer, 2);

    buffer[0] = 0x03;                           // Subaddress of AUDIO_FORM
    buffer[1] = 0x1C;                           // I2S, AP[3:1] low, WS and AP0 and ACLK active
    I2C_Write_TDA9975(buffer, 2);
}

void TDA9975_DVIAudio(void)
{
    unsigned char buffer[2];

    TDA9975_HDMIPage();

    buffer[0] = 0x03;                           // Subaddress of AUDIO_FORM
    buffer[1] = 0x3f;                           // I2S, WS, AP3, AP2, AP1, AP0, ACLK low
    I2C_Write_TDA9975(buffer, 2);
}

void TDA9975_HDMIProcess(void)
{
    unsigned char buffer[2];
    unsigned char pixel_repeat;

    TDA9975_HDMIPage();

    buffer[0] = 0x00;                           /* Subaddress of HDMI_CTRL */
    buffer[1] = 0x00;
    I2C_Write_TDA9975(buffer, 2);

    buffer[0] = 0xF8;                           /* Subaddress of HDMI_INFO_RST */
    buffer[1] = 0x07;                           /* Reset Advanced Info, InfoFrames and audio FIFO */
    I2C_Write_TDA9975(buffer, 2);

    buffer[0] = 0xF8;                           /* Subaddress of HDMI_INFO_RST */
    buffer[1] = 0x01;                           /* Release Advanced Info and InfoFrames */
    I2C_Write_TDA9975(buffer, 2);

    TDA9975_Delay(60);

    TDA9975_AVIPage();

    buffer[0] = 0x0F;                           /* Subaddress of VAI_FLAGS2 */
    buffer[1] = 0x0A;                           /* Enable AVI an AUD infoframe update and mask other packets update */
    I2C_Write_TDA9975(buffer, 2) ;

    pixel_repeat = TDA9975_HDMICheckPixelRepeat();
    TDA9975_HDMIPage();
    buffer[0] = 0x04;                           /* Subaddress of PIX_REPEAT */
    buffer[1] = 0x80 + pixel_repeat;
    I2C_Write_TDA9975(buffer, 2);

}

void TDA9975_DVIProcess(void)
{
    /*Write DVI register*/
    unsigned char DVI_Mode_Buffer[2];

    TDA9975_HDMIPage();

    DVI_Mode_Buffer[0] = 0x03;                  /* Subaddress of AUDIO_FORM */
    DVI_Mode_Buffer[1] = 0x3f;                  /* I2S, WS, AP3, AP2, AP1, AP0, ACLK low */
    I2C_Write_TDA9975(DVI_Mode_Buffer, 2);

    DVI_Mode_Buffer[0] = 0x00;                  /* Subaddress of HDMI_CTRL */
    DVI_Mode_Buffer[1] = 0x40;                  /* Force AVmute to zero */
    I2C_Write_TDA9975(DVI_Mode_Buffer, 2);

    DVI_Mode_Buffer[0] = 0x04;                  /* Subad

⌨️ 快捷键说明

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