int demo_start_frame_buffer( demo_t *pdemo ) { if ( pdemo->bVerbose ) { xil_printf("VDMA 0 Initialization\r\n"); } XAxiVdma_Reset(pdemo->paxivdma0, XAXIVDMA_WRITE); XAxiVdma_Reset(pdemo->paxivdma0, XAXIVDMA_READ); WriteSetup(pdemo->paxivdma0, 0x10000000, 0, 1, 1, 0, 0, pdemo->hdmii_width, pdemo->hdmii_height, 2048, 2048); ReadSetup(pdemo->paxivdma0, 0x10000000, 0, 1, 1, 0, 0, pdemo->hdmio_width, pdemo->hdmio_height, 2048, 2048); StartTransfer(pdemo->paxivdma0); if ( pdemo->bVerbose ) { xil_printf("VDMA 1 Initialization\r\n"); } XAxiVdma_Reset(pdemo->paxivdma1, XAXIVDMA_WRITE); XAxiVdma_Reset(pdemo->paxivdma1, XAXIVDMA_READ); WriteSetup(pdemo->paxivdma1, 0x18000000, 0, 1, 1, 0, 0, 1280, 1024, 2048, 2048); ReadSetup(pdemo->paxivdma1, 0x18000000, 0, 1, 1, 0, 0, 1280, 1024, 2048, 2048); StartTransfer(pdemo->paxivdma1); if ( pdemo->bVerbose ) { xil_printf("OSD Initialization (hdmi=0x%02X, cam=0x%02X)\r\n", pdemo->hdmi_alpha, pdemo->cam_alpha); } XOSD_Reset(pdemo->posd); XOSD_RegUpdateEnable(pdemo->posd); XOSD_Enable(pdemo->posd); XOSD_SetScreenSize(pdemo->posd, pdemo->hdmio_width, pdemo->hdmio_height); XOSD_SetBackgroundColor(pdemo->posd, 0x80, 0x80, 0x80); // Layer 0 - HDMI input XOSD_SetLayerPriority(pdemo->posd, 0, XOSD_LAYER_PRIORITY_0); XOSD_SetLayerAlpha(pdemo->posd, 0, 1, pdemo->hdmi_alpha); XOSD_SetLayerDimension(pdemo->posd, 0, 0, 0, pdemo->hdmio_width, pdemo->hdmio_height); // Layer 1 - PYTHON-1300 camera XOSD_SetLayerPriority(pdemo->posd, 1, XOSD_LAYER_PRIORITY_1); XOSD_SetLayerAlpha(pdemo->posd, 1, 1, pdemo->cam_alpha); XOSD_SetLayerDimension(pdemo->posd, 1, 0, 0, 1280, 1024); XOSD_EnableLayer(pdemo->posd, 0); XOSD_EnableLayer(pdemo->posd, 1); return 1; }
void InitVideo() { XAxiVdma_CfgInitialize(&vdma, XAxiVdma_LookupConfig(XPAR_AXI_VDMA_0_DEVICE_ID), XPAR_AXI_VDMA_0_BASEADDR); XAxiVdma_Reset(&vdma, XAXIVDMA_READ); while(XAxiVdma_ResetNotDone(&vdma, XAXIVDMA_READ)); dmasetup.VertSizeInput = 480; dmasetup.HoriSizeInput = 640*4; dmasetup.FrameDelay = 0; dmasetup.EnableCircularBuf = 0; dmasetup.EnableSync = 0; dmasetup.PointNum = 0; dmasetup.EnableFrameCounter = 0; dmasetup.Stride = 2560; fptr = (unsigned char*)&frames; dmasetup.FixedFrameStoreAddr = 0; dmasetup.FrameStoreStartAddr[0] = (int)fptr; dmasetup.FrameStoreStartAddr[1] = (int)fptr+dmasetup.Stride*480; dmasetup.FrameStoreStartAddr[2] = (int)fptr+dmasetup.Stride*480*2; XAxiVdma_DmaConfig(&vdma, XAXIVDMA_READ, &dmasetup); XAxiVdma_DmaSetBufferAddr(&vdma, XAXIVDMA_READ, dmasetup.FrameStoreStartAddr); XAxiVdma_DmaStart(&vdma, XAXIVDMA_READ); }
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); }