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

📄 hal_camera.c

📁 一款SmartPhone的驱动代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************************************
;  	HAL_CAMERA.C
;
;	The routines in this file comprise the camera interface setting
;
;	The Function is basic operation of LCDC
;
; 	Copyright (c) 2002 Epson Research and Development, Inc.
;
;  	All Rights Reserved.
;	2002.11.12	D Eric 		Start.					
;														
;************************************************************************/

#include "sysLCDC.h"


/****************************************************************************
; Function:	Set Camera Clk Divide	
; Input :	Camera Number and divide
; Output :	None
; Format :	void CamClkDivSet(CamDef CameraNum ,unsigned short divide)
;****************************************************************************/
void CamClkDivSet(CamDef CameraNum ,unsigned short divide)
{
	switch(CameraNum)
	{
		case cl_CAM1:
			halWriteReg16(REG0100_CAM1_CLOCK_SETTING, (divide/2-1)&0x0f);
			break;
		case cl_CAM2:
			halWriteReg16(REG0104_CAM2_CLOCK_DIVIDE_SEL, (divide/2-1)&0x0f);
			break;
		default:
			break;
	}
			      
}

/****************************************************************************
; Function:	Get Camera Clk Divide	
; Input :	Camera Number
; Output :	divide
; Format :	unsigned short CamClkDivGet(CamDef CameraNum)
;****************************************************************************/
unsigned short CamClkDivGet(CamDef CameraNum)
{
	switch(CameraNum)
	{
		default:
		case cl_CAM1:
			return ((halReadReg16(REG0100_CAM1_CLOCK_SETTING) & 0x0f) + 1) * 2;
			break;
		case cl_CAM2:
			return ((halReadReg16(REG0104_CAM2_CLOCK_DIVIDE_SEL) & 0x0f) + 1) * 2;
			break;
	}
}

/****************************************************************************
; Function:	Get Camera Clk Freq 	
; Input :	Camera Number
; Output :	frequency
; Format :	unsigned long CamClkFreqGet(CamDef CameraNum)
;****************************************************************************/
unsigned long CamClkFreqGet(CamDef CameraNum)
{
	return GetSystemClock(NULL) / CamClkDivGet(CameraNum);
}

/****************************************************************************
; Function:	determines register index for given camera
; Input:	Camera Number
; Output:	Index to Camera setting register for given Camera
; Format:	unsigned short CamIndexGet( CamDef CameraNum )
****************************************************************************/
unsigned short CamIndexGet( CamDef CameraNum )
{
	unsigned short signalSettingIndex;

	if ( CameraNum == cl_CAM1)
		signalSettingIndex = REG0102_CAM1_SIGNAL_SETTING;
	else
		signalSettingIndex = REG0106_CAM2_INPUT_SIG_FMT_SEL;

	return ( signalSettingIndex );
}


/****************************************************************************
; Function:	selects source of clock for camera
;
; Input:	Camera Number	
;		clkMode		TRUE means internal divided clock is used
;				FALSE means external input clock coming from camera
;		I/F is used
; Output:	None
; Format:	void CamClkModeInternalSet( CamDef CameraNum, BOOL ClkMode )
;****************************************************************************/
void CamClkModeInternalSet( CamDef CameraNum, BOOL ClkMode )
{
	unsigned short signalSettingIndex = CamIndexGet( CameraNum );
	unsigned short signalSetting = halReadReg16( signalSettingIndex );

	signalSetting &= (~0x0020);
	signalSetting |= (unsigned short )(ClkMode << 5);
	halWriteReg16( signalSettingIndex, signalSetting );
}


/****************************************************************************
; Function:	determines source of input clock as internal or external
; Input:	Camera Number
; Output:	TRUE means internal divided clock is used
;		FALSE means external input clock coming from camera I/F is used
; Format:	BOOL CamClkModeInternalGet(CamDef CameraNum )
;****************************************************************************/
BOOL CamClkModeInternalGet(CamDef CameraNum )
{
	unsigned short signalSettingIndex = CamIndexGet( CameraNum );
	unsigned short signalSetting = halReadReg16( signalSettingIndex );

	BOOL clockModeInternal = (BOOL)((signalSetting >> 5 ) & TRUE);
	return ( clockModeInternal );
}

