/** * * vgen_config * - configures the generator to generate missing syncs * * @param pVtc is a pointer to an initialized VTC instance * ResolutionId identified a video resolution * vVerbose = 0 no verbose, 1 minimal verbose, 2 most verbose * * @return 0 if all tests pass, 1 otherwise. * * @note None. * ******************************************************************************/ int vgen_config(XVtc *pVtc, int ResolutionId, int bVerbose) { vres_timing_t VideoTiming; int HFrontPorch; int HSyncWidth; int HSyncPol; int HBackPorch; int VFrontPorch; int VSyncWidth; int VSyncPol; int VBackPorch; int LineWidth; int FrameHeight; XVtc_Signal Signal; /* VTC Signal configuration */ XVtc_Polarity Polarity; /* Polarity configuration */ XVtc_SourceSelect SourceSelect; /* Source Selection configuration */ /* Get Video Resolution timing */ if ( bVerbose ) { xil_printf( "\tVideo Resolution = %s\n\r", vres_get_name(ResolutionId) ); } vres_get_timing(ResolutionId, &VideoTiming); HFrontPorch = VideoTiming.HFrontPorch; HSyncWidth = VideoTiming.HSyncWidth; HSyncPol = VideoTiming.HSyncPolarity; HBackPorch = VideoTiming.HBackPorch; VFrontPorch = VideoTiming.VFrontPorch; VSyncWidth = VideoTiming.VSyncWidth; VSyncPol = VideoTiming.VSyncPolarity; VBackPorch = VideoTiming.VBackPorch; LineWidth = VideoTiming.HActiveVideo; FrameHeight = VideoTiming.VActiveVideo; /* Disable/Reset VTC */ XVtc_Disable(pVtc, XVTC_EN_GENERATOR); XVtc_Reset(pVtc); /* Set up Polarity of all outputs */ memset((void *)&Polarity, 0, sizeof(Polarity)); Polarity.ActiveChromaPol = 1; Polarity.ActiveVideoPol = 1; Polarity.FieldIdPol = 0; Polarity.VBlankPol = 1; Polarity.VSyncPol = VSyncPol; Polarity.HBlankPol = 1; Polarity.HSyncPol = HSyncPol; /* Set up Generator */ memset((void *)&Signal, 0, sizeof(XVtc_Signal)); Signal.OriginMode = 1; //Set Frame Origin to Start of Active Video Signal.HTotal = HFrontPorch + HSyncWidth + HBackPorch + LineWidth; Signal.HActiveStart = 0; Signal.HFrontPorchStart = LineWidth; Signal.HSyncStart = LineWidth + HFrontPorch; Signal.HBackPorchStart = LineWidth + HFrontPorch + HSyncWidth; Signal.V0Total = FrameHeight + VFrontPorch + VSyncWidth + VBackPorch; Signal.V0ChromaStart = 0; Signal.V0ActiveStart = 0; Signal.V0FrontPorchStart = FrameHeight; Signal.V0SyncStart = FrameHeight + VFrontPorch; Signal.V0BackPorchStart = FrameHeight + VFrontPorch + VSyncWidth; /* Set up source select */ memset((void *)&SourceSelect, 0, sizeof(SourceSelect)); SourceSelect.VBlankPolSrc = 1; SourceSelect.VSyncPolSrc = 1; SourceSelect.HBlankPolSrc = 1; SourceSelect.HSyncPolSrc = 1; SourceSelect.ActiveVideoPolSrc = 1; SourceSelect.ActiveChromaPolSrc= 1; SourceSelect.VChromaSrc = 1; SourceSelect.VActiveSrc = 1; SourceSelect.VBackPorchSrc = 1; SourceSelect.VSyncSrc = 1; SourceSelect.VFrontPorchSrc = 1; SourceSelect.VTotalSrc = 1; SourceSelect.HActiveSrc = 1; SourceSelect.HBackPorchSrc = 1; SourceSelect.HSyncSrc = 1; SourceSelect.HFrontPorchSrc = 1; SourceSelect.HTotalSrc = 1; if ( bVerbose == 2 ) { xil_printf("\tVTC Generator Configuration\n\r" ); xil_printf("\t\tHorizontal Timing:\n\r" ); xil_printf("\t\t\tHActiveStart = %d\r\n", Signal.HActiveStart); xil_printf("\t\t\tHFrontPorchStart %d\r\n", Signal.HFrontPorchStart); xil_printf("\t\t\tHSyncStart %d\r\n", Signal.HSyncStart); xil_printf("\t\t\tHBackPorchStart %d\r\n", Signal.HBackPorchStart); xil_printf("\t\t\tHTotal = %d\r\n", Signal.HTotal); xil_printf("\t\tVertical Timing:\n\r" ); xil_printf("\t\t\tV0ActiveStart %d\r\n", Signal.V0ActiveStart); xil_printf("\t\t\tV0FrontPorchStart %d\r\n", Signal.V0FrontPorchStart); xil_printf("\t\t\tV0SyncStart %d\r\n", Signal.V0SyncStart); xil_printf("\t\t\tV0BackPorchStart %d\r\n", Signal.V0BackPorchStart); xil_printf("\t\t\tV0Total %d\r\n", Signal.V0Total); } /* Write configuration to hardware */ XVtc_SetPolarity(pVtc, &Polarity); XVtc_SetGenerator(pVtc, &Signal); XVtc_SetSource(pVtc, &SourceSelect); /* Enable the generator module */ XVtc_DisableSync(pVtc); //XVtc_SetFSync(pVtc, 0, Signal.V0SyncStart, 1); XVtc_Enable(pVtc, XVTC_EN_GENERATOR); XVtc_RegUpdate(pVtc); /* Return success */ return 0; }
void avnet_config_vgap60_video(demo_t *pInstance) { int status; Xil_Out32(XPAR_TCM_RECEIVER_0_S00_AXI_BASEADDR + 0x0000, 0x0001); XCfa_Reset(pInstance->pcfa); XCcm_Reset(pInstance->pccm); XRgb2YCrCb_Reset(pInstance->prgb2ycrcb); XCresample_Reset(pInstance->pcresample); XAxiVdma_Reset(pInstance->paxivdma, XAXIVDMA_WRITE); XAxiVdma_Reset(pInstance->paxivdma, XAXIVDMA_READ); XVtc_Reset(pInstance->pvtc); XOSD_Reset(pInstance->posd); /* CLKWIZ */ Xil_Out32(XPAR_CLK_WIZ_1_BASEADDR + 0x0200, 0x00002203); Xil_Out32(XPAR_CLK_WIZ_1_BASEADDR + 0x0208, 0x0000002D); Xil_Out32(XPAR_CLK_WIZ_1_BASEADDR + 0x025C, 0x00000007); Xil_Out32(XPAR_CLK_WIZ_1_BASEADDR + 0x025C, 0x00000002); status = 0; while (!status) { status = Xil_In32(XPAR_CLK_WIZ_1_BASEADDR + 0x0004); } /* ISERDES Reset Assert */ Xil_Out32(XPAR_TCM_RECEIVER_0_S00_AXI_BASEADDR + 0x0000, 0x0001); /* TCM Initialization */ tca9548_i2c_mux_select(pInstance->piicps, EMBV_IIC_MUX_CAM); // tcm5117pl_get_chip_id(pInstance->piicps); tcm5117pl_init(pInstance->piicps, TCM5117PL_VGAP60); /* CFA */ XCfa_Reset(pInstance->pcfa); XCfa_Enable(pInstance->pcfa); XCfa_SetBayerPhase(pInstance->pcfa, 0x00000001); XCfa_SetActiveSize(pInstance->pcfa, 656, 496); XCfa_RegUpdateEnable(pInstance->pcfa); /* CCM */ XCcm_Reset(pInstance->pccm); XCcm_Enable(pInstance->pccm); XCcm_SetCoefMatrix(pInstance->pccm, &CCM_IDENTITY); XCcm_SetRgbOffset(pInstance->pccm, 0, 0, 0); XCcm_SetActiveSize(pInstance->pccm, 656, 496); XCcm_RegUpdateEnable(pInstance->pccm); /* RGB2YCRCB */ XRgb2YCrCb_Reset(pInstance->prgb2ycrcb); XRgb2YCrCb_Enable(pInstance->prgb2ycrcb); XRgb2YCrCb_Configuration(pInstance->prgb2ycrcb, XRGB_STANDARD_ITU_601_SD, XRGB_TV_16_TO_240, XRGB_DATA_WIDTH_10); XRgb2YCrCb_SetActiveSize(pInstance->prgb2ycrcb, 656, 496); XRgb2YCrCb_RegUpdateEnable(pInstance->prgb2ycrcb); /* CRESAMPLE */ XCresample_Reset(pInstance->pcresample); XCresample_Enable(pInstance->pcresample); XCresample_Configuration(pInstance->pcresample); XCresample_SetActiveSize(pInstance->pcresample, 656, 496); XCresample_RegUpdateEnable(pInstance->pcresample); /* AXIVDMA */ XAxiVdma_Reset(pInstance->paxivdma, XAXIVDMA_WRITE); XAxiVdma_Reset(pInstance->paxivdma, XAXIVDMA_READ); ReadSetup(pInstance->paxivdma, 0x30000000, 2, 0, 1, 1, 0, 0, 656, 496, 2048, 2048); WriteSetup(pInstance->paxivdma, 0x30000000, 2, 0, 1, 1, 0, 0, 656, 496, 2048, 2048); StartTransfer(pInstance->paxivdma); /* VTC */ XVtc_Timing Timing; XVtc_Reset(pInstance->pvtc); XVtc_RegUpdateEnable(pInstance->pvtc); XVtc_Enable(pInstance->pvtc); XVtc_ConvVideoMode2Timing(pInstance->pvtc, XVTC_VMODE_VGA, &Timing); Timing.HSyncPolarity = 1; Timing.VSyncPolarity = 1; XVtc_SetGeneratorTiming(pInstance->pvtc, &Timing); /* OSD */ XOSD_Reset(pInstance->posd); XOSD_RegUpdateEnable(pInstance->posd); XOSD_Enable(pInstance->posd); XOSD_SetScreenSize(pInstance->posd, 656, 496); XOSD_SetBackgroundColor(pInstance->posd, 0x80, 0x80, 0x80); // Layer 0 - Test Pattern Generator XOSD_SetLayerPriority(pInstance->posd, 0, XOSD_LAYER_PRIORITY_0); XOSD_SetLayerAlpha(pInstance->posd, 0, 1, 0xFF); XOSD_SetLayerDimension(pInstance->posd, 0, 0, 0, 656, 496); XOSD_EnableLayer(pInstance->posd, 0); // ISERDES Reset De-Assert Xil_Out32(XPAR_TCM_RECEIVER_0_S00_AXI_BASEADDR + 0x0000, 0x0000); }