📄 csl_ccdchwsetup.c
字号:
/** @file csl_ccdcHwSetup.c
*
* @brief File for functional layer of CSL API @a CSL_ccdcHwSetup()
*
* Description
* - The @a CSL_ccdcHwSetup() function definition & it's associated
* functions
*
* Modification 1
* - Modified on: 10/21/2004
* - Reason: created the sources
*
* @date 21st Oct, 2004
* @author Santosh Narayanan.
*/
#include <csl_ccdc.h>
#pragma CODE_SECTION (CSL_ccdcHwSetup, ".text:csl_section:ccdc");
/** @brief Configures the CCDC using the values passed in through the
* setup structure.
*/
CSL_Status CSL_ccdcHwSetup(
/** Pointer to the object that holds reference to the
* instance of CCDC requested after the call
*/
CSL_CcdcHandle hCcdc,
/** Pointer to setup structure which contains the
* information to program CCDC to a useful state
*/
CSL_CcdcHwSetup *setup
){
CSL_Status status = CSL_SOK;
CSL_CcdcRegsOvly ccdcRegs = hCcdc->regs;
if(setup == NULL) return (CSL_ESYS_INVPARAMS);
/** Disable all modes
*/
CSL_FINS(ccdcRegs->SYN_MODE,CCDC_SYN_MODE_LPF, CSL_CCDC_LPF_OFF);
CSL_FINS(ccdcRegs->CLAMP, CCDC_CLAMP_CLAMPEN, CSL_CCDC_CLAMP_DISABLE);
CSL_FINS(ccdcRegs->FMTCFG, CCDC_FMTCFG_FMTEN, CSL_CCDC_FMT_DISABLE);
CSL_FINS(ccdcRegs->FMTCFG, CCDC_FMTCFG_VPEN, CSL_CCDC_VIDEO_PORT_DISABLE);
CSL_FINS(ccdcRegs->SYN_MODE,CCDC_SYN_MODE_VP2SDR, CSL_CCDC_VP2SDR_DISABLE);
CSL_FINS(ccdcRegs->SYN_MODE,CCDC_SYN_MODE_WEN, CSL_CCDC_SDRAM_OUT_DISABLE);
CSL_FINS(ccdcRegs->ALAW, CCDC_ALAW_CCDTBL, CSL_CCDC_ALAW_DISABLE);
CSL_FINS(ccdcRegs->FPC, CCDC_FPC_FPCEN, CSL_CCDC_FPC_DISABLED);
ccdcRegs->DCSUB = CSL_FMK(CCDC_DCSUB_DCSUB, setup->dcsub);
if(setup->input == CSL_CCDC_IN_REC656)
CSL_FINS(ccdcRegs->REC656IF, CCDC_REC656IF_R656ON, CSL_CCDC_REC656_ENABLE);
else
{
CSL_FINS(ccdcRegs->REC656IF, CCDC_REC656IF_R656ON, CSL_CCDC_REC656_DISABLE);
CSL_FINS(ccdcRegs->SYN_MODE,CCDC_SYN_MODE_INPMOD, setup->input);
}
/* The following can not be null pointers, they must be passed
*/
if(CSL_ccdcSetSyncMode(hCcdc, setup->syncModeConfig) != CSL_SOK) status = CSL_ESYS_INVPARAMS;
if(CSL_ccdcSetBlackCmp(hCcdc, setup->blackCompConfig) != CSL_SOK) status = CSL_ESYS_INVPARAMS;
if(CSL_ccdcSetCullControl(hCcdc, setup->culling) != CSL_SOK) status = CSL_ESYS_INVPARAMS;
/* Setup the Color pattern configuration in COLPTN register */
if(setup->colorPatternConfig == NULL)
status = CSL_ESYS_INVPARAMS;
else
{
ccdcRegs->COLPTN = CSL_FMK(CCDC_COLPTN_CP3LPC3, setup->colorPatternConfig->colPatn[3][3]) |
CSL_FMK(CCDC_COLPTN_CP3LPC2, setup->colorPatternConfig->colPatn[3][2]) |
CSL_FMK(CCDC_COLPTN_CP3LPC1, setup->colorPatternConfig->colPatn[3][1]) |
CSL_FMK(CCDC_COLPTN_CP3LPC0, setup->colorPatternConfig->colPatn[3][0]) |
CSL_FMK(CCDC_COLPTN_CP2LPC3, setup->colorPatternConfig->colPatn[2][3]) |
CSL_FMK(CCDC_COLPTN_CP2LPC2, setup->colorPatternConfig->colPatn[2][2]) |
CSL_FMK(CCDC_COLPTN_CP2LPC1, setup->colorPatternConfig->colPatn[2][1]) |
CSL_FMK(CCDC_COLPTN_CP2LPC0, setup->colorPatternConfig->colPatn[2][0]) |
CSL_FMK(CCDC_COLPTN_CP1LPC3, setup->colorPatternConfig->colPatn[1][3]) |
CSL_FMK(CCDC_COLPTN_CP1LPC2, setup->colorPatternConfig->colPatn[1][2]) |
CSL_FMK(CCDC_COLPTN_CP1LPC1, setup->colorPatternConfig->colPatn[1][1]) |
CSL_FMK(CCDC_COLPTN_CP1LPC0, setup->colorPatternConfig->colPatn[1][0]) |
CSL_FMK(CCDC_COLPTN_CP0LPC3, setup->colorPatternConfig->colPatn[0][3]) |
CSL_FMK(CCDC_COLPTN_CP0LPC2, setup->colorPatternConfig->colPatn[0][2]) |
CSL_FMK(CCDC_COLPTN_CP0LPC1, setup->colorPatternConfig->colPatn[0][1]) |
CSL_FMK(CCDC_COLPTN_CP0LPC0, setup->colorPatternConfig->colPatn[0][0]);
}
/* The following may be null pointers
*/
CSL_ccdcSetVp(hCcdc, setup->vpConfig);
CSL_ccdcSetFmt(hCcdc, setup->formatConfig);
CSL_ccdcSetOptBlackClamp(hCcdc, setup->clampConfig);
CSL_ccdcSetFPC(hCcdc, setup->fpcConfig);
CSL_ccdcSetAlaw(hCcdc, setup->alawConfig);
CSL_ccdcSetMode(hCcdc, setup->mode);
if(setup->yccInputConfig != NULL) {
CSL_FINS(ccdcRegs->CCDCFG,CCDC_CCDCFG_YCINSWP, setup->yccInputConfig->ycinSwap);
CSL_FINS(ccdcRegs->CCDCFG,CCDC_CCDCFG_Y8POS, setup->yccInputConfig->y8pos);
CSL_FINS(ccdcRegs->CCDCFG,CCDC_CCDCFG_MSBINVI, setup->yccInputConfig->msbinvi);
}
if(setup->rec656Config != NULL) {
CSL_FINS(ccdcRegs->CCDCFG,CCDC_CCDCFG_BW656, setup->rec656Config->bitWidth);
CSL_FINS(ccdcRegs->REC656IF,CCDC_REC656IF_ECCFVH, setup->rec656Config->eccFvhEn);
}
/* Setup the SDRAM/DDRAM line offset configuration in SDOFST register */
if(setup->sdramOffsetConfig != NULL) {
ccdcRegs->SDOFST = CSL_FMK(CCDC_SDOFST_FIINV, setup->sdramOffsetConfig->fieldIdInv) |
CSL_FMK(CCDC_SDOFST_FOFST, setup->sdramOffsetConfig->lnOffFID1) |
CSL_FMK(CCDC_SDOFST_LOFTS0, setup->sdramOffsetConfig->lnOffEvLnEvFD) |
CSL_FMK(CCDC_SDOFST_LOFTS1, setup->sdramOffsetConfig->lnOffOddLnEvFD) |
CSL_FMK(CCDC_SDOFST_LOFTS2, setup->sdramOffsetConfig->lnOffEvLnOddFD) |
CSL_FMK(CCDC_SDOFST_LOFTS3, setup->sdramOffsetConfig->lnOffOddLnOddFD);
}
/* Setup the program entries for even lines */
if(setup->evenProgConfig != NULL) {
ccdcRegs->PRGEVEN_0 = CSL_FMK(CCDC_PRGEVEN_0_EVEN7_ADDR, setup->evenProgConfig->addr[7]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN7_UPDT, setup->evenProgConfig->update[7]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN6_ADDR, setup->evenProgConfig->addr[6]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN6_UPDT, setup->evenProgConfig->update[6]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN5_ADDR, setup->evenProgConfig->addr[5]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN5_UPDT, setup->evenProgConfig->update[5]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN4_ADDR, setup->evenProgConfig->addr[4]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN4_UPDT, setup->evenProgConfig->update[4]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN3_ADDR, setup->evenProgConfig->addr[3]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN3_UPDT, setup->evenProgConfig->update[3]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN2_ADDR, setup->evenProgConfig->addr[2]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN2_UPDT, setup->evenProgConfig->update[2]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN1_ADDR, setup->evenProgConfig->addr[1]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN1_UPDT, setup->evenProgConfig->update[1]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN0_ADDR, setup->evenProgConfig->addr[0]) |
CSL_FMK(CCDC_PRGEVEN_0_EVEN0_UPDT, setup->evenProgConfig->update[0]);
ccdcRegs->PRGEVEN_1 = CSL_FMK(CCDC_PRGEVEN_1_EVEN15_ADDR, setup->evenProgConfig->addr[15]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN15_UPDT, setup->evenProgConfig->update[15]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN14_ADDR, setup->evenProgConfig->addr[14]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN14_UPDT, setup->evenProgConfig->update[14]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN13_ADDR, setup->evenProgConfig->addr[13]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN13_UPDT, setup->evenProgConfig->update[13]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN12_ADDR, setup->evenProgConfig->addr[12]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN12_UPDT, setup->evenProgConfig->update[12]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN11_ADDR, setup->evenProgConfig->addr[11]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN11_UPDT, setup->evenProgConfig->update[11]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN10_ADDR, setup->evenProgConfig->addr[10]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN10_UPDT, setup->evenProgConfig->update[10]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN9_ADDR, setup->evenProgConfig->addr[9]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN9_UPDT, setup->evenProgConfig->update[9]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN8_ADDR, setup->evenProgConfig->addr[8]) |
CSL_FMK(CCDC_PRGEVEN_1_EVEN8_UPDT, setup->evenProgConfig->update[8]);
}
/* Setup the program entries for odd lines */
if(setup->oddProgConfig != NULL) {
ccdcRegs->PRGODD_0 = CSL_FMK(CCDC_PRGODD_0_ODD7_ADDR, setup->oddProgConfig->addr[7]) |
CSL_FMK(CCDC_PRGODD_0_ODD7_UPDT, setup->oddProgConfig->update[7]) |
CSL_FMK(CCDC_PRGODD_0_ODD6_ADDR, setup->oddProgConfig->addr[6]) |
CSL_FMK(CCDC_PRGODD_0_ODD6_UPDT, setup->oddProgConfig->update[6]) |
CSL_FMK(CCDC_PRGODD_0_ODD5_ADDR, setup->oddProgConfig->addr[5]) |
CSL_FMK(CCDC_PRGODD_0_ODD5_UPDT, setup->oddProgConfig->update[5]) |
CSL_FMK(CCDC_PRGODD_0_ODD4_ADDR, setup->oddProgConfig->addr[4]) |
CSL_FMK(CCDC_PRGODD_0_ODD4_UPDT, setup->oddProgConfig->update[4]) |
CSL_FMK(CCDC_PRGODD_0_ODD3_ADDR, setup->oddProgConfig->addr[3]) |
CSL_FMK(CCDC_PRGODD_0_ODD3_UPDT, setup->oddProgConfig->update[3]) |
CSL_FMK(CCDC_PRGODD_0_ODD2_ADDR, setup->oddProgConfig->addr[2]) |
CSL_FMK(CCDC_PRGODD_0_ODD2_UPDT, setup->oddProgConfig->update[2]) |
CSL_FMK(CCDC_PRGODD_0_ODD1_ADDR, setup->oddProgConfig->addr[1]) |
CSL_FMK(CCDC_PRGODD_0_ODD1_UPDT, setup->oddProgConfig->update[1]) |
CSL_FMK(CCDC_PRGODD_0_ODD0_ADDR, setup->oddProgConfig->addr[0]) |
CSL_FMK(CCDC_PRGODD_0_ODD0_UPDT, setup->oddProgConfig->update[0]);
ccdcRegs->PRGODD_1 = CSL_FMK(CCDC_PRGODD_1_ODD15_ADDR, setup->oddProgConfig->addr[15]) |
CSL_FMK(CCDC_PRGODD_1_ODD15_UPDT, setup->oddProgConfig->update[15]) |
CSL_FMK(CCDC_PRGODD_1_ODD14_ADDR, setup->oddProgConfig->addr[14]) |
CSL_FMK(CCDC_PRGODD_1_ODD14_UPDT, setup->oddProgConfig->update[14]) |
CSL_FMK(CCDC_PRGODD_1_ODD13_ADDR, setup->oddProgConfig->addr[13]) |
CSL_FMK(CCDC_PRGODD_1_ODD13_UPDT, setup->oddProgConfig->update[13]) |
CSL_FMK(CCDC_PRGODD_1_ODD12_ADDR, setup->oddProgConfig->addr[12]) |
CSL_FMK(CCDC_PRGODD_1_ODD12_UPDT, setup->oddProgConfig->update[12]) |
CSL_FMK(CCDC_PRGODD_1_ODD11_ADDR, setup->oddProgConfig->addr[11]) |
CSL_FMK(CCDC_PRGODD_1_ODD11_UPDT, setup->oddProgConfig->update[11]) |
CSL_FMK(CCDC_PRGODD_1_ODD10_ADDR, setup->oddProgConfig->addr[10]) |
CSL_FMK(CCDC_PRGODD_1_ODD10_UPDT, setup->oddProgConfig->update[10]) |
CSL_FMK(CCDC_PRGODD_1_ODD9_ADDR, setup->oddProgConfig->addr[9]) |
CSL_FMK(CCDC_PRGODD_1_ODD9_UPDT, setup->oddProgConfig->update[9]) |
CSL_FMK(CCDC_PRGODD_1_ODD8_ADDR, setup->oddProgConfig->addr[8]) |
CSL_FMK(CCDC_PRGODD_1_ODD8_UPDT, setup->oddProgConfig->update[8]);
}
return status;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -