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

📄 hw_tvout.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*   Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  hw_Tvout.c
Desc :  Tvout寄存器初始化

Author :  nzy
Date :
Notes :

$Log :
*********************************************************************/
#include "hw_include.h"



UINT8 RegAddrAdj[6] = {0x22, 0x23, 0x20, 0x21, 0x1f, 0x1e};

/************************************/
UINT8 RegAddrFirst[12] =  {0x04, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
                           0x0f, 0x34, 0x35, 0x36, 0x37, 0x63
                          };

UINT8 DataFirst[3][12] = {{0x08, 0x13, CH7024_XTALSEL, 0x00, 0x02, 0x0c,
        0x00, 0x01, 0x5e, 0x05, 0x3b, CH7024_TERMINATION}, //PAL50
    {0x08, 0x17, CH7024_XTALSEL, 0x00, 0x02, 0x0c,
     0x00, 0x01, 0x5e, 0x05, 0x3b, CH7024_TERMINATION},//PAL60
    {0x08, 0x10, CH7024_XTALSEL, 0x00, 0x02, 0x0c,
     0x00, 0x01, 0x19, 0xf5, 0x8d, CH7024_TERMINATION}
};//NTSCM
/************************************/

/************************************/
UINT8 RegAddr[22]   = {0x11, 0x12, 0x13, 0x17, 0x18, 0x19, 0x1c, 0x28,
                       0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x30, 0x31,
                       0x1e, 0x1f, 0x23, 0x22, 0x21, 0x20
                      };


/*---Video 640x480---*/
/**************************PAL50*****/
UINT8 DataPV[3][22] = {{0x12, 0x80, 0xfd, 0x09, 0x90, 0x0b, 0x90, 0x1b,
        0x99, 0x00, 0x41, 0xeb, 0x00, 0x2f, 0x1b, 0x12,
        0x05, 0x76, 0x7d, 0x00, 0x80, 0x00},//Large
    {0x12, 0x80, 0xc4, 0x09, 0xe0, 0x35, 0x90, 0x1b,
     0x03, 0x00, 0x41, 0xeb, 0x00, 0x2f, 0x1b, 0x12,
     0x04, 0xf8, 0x7b, 0x02, 0x80, 0x00},//Middle
    {0x12, 0x80, 0x92, 0x09, 0xe0, 0x60, 0x90, 0x1b,
     0x5b, 0x00, 0x41, 0xeb, 0x00, 0x2f, 0x1b, 0x12,
     0x04, 0xa3, 0x7c, 0x03, 0x7d, 0x02}
};//Small
/************************************/

/*********************PAL60+NTSCM*****/
UINT8 DataNV[3][22] = {{0x12, 0x80, 0xf5, 0x09, 0xe0, 0x11, 0x90, 0x31,
        0x4a, 0x80, 0x36, 0xfc, 0x90, 0x38, 0x1b, 0x12,
        0x05, 0x50, 0x7e, 0x01, 0x80, 0x00},//Large
    {0x12, 0x80, 0xc6, 0x09, 0xe0, 0x34, 0x90, 0x31,
     0x30, 0x80, 0x36, 0xfc, 0x90, 0x38, 0x1b, 0x12,
     0x04, 0xf2, 0x7e, 0x01, 0x7f, 0x00},//Middle
    {0x12, 0x80, 0x97, 0x09, 0xe0, 0x5c, 0x90, 0x31,
     0x48, 0x80, 0x36, 0xfc, 0x90, 0x38, 0x1b, 0x12,
     0x04, 0xaa, 0x7e, 0x02, 0x7d, 0x01}
};//Small
/************************************/



/*---UI---*/
#if(TVOUTID == TVOUT_480X272)
/*480X272---Middle*/
UINT8 DataUI[2][22] = {{0x11, 0xe0, 0x2a, 0x05, 0x10, 0x45, 0x90, 0x05,
        0xe2, 0x40, 0x10, 0x7a, 0xc0, 0x55, 0x09, 0x14,
        0x05, 0x0b, 0x7c, 0x02, 0x80, 0x03},//PALL50
    {0x11, 0xe0, 0x6a, 0x05, 0x10, 0x44, 0x90, 0x18,
     0xb0, 0x40, 0x1b, 0x7e, 0x48, 0x38, 0x12, 0x13,
     0x05, 0x0b, 0x7f, 0x01, 0x80, 0x00}
};//NTSCM+PAL60
#endif
/************************************/

#if(TVOUTID == TVOUT_400X240)
/*400X240---Middle*/
UINT8 DataUI[2][22] = {{0x11, 0x90, 0x24, 0x04, 0xf0, 0x24, 0x90, 0x0e,
        0x29, 0xc0, 0x10, 0x7a, 0xc0, 0x4b, 0x09, 0x14,
        0x05, 0x0b, 0x7d, 0x01, 0x81, 0x01},//PALL50
    {0x11, 0x90, 0x0f, 0x04, 0xf0, 0x1d, 0x90, 0x04,
     0xef, 0x0c, 0x0d, 0xbf, 0x24, 0x55, 0x09, 0x14,
     0x05, 0x0b, 0x80, 0x00, 0x7f, 0x00}
};//NTSCM+PAL60
#endif
/************************************/

#if(TVOUTID == TVOUT_320X240)
/*320X240---Middle*/
UINT8 DataUI[2][22] = {{0x09, 0x40, 0xe8, 0x04, 0xf0, 0x1f, 0x90, 0x06,
        0x8a, 0x80, 0x10, 0x7a, 0xc0, 0x42, 0x09, 0x14,
        0x05, 0x0e, 0x7c, 0x12, 0x80, 0x00},//PALL50
    {0x09, 0x40, 0xd6, 0x04, 0xf0, 0x1c, 0x90, 0x0b,
     0xd0, 0x74, 0x0d, 0xbf, 0x24, 0x4b, 0x09, 0x14,
     0x05, 0x12, 0x80, 0x01, 0x80, 0x00}
};//NTSCM+PAL60
#endif
/************************************/


