📄 ccdc.c
字号:
/**
\file ccdc.c
\brief CCD Controller User APIs
*/
#include <user/ccdm.h>
#include <user/ccdc.h>
#include <user/tvp_5150.h>
static CCDC_ConfigData ccdcConfig_fine= {
CCDC_YUV8_DATA, // dataInputMode;
8, // ccdDataWidth;
TRUE, // ccdModeInterlace;
FALSE, // dataPolarityInverse;
TRUE, // useWen;
FALSE, // fieldIdPolarityNegative;
FALSE, // hdPolarityNegative;
FALSE, // vdPolarityNegative;
FALSE, // fieldIdDirOutput;
FALSE // hdvdDirOutput;
};
static CCDC_ModeData ccdcMode_fine= {
1, // hdWidth;
1, // vdWidth;
1, // pixelsPerLine;
1, // linesPerFrame;
0, // startPixelH;
720*2, // numPixelH;
20, // startLineVEvenField;
19, // startLineVOddField;
240, // numPixelV;
0xFF, // cullPatternHEvenLine;
0xFF, // cullPatternHOddLine;
0xFF, // cullPatternV;
0x4249, // reg_sdofst;
720*2, // sdramLineOffset;
NULL, // *sdramAddress;
1, // sdramStorageMode; 0:16 bits/pixel, 1:8bits/pixel
0, // vdint0Interval;
0, // vdint1Interval;
FALSE // shutterControlEnable;
};
static CCDC_ProcessingData ccdcProcessing_fine = {
FALSE, // hlpfEnable;
FALSE, // clampEnable;
0, // clampPixel; 0: 8pixels, 1:16pixels
0, // clampLine; 0: 8pixels, 1:16pixels
0,
0, // dcsubValue;
CCDC_COL_R, // colPatFld0EvenEven; // Color Pattern - Field 0
CCDC_COL_R, // colPatFld0OddEven; // R Gr
CCDC_COL_R, // colPatFld0EvenOdd; // Gb B
CCDC_COL_R, // colPatFld0OddOdd; //
CCDC_COL_R, // colPatFld1EvenEven; // Color Pattern - Field 1
CCDC_COL_R, // colPatFld1OddEven; // R Gr
CCDC_COL_R, // colPatFld1EvenOdd; // Gb B
CCDC_COL_R, // colPatFld1OddOdd; //
(Int8)0, // offsetR;
(Int8)0, // offsetGr;
(Int8)0, // offsetGb;
(Int8)0, // offsetB;
FALSE, // medianFilterEnable;
0, // medianFilterThreshold;
0x100, // gain;
0, // offset;
0xFFF, // outputThreshold;
0xFFF, // outputClip;
0, // gammaInputWidth; 0:13-4bit, 1:12-3bit, 2:11-2bit, 3:10-1bit, 4:9-0bit
FALSE, // gammaH3AEnable;
FALSE // gammaCCDCEnable;
};
CCDC_UserConfig tvp5150_ccdcUserConfig_fine = {
&ccdcConfig_fine,
&ccdcMode_fine,
&ccdcProcessing_fine
};
static CCDC_ConfigData ccdcConfig_draft = {
CCDC_YUV8_DATA, // dataInputMode;
14, // ccdDataWidth;
FALSE, // ccdModeInterlace;
FALSE, // dataPolarityInverse;
FALSE, // useWen;
FALSE, // fieldIdPolarityNegative;
TRUE, // hdPolarityNegative;
TRUE, // vdPolarityNegative;
FALSE, // fieldIdDirOutput;
TRUE // hdvdDirOutput;
};
static CCDC_ModeData ccdcMode_draft= {
126, // hdWidth;
13, // vdWidth;
3200, // pixelsPerLine;
480, // linesPerFrame;
0, // startPixelH;
720, // numPixelH;
0, // startLineVEvenField;
480, // startLineVOddField;
1, // numPixelV;
0xFF, // cullPatternHEvenLine;
0xFF, // cullPatternHOddLine;
0xFF, // cullPatternV;
0, // reg_sdofst;
0, // sdramLineOffset;
NULL, // *sdramAddress;
0, // sdramStorageMode; 0:16 bits/pixel, 1:8bits/pixel
0, // vdint0Interval;
0, // vdint1Interval;
FALSE // shutterControlEnable;
};
static CCDC_ProcessingData ccdcProcessing_draft = {
FALSE, // hlpfEnable;
FALSE, // clampEnable;
0, // clampPixel; 0: 8pixels, 1:16pixels
0, // clampLine; 0: 8pixels, 1:16pixels
0,
0, // dcsubValue;
CCDC_COL_R, // colPatFld0EvenEven; // Color Pattern - Field 0
CCDC_COL_R, // colPatFld0OddEven; // R Gr
CCDC_COL_R, // colPatFld0EvenOdd; // Gb B
CCDC_COL_R, // colPatFld0OddOdd; //
CCDC_COL_R, // colPatFld1EvenEven; // Color Pattern - Field 1
CCDC_COL_R, // colPatFld1OddEven; // R Gr
CCDC_COL_R, // colPatFld1EvenOdd; // Gb B
CCDC_COL_R, // colPatFld1OddOdd; //
(Int8)0, // offsetR;
(Int8)0, // offsetGr;
(Int8)0, // offsetGb;
(Int8)0, // offsetB;
FALSE, // medianFilterEnable;
0, // medianFilterThreshold;
0x100, // gain;
0, // offset;
0xFFF, // outputThreshold;
0xFFF, // outputClip;
0, // gammaInputWidth; 0:13-4bit, 1:12-3bit, 2:11-2bit, 3:10-1bit, 4:9-0bit
FALSE, // gammaH3AEnable;
FALSE // gammaCCDCEnable;
};
CCDC_UserConfig tvp5150_ccdcUserConfig_draft = {
&ccdcConfig_draft,
&ccdcMode_draft,
&ccdcProcessing_draft
};
/**
\brief Initialize CCD controller with specific CCD imager parameters
\param ccdcUserConfig CCD controller parameters
\return if success, \c E_PASS, else error code
*/
STATUS CCDCInit( CCDC_UserConfig *ccdcUserConfig) {
STATUS status;
status=CCDC_setConfig(ccdcUserConfig->ccdcConfig);
if(status!=E_PASS)
return status;
status = CCDC_setMode(ccdcUserConfig->ccdcMode);
if(status!=E_PASS)
return status;
status = CCDC_setProcessing(ccdcUserConfig->ccdcProcessing);
if(status!=E_PASS)
return status;
return status;
}
/**
\brief Setup CCDC with specific CCD imager module parameters for a specific mode
\param ccdmID CCD module ID
\param mode 0:CCDM_DRAFT_MODE, 1: CCDM_FINE_MODE
\return if success, \c E_PASS, else error code
*/
STATUS CCDCSetMode( CCDM_ID ccdmID, Uint16 mode) {
STATUS status=E_PASS;
switch(ccdmID) {
case TVP_5150:
switch(mode) {
case CCDM_DRAFT_MODE:
CCDCInit(&tvp5150_ccdcUserConfig_draft);
break;
case CCDM_FINE_MODE:
CCDCInit(&tvp5150_ccdcUserConfig_fine);
break;
default:
status=E_INVALID_INPUT;
break;
}
break;
default:
status=E_INVALID_INPUT;
break;
}
return status;
}
/**
\brief Capture one frame of CCD raw data to SDRAM
\param sdrAddr Absolute SDRAM address where the raw data would be stored
\param vdIntID CCDC VD interrrupt to wait for, INT_VD0 or INT_VD1
\param numVdWait Number of CCDC VD interrupts to wait
\return if success, \c E_PASS, else error code
*/
STATUS CCDCGetFrame( char *sdrAddr, INT_ID vdIntID, Uint16 numVdWait) {
if( sdrAddr == NULL )
return E_INVALID_INPUT;
if( vdIntID != INT_VD0 && vdIntID != INT_VD1 )
return E_INVALID_INPUT;
CCDC_enable(FALSE, FALSE);
CCDC_setSdramAddress( sdrAddr );
INTC_enable( vdIntID, FALSE );
INTC_setIntAsIRQ(vdIntID);
INTC_clearIRQ(vdIntID);
CCDC_enable(TRUE, TRUE);
while(numVdWait--) {
while(INTC_getIntIRQStatus(vdIntID))
;
INTC_clearIRQ(vdIntID);
}
CCDC_enable(TRUE, FALSE);
INTC_enable( vdIntID, FALSE );
return E_PASS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -