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

📄 csl_ccdchwsetup.c

📁 TI达芬奇dm644x各硬件模块测试代码
💻 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 + -