AM3517 WINCE7 Camera Driver --TVP5150 配置

TVP5150am1输入:制式:PAL(BGHIN)ITU-RBT601 interlaced扫描  CVBS(composite)  AIP1A输入  

                     输出:8bit ITU-R BT656 embeded sync output


一:TVP5150简单介绍

支持输入:两路CVBS 或 一路SVIDEO

支持输入格式:PAL   NTSC    SECAM

输出格式:内嵌同步:8bit ITU-RBT656 和8bit 4:2:2 YCbCr     分离同步:8bit 4:2:2YCbCr

注:5150和5146的差别还是挺大


二:TVP5150寄存器配置

1.datasheet参考如下

AM3517 WINCE7 Camera Driver --TVP5150 配置_第1张图片 

从上面可见CVBS输入只需要设置0x03寄存器即可,确实,最后我也只设置了这一个寄存器,其他都是default

寄存器对照datasheet详细的看了一番,下面简单介绍下几个重要的寄存器

1.0x01:选择CVBS 还是SVIDEO输入,选择1口还是2口输入

2.0x03:最重要的寄存器,设置输出口Y0-Y7输出,始终输出,不然后端没有视频数据输出

3.0x04和0x28:配合选择制式的,但是5150比5146先进就是可以auto选择制式格式,这里只要default就自动选择了

4.0x0d:设置输出格式的


三:需要修改TI camera driver的几处地方camera/pdd/tvpctrl.cpp

1.初始化,肯定的,一般寄存器setting放在单独的一个文件当中

BOOL CTvpCtrl::Init(PVOID MDDContext)
{
    RETAILMSG(ZJKtvp_DEBUGMSG,(TEXT("ZJK:CTvpCtrl::Init--CAM_PDD_TvpCtrl.cpp\r\n")));//add by zjk
	// Read parameters from registry
    if (GetDeviceRegistryParams(
        (LPCTSTR)MDDContext, 
        &m_pTvpConfig, 
        dimof(s_deviceRegParams), 
        s_deviceRegParams) != ERROR_SUCCESS)
    {
        DEBUGMSG(ZONE_ERROR, (TEXT("ERROR: CTvpCtrl::Init - Error reading from Registry.\r\n")));
        return FALSE;
    }

	if (m_pTvpConfig.dwI2CAddr == 0)
	{
        DEBUGMSG(ZONE_ERROR, (TEXT("ERROR: CTvpCtrl::Init - Wrong I2C address read from registry\r\n")));
        return FALSE;
	}
/*  add by zjk because tvp5140 reset connect by baseboard reset key
	if (m_pTvpConfig.dwResetGpio != (DWORD)-1)
	{
		HANDLE hGpio = GPIOOpen();
	  
		Sleep(20);
		GPIOClrBit(hGpio, m_pTvpConfig.dwResetGpio);
		GPIOSetMode(hGpio, m_pTvpConfig.dwResetGpio, GPIO_DIR_OUTPUT);
		Sleep(20);
		GPIOSetBit(hGpio, m_pTvpConfig.dwResetGpio);
		GPIOSetMode(hGpio, m_pTvpConfig.dwResetGpio, GPIO_DIR_OUTPUT);

		GPIOClose(hGpio);
	}*/
	RETAILMSG(ZJKtvp_DEBUGMSG,(TEXT("ZJK:CTvpCtrl::Init--before I2CInit()\r\n")));//add by zjk
	I2CInit();
    RETAILMSG(ZJKtvp_DEBUGMSG,(TEXT("ZJK:CTvpCtrl::Init--after I2CInit() \r\n")));//add by zjk
	if (m_hI2C != NULL)
	{
		for(UINT i=0;i<num_tvp_settings;i++)
		{
			WriteReg(tvpSettings[i].reg, tvpSettings[i].val);
		}
	}

	I2CDeinit();    

    return TRUE;                
}   

2.打开开关

BOOL CTvpCtrl::SetPowerState(BOOL PowerOn)
{
	RETAILMSG(ZJKtvp_DEBUGMSG,(TEXT("ZJK:CTvpCtrl::SetPowerState--CAM_PDD_TvpCtrl.cpp\r\n")));//add by zjk
    I2CInit();
    //WriteReg(REG_OPERATION_MODE, PowerOn ? 0x00 : 0x01);
	WriteReg(TVP5150_OP_MODE_CTL, PowerOn ? 0x00 : 0x01);//change bu zjk because the operate mode register of 5150 is 0x02,5146 is 0x03
    I2CDeinit();

    return TRUE;
}

3.选择输入方式的地方,也就是上层APP传输参数选择哪一路输入的地方

BOOL CTvpCtrl::SelectComposite()
{       
	RETAILMSG(ZJKtvp_DEBUGMSG,(TEXT("ZJK:CTvpCtrl::SelectComposite--CAM_PDD_TvpCtrl.cpp\r\n")));//add by zjk
	I2CInit();      
    WriteReg(REG_INPUT_SEL, (UINT8)m_pTvpConfig.dwSelComposite);
    I2CDeinit();        


    return TRUE;
}







你可能感兴趣的:(driver,配置,Camera,am3517,wince7,TVP5150)