/*---------------------------------------------------------
Name  :  Tvout_Read
Desc  :
Params:
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void Tvout_Read(UINT8 RegAddr, UINT8 *pData)
{
    I2C_Init(TVOUT_IICAdr, TVOUT_IICSpd);
    I2C_Read(RegAddr, pData, 1, NormalMode);
    I2C_Deinit();
}


/*---------------------------------------------------------
Name  :  Tvout_Write
Desc  :
Params:
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void Tvout_Write(UINT8 RegAddr, UINT8 *pData)
{
    I2C_Init(TVOUT_IICAdr, TVOUT_IICSpd);
    I2C_Write(RegAddr, pData, 1, NormalMode);
    I2C_Deinit();
}


/*---------------------------------------------------------
Name  :  Tvout_Configure
Desc  :  TVOUT驱动芯片CH7024配置
Params:  TvoutType -> 视频或系统UI
         TvoutSize -> TVOUT显示大小
         TvoutMode -> TVOUT显示制式
         TvoutSwit -> TVOUT切换模式
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void Tvout_Configure(TVOUTPARA *pTVoutPara)
{
    UINT8 i;
    UINT8 *pData, *pUIData, *pVideoData;
    TVOUTTYPE TvoutType = pTVoutPara->Type;
    TVOUTSIZE TvoutSize = pTVoutPara->Size;
    TVOUTMODE TvoutMode = pTVoutPara->Mode;
    TVOUTSWIT TvoutSwit = pTVoutPara->Switch;

    pVideoData = (TvoutMode == TV_PAL50) ? (&DataPV[TvoutSize][0]) : (&DataNV[TvoutSize][0]);
    pUIData = (TvoutMode == TV_PAL50) ? (&DataUI[0][0]) : (&DataUI[1][0]);
    pData = (TvoutType == TV_VEDIO) ? pVideoData : pUIData;
    DataFirst[TvoutMode][1] = (TvoutSwit == LCD_TVOUT) ? (DataFirst[TvoutMode][1] & 0x0f) : (DataFirst[TvoutMode][1] | 0x10);

    for (i = 0; i < 12; i++)
    {
        Tvout_Write(RegAddrFirst[i], &DataFirst[TvoutMode][i]);
    }

    for (i = 0; i < 22; i++, pData++)
    {
        Tvout_Write(RegAddr[i], pData);
    }
}


/*---------------------------------------------------------
Name  :  Tvout_SizeSet
Desc  :  TVOUT驱动芯片CH7024输出画面大小设置
Params:  TvoutSize -> TVOUT显示大小
         TvoutMode -> TVOUT显示制式
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void Tvout_SizeSet(TVOUTPARA *pTVoutPara)
{
    UINT8 i;
    UINT8 *pVideoData;
    TVOUTSIZE TvoutSize = pTVoutPara->Size;
    TVOUTMODE TvoutMode = pTVoutPara->Mode;

    pVideoData = (TvoutMode == TV_PAL50) ? (&DataPV[TvoutSize][0]) : (&DataNV[TvoutSize][0]);

    for (i = 0; i < 22; i++, pVideoData++)
    {
        Tvout_Write(RegAddr[i], pVideoData);
    }
}


/*---------------------------------------------------------
Name  :  Tvout_PostAdjust
Desc  :  TV图像移动
Params:  Shife -> 位置移动方向
         Par   -> 位置移动值
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void Tvout_PostAdjust(TVOUTSHIFE Shife, UINT16 Par)
{
    COORDINATIE HighID, LowID;
    UINT8 HighTemp = 0, LowTemp = 0;
    UINT16 Temp;

    if ((Shife == TV_Right) || (Shife == TV_Left))
    {
        HighID = TV_HorPHID;
        LowID  = TV_HorPLID;
    }
    else
    {
        HighID = TV_VerPHID;
        LowID  = TV_VerPLID;
    }

    Tvout_Read(RegAddrAdj[HighID], &HighTemp);
    Tvout_Read(RegAddrAdj[LowID], &LowTemp);

    Temp = (((UINT16)HighTemp << 2) & 0xfffc) + ((UINT16)LowTemp & 0x0003);

    if ((Shife == TV_Right) || (Shife == TV_Up))
        Temp = (0x3ff - Temp < Par) ? 0x3ff : (Temp + Par);
    else
        Temp = (Temp < Par) ? 0x00 : (Temp - Par);

    HighTemp = (UINT8)(Temp >> 2);
    LowTemp  = (UINT8)(Temp & 0x0003);

    Tvout_Write(RegAddrAdj[HighID], &HighTemp);
    Tvout_Write(RegAddrAdj[LowID], &LowTemp);
}


/*---------------------------------------------------------
Name  :  Tvout_ScalAdjust
Desc  :  TV水平位置的缩放
Params:  Zoom -> 缩小活放大
         Par  -> 缩放值
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void Tvout_ScalAdjust(TVOUTZOOM Zoom, UINT8 Par)
{
    UINT8  HighTemp, LowTemp;
    UINT16 Temp;

    Tvout_Read(RegAddrAdj[TV_HORSHID], &HighTemp);
    Tvout_Read(RegAddrAdj[TV_HORSLID], &LowTemp);

    Temp = (UINT16)LowTemp + (((UINT16)HighTemp & 0x0007) << 8);

    if (Zoom == TV_HorZoomIn)
        Temp = (0x7ff - Temp < Par) ? 0x7ff : (Temp + Par);
    else
        Temp = (Temp < Par) ? 0x00 : (Temp - Par);

    HighTemp = (UINT8)((Temp >> 8) & 0x07);
    LowTemp  = (UINT8)(Temp & 0x00ff);

    Tvout_Write(RegAddrAdj[TV_HORSHID], &HighTemp);
    Tvout_Write(RegAddrAdj[TV_HORSLID], &LowTemp);
}


/*---------------------------------------------------------
Name  :  Tvout_SetStatus
Desc  :  设置TV驱动芯片输出状态
Params:  TvoutStatus -> 使能CH7024电源输出
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void Tvout_SetStatus(TVOUTSTATUS TvoutStatus)
{
    UINT8 Data;

    Data = (TvoutStatus == TV_Standby) ? 0x0d : 0x08;

    I2C_Init(TVOUT_IICAdr, TVOUT_IICSpd);
    I2C_Write(0x04, &Data,  1, NormalMode);
    I2C_Deinit();
}


/*---------------------------------------------------------
Name  :  Tvout_Display
Desc  :  设置TV输出
Params:  TvoutMode -> TVOUT显示制式
         DisStatus -> TVOUT转换DAC0输出使能
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void Tvout_Display(TVOUTDISP DisStatus, TVOUTMODE TvoutMode)
{
    UINT8 Data;

    Data = (DisStatus == TV_ON) ? 0x10 : 0x00;

    switch (TvoutMode)
    {
        case TV_PAL50:
            Data |= 0x03;
            break;
        case TV_PAL60:
            Data |= 0x07;
            break;
        case TV_NTSCM:
            Data |= 0x00;
            break;
        default:
            break;
    }
    I2C_Init(TVOUT_IICAdr, TVOUT_IICSpd);
    I2C_Write(0x0a, &Data,  1, NormalMode);
    I2C_Deinit();
}


/*---------------------------------------------------------
Name  :  Tvout_SetTest
Desc  :  设置TV驱动芯片测试状态
Params:  TvoutStatus -> 打开或关闭CH7024测试模式
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void Tvout_SetTest(TVOUTSTATUS TvoutStatus)
{
    UINT8 Data1 = 0x01, Data2, Data3 = 0x00;

    Data2 = (TvoutStatus == TV_Test) ? 0x40 : 0x00;

    I2C_Init(TVOUT_IICAdr, TVOUT_IICSpd);
    I2C_Write(0x02, &Data1,  1, NormalMode);
    I2C_Write(0x04, &Data2,  1, NormalMode);
    I2C_Write(0x02, &Data3,  1, NormalMode);
    I2C_Deinit();
}


⌨️ 快捷键说明

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