/****************************************************************************
; Function:	sets HSync is active as high or low
;
; Input:	Camera Number		
;		HSyncHiActv		TRUE means HSync active is high and HSync Low means valid data
;					FALSE means HSync active is low and HSync Hi means valid data
; Output:	None
; format:	void CamHSyncHiActvSet( CamDef CameraNum , BOOL hSyncHiActv )
****************************************************************************/
void CamHSyncHiActvSet( CamDef CameraNum , BOOL hSyncHiActv )
{
	unsigned short signalSettingIndex = CamIndexGet( CameraNum  );
	unsigned short signalSetting = halReadReg16( signalSettingIndex );

	signalSetting &= (~0x0004);
	signalSetting |= (BOOL)(hSyncHiActv << 2);
	halWriteReg16( signalSettingIndex, signalSetting );
}


/****************************************************************************
; Function:	determines if HSync is active as high or low
;
; Input:	Camera Number
; Output:	TRUE means HSync active is high and HSync Low means valid data
;		FALSE means HSync active is low and HSync Hi means valid data
; Format:	BOOL CamHSyncHiActvGet(CamDef CameraNum )
****************************************************************************/
BOOL CamHSyncHiActvGet(CamDef CameraNum )
{
	unsigned short signalSettingIndex = CamIndexGet( CameraNum  );
	unsigned short signalSetting = halReadReg16( signalSettingIndex );

	BOOL hSyncHiActv = (BOOL)((signalSetting >> 2) & TRUE);
	return ( hSyncHiActv );
}

/***************************************************************************
; Function:	Set VSync is active as high or low
; Input:	Camera Number		
;		VSyncActvSel	TRUE means VSync active is high and VSync Low means valid data
;				FALSE means VSync active is low and VSync Hi means valid data
; Output:	None
; format:	void CamVSyncHiActvSet( CamDef CameraNum , BOOL vSyncHiActv )
;***************************************************************************/
void CamVSyncHiActvSet( CamDef CameraNum , BOOL vSyncHiActv )
{
	unsigned short signalSettingIndex = CamIndexGet( CameraNum  );
	unsigned short signalSetting = halReadReg16( signalSettingIndex );
	
	signalSetting &= (~0x0002);
	signalSetting |= (unsigned short)(vSyncHiActv << 1);
	halWriteReg16( signalSettingIndex, signalSetting );
}

/***************************************************************************
; Function:	determines if VSync is active as high or low
; Input:	Camera Number
; Output:	VSyncActvSel	TRUE means VSync active is high and VSync Low means valid data
;				FALSE means VSync active is low and VSync Hi means valid data
; Format:	BOOL CamVSyncHiActvGet( CamDef CameraNum )
;***************************************************************************/
BOOL CamVSyncHiActvGet( CamDef CameraNum )
{
	unsigned short signalSettingIndex = CamIndexGet( CameraNum  );
	unsigned short signalSetting = halReadReg16( signalSettingIndex );
	
	BOOL vSyncHiActv = (BOOL)((signalSetting >> 1) & TRUE);
	return ( vSyncHiActv );
}

/***************************************************************************
; Function:	selects YUV data format
; Input:	Camera Number		
;		yuvDataFmtSel
; Output:	None
; Format:	void CamYUVDataFmtSelSet(CamDef CameraNum ,CamYUVDataFmtSel yuvDataFmtSel)
;***************************************************************************/
void CamYUVDataFmtSelSet(CamDef CameraNum ,YUVDataFmtSel yuvDataFmtSel)
{
	unsigned short signalSettingIndex = CamIndexGet( CameraNum  );
	unsigned short camSignalSetting = halReadReg16( signalSettingIndex );

	camSignalSetting &=(~ 0x0018);
	camSignalSetting |= (unsigned short)yuvDataFmtSel;
	halWriteReg16( signalSettingIndex, camSignalSetting );
}

/***************************************************************************
; Function:	selects YUV data format
; Input:	Camera Number	
; Output:	YUVDataFmtSel
; Format:	CamYUVDataFmtSel CamYUVDataFmtSelGet( CamDef CameraNum )
;***************************************************************************/
YUVDataFmtSel CamYUVDataFmtSelGet( CamDef CameraNum )
{
	unsigned short signalSettingIndex = CamIndexGet( CameraNum  );
	unsigned short cam1SignalSetting = halReadReg16( signalSettingIndex );

	YUVDataFmtSel yuvDataFmtSel = (YUVDataFmtSel)(cam1SignalSetting & 0x0018);
	return ( yuvDataFmtSel );
}

