Horizontal Generation Configuration Example - 6.2 English

Video Timing Controller Product Guide (PG016)

Document ID
PG016
Release Date
2023-11-03
Version
6.2 English

Programming the horizontal generation registers to the values shown in Table: Example Horizontal Generation Register Inputs will result in the video timing signal outputs shown in This Figure .

Notice that in Table: Example Horizontal Generation Register Inputs the Control Register bit 2 is set to enable generation, that all source selects are set to 1 to select the Generation Registers and that the polarity bits are all set to 1 to configure the outputs for active-High polarity.

Table 3-1: Example Horizontal Generation Register Inputs

Register Address

Register Name

Value

0x0060

Generator Active Size

0x0003_0003

0x0070

Generator HSize

0x0000_0007

0x0078

Generator HSync

0x0005_0004

0x0068

Generator Encoding

0x0000_0000

0x006C

Generator Polarity

0x0000_003f

0x0000

Control

0x01ff_ff07

Figure 3-3: Generated Horizontal Timing

X-Ref Target - Figure 3-3

Figure_5_Generated_Horizontal_Timing.png

IMPORTANT: All signals are shown active-High. The polarities of the output signals can be changed at any time via the GENERATOR POLARITY REGISTER (0x006C).

The following C code shows how to configure the register values in Table: Example Horizontal Generation Register Inputs using the Video Timing Controller driver.

XVtc Vtc;                      /* Device driver instance */

XVtc_Signal SignalCfg;         /* VTC Signal configuration */

XVtc_Polarity Polarity;        /* Polarity configuration */

XVtc_SourceSelect SourceSelect;/* Source Selection configuration */

XVtc_Config *VtcCfgPtr;

VtcCfgPtr = XVtc_LookupConfig(VTC_DEVICE_ID);

XVtc_CfgInitialize(&Vtc, VtcCfgPtr, VtcCfgPtr->BaseAddress);

/* Setup the VTC Source Select config structure. */

/* 1=Generator registers are source */

/* 0=Detector  registers are source */

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;

/* Setup the VTC Polarity config structure. */

memset((void *)&Polarity, 0, sizeof(Polarity));

Polarity.ActiveChromaPol = 1;

Polarity.ActiveVideoPol  = 1;

Polarity.VBlankPol       = 1;

Polarity.VSyncPol        = 1;

Polarity.HBlankPol       = 1;

Polarity.HSyncPol        = 1;

/* Setup the VTC Signal config structure. */

memset((void *)&SignalCfg, 0, sizeof(XVtc_Signal));

SignalCfg.OriginMode        = 1;//Set Frame Origin to Start of Active Video

SignalCfg.HTotal            = 7;

SignalCfg.HActiveStart      = 0;

SignalCfg.HFrontPorchStart  = 3;// Active Video Width

SignalCfg.HSyncStart        = 4;// Active Video Width + FP Width

SignalCfg.HBackPorchStart   = 5;// Active Video Width + FP Width + Sync Width

SignalCfg.V0Total           = 7;

SignalCfg.V0ChromaStart     = 0;

SignalCfg.V0ActiveStart     = 0;

SignalCfg.V0FrontPorchStart = 3;// Active Video Height

SignalCfg.V0SyncStart       = 4;// Active Video Height + FP_Width

SignalCfg.V0BackPorchStart  = 5;// Active Video Height + FP Width + Sync Width

/* Write VTC config to HW */

XVtc_RegUpdate(&VTC);

XVtc_SetPolarity(&Vtc, &Polarity);

XVtc_SetGenerator(&Vtc, &SignalCfg);

XVtc_SetSource(&Vtc, &SourceSelect);

/* Enable VTC Generator */

XVtc_Enable Generator(&Vtc);