📄 hal_camera.c
字号:
/************************************************************************
; 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 + -