/***************************************************************************
; Function:	CamClkFallEdgeSet
; Input:	Camera Number		
;		ClkFallEdge		TRUE means input data at Fall edge of clock
;					FALSE means input data at rising edge of clock
; Output:	None
; Format:	CamYUVDataFmtSel CamYUVDataFmtSelGet( CamDef CameraNum )
;***************************************************************************/
void CamClkFallEdgeSet(CamDef CameraNum ,BOOL clkFallEdge)
{
	unsigned short signalSettingIndex = CamIndexGet( CameraNum  );
	unsigned short signalSetting = halReadReg16( signalSettingIndex );

	signalSetting &= (~TRUE);
	signalSetting |= (unsigned short)(clkFallEdge & TRUE);
	halWriteReg16( signalSettingIndex, signalSetting );
}

/***************************************************************************
; Function:	CamClkFallEdgeGet
; Input:	Camera Number	
; Output:	TRUE means input data at Fall edge
;		FALSE means input data at rising edge
; Format:	BOOL CamClkFallEdgeGet( CamDef CameraNum )
;***************************************************************************/
BOOL CamClkFallEdgeGet( CamDef CameraNum )
{
	unsigned short signalSettingIndex = CamIndexGet( CameraNum  );
	unsigned short signalSetting = halReadReg16( signalSettingIndex );

	BOOL clckFallEdge = (BOOL)(signalSetting & TRUE);
	return ( clckFallEdge );
}

/***************************************************************************
; Function:	Sets YUV Data Fmt Selion
; Input:	CamInterfaceSel
; Output:	None
; Format:	void CamInterfaceSelSet( CamInterfaceSel camInterfaceSel )
;***************************************************************************/
void CamInterfaceSelSet( CamInterfaceSel camInterfaceSel )
{
	unsigned short inSignalFmtSel = halReadReg16( REG0106_CAM2_INPUT_SIG_FMT_SEL );
	inSignalFmtSel &= (~0x00C0);
	inSignalFmtSel |= (unsigned short)camInterfaceSel;
	halWriteReg16( REG0106_CAM2_INPUT_SIG_FMT_SEL, inSignalFmtSel );
}

/***************************************************************************
; Function:	determines YUV Data Fmt Selion
; Input:	None
; Output:	CamInterfaceSel
; Format:	CamInterfaceSel CamInterfaceSelGet( void )
;***************************************************************************/
CamInterfaceSel CamInterfaceSelGet( void )
{
	CamInterfaceSel cameraInterfaceSel = (CamInterfaceSel)0;
	return ( cameraInterfaceSel );
}




/***************************************************************************
; Function:	YUV to YUV Converter Enable function Set
; Input:	Enable
; Output:	None
; format:	void YUVYUVConvertEnSet( BOOL enable )
;***************************************************************************/
void YUVYUVConvertEnSet( BOOL enable )
{
	unsigned short camModeSetting = halReadReg16( REG0110_CAMERA_MODE_SETTING );

	camModeSetting &= (~0x0400);
	camModeSetting |= ( unsigned short )(enable << 10);
	halWriteReg16( REG0110_CAMERA_MODE_SETTING, camModeSetting );
}

/***************************************************************************
; Function: 	YUV to YUV converter enable function Get	
; Input:	None
; Output:	enable or disable
; Format:	BOOL YUVYUVConvertEnGet( void )
;***************************************************************************/
BOOL YUVYUVConvertEnGet( void )
{
	BOOL enable;
	unsigned short camModeSetting = halReadReg16( REG0110_CAMERA_MODE_SETTING );

	enable = (BOOL)((camModeSetting >> 10) & TRUE);
	return ( enable );
}

/***************************************************************************
; Function:	YUV Data Type Set
; Input:	yuvDataType
; Output:	None
; Format:	BOOL YUVYUVConvertEnGet( void )
;***************************************************************************/
void YUVDataTypeSet( CamYUVDataType yuvDataType )
{
	unsigned short camModeSetting = halReadReg16( REG0110_CAMERA_MODE_SETTING );

	camModeSetting &= (~0x0300);
	camModeSetting |= (unsigned short)(yuvDataType << 8);
	halWriteReg16( REG0110_CAMERA_MODE_SETTING, camModeSetting );
}

/***************************************************************************

⌨️ 快捷键说明

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