#include "xvtc_hw.h"
#include "xstatus.h"
Go to the source code of this file.
The VTC device detects video signals, independently overrides any one of them, re-generates video signals with +/- delay and with polarity inversion, and generates up to 16 one cycle Frame Sync outputs.
The device has the following main features:
For a full description of VTC features, please see the hardware specification.
Interrupt Service
The interrupt types supported are:
Software Initialization
The application needs to do following steps in order for preparing the VTC to be ready to process video signal handling.
Examples
An example is provided with this driver to demonstrate the driver usage.
Cache Coherency
Alignment
Limitations
BUS Interface
MODIFICATION HISTORY:
Ver Who Date Changes ----- ---- -------- ----------------------------------------------- 1.00a xd 08/05/08 First release 1.01a xd 07/23/10 Added GIER; Added more h/w generic info into xparameters.h; Feed callbacks with pending interrupt info. Added Doxygen & Version support 2.00a xd 05/13/11 1. Renamed to "Video Timing Controller" 2. Added Generator/Detector VBlank/VSync Horizontal offset setup/fetch support; 3. Renamed the IP to support to be axi_vtc; 4. Supported sync between generator and detector; 5. Renamed XVtc_SetSync() to XVtc_SetFSync(); 6. Renamed XVtc_GetSync() to XVtc_GetFSync(); 7. Removed unnecessary register write in XVtc_Reset(); 8. Corrected driver name in .mdd file 9. Updated register bit definition(a few fields grow from 12 to 13 bit wide) 2.00a cm 05/25/11 1. Renamed XVtc_SetSkip() to XVtc_SetSkipLine(); 2. Renamed XVtc_GetSkip() to XVtc_GetSkipLine(); 3. Added XVtc_SetSkipPixel(); 4. Added XVtc_GetSkipPixel(); 5. Renamed XVTC_CTL_GACS_MASK to XVTC_CTL_GACLS_MASK 6. Added XVTC_CTL_GACPS_MASK
Definition in file xvtc.h.
#define XVtc_DisableSync | ( | InstancePtr | ) |
Value:
{ \ XVtc_WriteReg((InstancePtr)->Config.BaseAddress, XVTC_CTL, \ XVtc_ReadReg((InstancePtr)->Config.BaseAddress, XVTC_CTL) & \ ~XVTC_CTL_SE_MASK); \ }
InstancePtr | is a pointer to the VTC device instance to be worked on. |
#define XVtc_EnableSync | ( | InstancePtr | ) |
Value:
{ \ XVtc_WriteReg((InstancePtr)->Config.BaseAddress, XVTC_CTL, \ XVtc_ReadReg((InstancePtr)->Config.BaseAddress, XVTC_CTL) | \ XVTC_CTL_SE_MASK); \ }
InstancePtr | is a pointer to the VTC device instance to be worked on. |
#define XVtc_GetDetectionStatus | ( | InstancePtr | ) | XVtc_ReadReg((InstancePtr)->Config.BaseAddress, XVTC_DS) |
This function gets the status of the Detector in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. |
#define XVtc_IntrClear | ( | InstancePtr, | |||
IntrType | ) |
Value:
XVtc_WriteReg((InstancePtr)->Config.BaseAddress, XVTC_ISR, \ (IntrType) & XVTC_IXR_ALLINTR_MASK)
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
IntrType | is the pending interrupts to clear/acknowledge. Use OR'ing of XVTC_IXR_* constants defined in xvtc_hw.h to create this parameter value. |
#define XVtc_IntrDisable | ( | InstancePtr, | |||
IntrType | ) |
Value:
XVtc_WriteReg((InstancePtr)->Config.BaseAddress, XVTC_IER, \ XVtc_ReadReg((InstancePtr)->Config.BaseAddress, XVTC_IER) \ & ((~(IntrType)) & XVTC_IXR_ALLINTR_MASK))
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
IntrType | is the type of the interrupts to disable. Use OR'ing of XVTC_IXR_* constants defined in xvtc_hw.h to create this parameter value. |
C-style signature: void XVtc_IntrDisable(XVtc *InstancePtr, u32 IntrType)
#define XVtc_IntrDisableGlobal | ( | InstancePtr | ) | XVtc_WriteReg((InstancePtr)->Config.BaseAddress, XVTC_GIER, 0) |
This macro disables the global interrupt on a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. |
#define XVtc_IntrEnable | ( | InstancePtr, | |||
IntrType | ) |
Value:
XVtc_WriteReg((InstancePtr)->Config.BaseAddress, XVTC_IER, \ ((IntrType) & XVTC_IXR_ALLINTR_MASK) | \ XVtc_ReadReg((InstancePtr)->Config.BaseAddress, XVTC_IER))
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
IntrType | is the type of the interrupts to enable. Use OR'ing of XVTC_IXR_* constants defined in xvtc_hw.h to create this parameter value. |
C-style signature: void XVtc_IntrEnable(XVtc *InstancePtr, u32 IntrType)
#define XVtc_IntrEnableGlobal | ( | InstancePtr | ) |
Value:
XVtc_WriteReg((InstancePtr)->Config.BaseAddress, XVTC_GIER,\ XVTC_GIER_GIE_MASK)
InstancePtr | is a pointer to the VTC device instance to be worked on. |
#define XVtc_IntrGetPending | ( | InstancePtr | ) |
Value:
(XVtc_ReadReg((InstancePtr)->Config.BaseAddress, XVTC_IER) & \ XVtc_ReadReg((InstancePtr)->Config.BaseAddress, XVTC_ISR) & \ XVTC_IXR_ALLINTR_MASK)
InstancePtr | is a pointer to the VTC device instance to be worked on. |
#define XVtc_IntrSetLockPolarity | ( | InstancePtr, | |||
LockPolarity | ) |
Value:
{ \ if (LockPolarity) { \ XVtc_WriteReg((InstancePtr)->Config.BaseAddress, \ XVTC_CTL, \ XVtc_ReadReg((InstancePtr)->Config.BaseAddress, \ XVTC_CTL) | XVTC_CTL_LP_MASK); \ } \ else { \ XVtc_WriteReg((InstancePtr)->Config.BaseAddress, \ XVTC_CTL, \ XVtc_ReadReg((InstancePtr)->Config.BaseAddress, \ XVTC_CTL) & (~XVTC_CTL_LP_MASK)); \ } \ }
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
LockPolarity | indicates the edge at which the interrupts above trigger. Use any non-0 for triggering on rising edge of lock. Use 0 for triggering on falling edge of lock. |
#define XVtc_Reset | ( | InstancePtr | ) |
Value:
{ \ XVtc_WriteReg((InstancePtr)->Config.BaseAddress, XVTC_RESET, \ XVTC_RESET_RESET_MASK); \ }
InstancePtr | is a pointer to the VTC device instance to be worked on. |
typedef void(* XVtc_CallBack)(void *CallBackRef, u32 Mask) |
Callback type for all interrupts except error interrupt.
CallBackRef | is a callback reference passed in by the upper layer when setting the callback functions, and passed back to the upper layer when the callback is invoked. | |
Mask | is a bit mask indicating the cause of the event. For current device version, this parameter is "OR" of 0 or more XVTC_IXR_* constants defined in xvtc_hw.h |
typedef void(* XVtc_ErrorCallBack)(void *CallBackRef, u32 ErrorMask) |
Callback type for Error interrupt.
CallBackRef | is a callback reference passed in by the upper layer when setting the callback functions, and passed back to the upper layer when the callback is invoked. | |
ErrorMask | is a bit mask indicating the cause of the error. For current device version, this parameter always have value 0 and could be ignored. |
int XVtc_CfgInitialize | ( | XVtc * | InstancePtr, | |
XVtc_Config * | CfgPtr, | |||
u32 | EffectiveAddr | |||
) |
This function initializes a VTC device.
This function must be called prior to using a VTC device. Initialization of a VTC includes setting up the instance data, and ensuring the hardware is in a quiescent state.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
CfgPtr | points to the configuration structure associated with the VTC device. | |
EffectiveAddr | is the base address of the device. If address translation is being used, then this parameter must reflect the virtual base address. Otherwise, the physical address should be used. |
void XVtc_Disable | ( | XVtc * | InstancePtr, | |
u32 | Type | |||
) |
This function disables a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
Type | indicates which module (Detector and/or Generator) to disable. Valid values could be obtained by bit ORing of XVTC_EN_DETECTOR and XVTC_EN_GENERATOR |
void XVtc_Enable | ( | XVtc * | InstancePtr, | |
u32 | Type | |||
) |
This function enables a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
Type | indicates which module (Detector and/or Generator) to enable. Valid values could be obtained by bit ORing of XVTC_EN_DETECTOR and XVTC_EN_GENERATOR. |
void XVtc_GetDelay | ( | XVtc * | InstancePtr, | |
int * | VertDelayPtr, | |||
int * | HoriDelayPtr | |||
) |
This function gets the Generator delay setting used by a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
VertDelayPtr | will point to a value indicating the number of total lines per frame to delay the generator output after this function returns. | |
HoriDelayPtr | will point to a value indicating the number of total clock cycles per line to delay the generator output after this function returns. |
void XVtc_GetDetector | ( | XVtc * | InstancePtr, | |
XVtc_VtcSignal * | SignalCfgPtr | |||
) |
This function gets the VTC signal setting used by the Detector module in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
SignalCfgPtr | is a pointer to a VTC signal configuration which will be populated with the setting used by the Detector module in the VTC device once this function returns. |
void XVtc_GetDetectorHoriOffset | ( | XVtc * | InstancePtr, | |
XVtc_HoriOffsets * | HoriOffsets | |||
) |
This function gets the VBlank/VSync Horizontal Offsets detected by the Detector in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
HoriOffsets | points to a VBlank/VSync Horizontal Offset configuration structure that will be populated with the setting detected on the Detector in the given VTC device after this function returns. |
void XVtc_GetFSync | ( | XVtc * | InstancePtr, | |
u16 | FrameSyncIndex, | |||
u16 * | VertStartPtr, | |||
u16 * | HoriStartPtr | |||
) |
This function gets the SYNC setting of a Frame Sync used by VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
FrameSyncIndex | indicates the index number of the frame sync. The valid range is from 0 to 15. | |
VertStartPtr | will point to the value that indicates the vertical line count during which the Frame Sync is active once this function returns. | |
HoriStartPtr | will point to the value that indicates the horizontal cycle count during which the Frame Sync is active once this function returns. |
void XVtc_GetGenerator | ( | XVtc * | InstancePtr, | |
XVtc_VtcSignal * | SignalCfgPtr | |||
) |
This function gets the VTC signal setting used by the Generator module in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
SignalCfgPtr | is a pointer to a VTC signal configuration which will be populated with the setting used by the Generator module in the VTC device once this function returns. |
void XVtc_GetGeneratorHoriOffset | ( | XVtc * | InstancePtr, | |
XVtc_HoriOffsets * | HoriOffsets | |||
) |
This function gets the VBlank/VSync Horizontal Offsets currently used by the Generator in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
HoriOffsets | points to a VBlank/VSync Horizontal Offset configuration structure that will be populated with the setting currently used on the Generator in the given VTC device after this function returns. |
void XVtc_GetPolarity | ( | XVtc * | InstancePtr, | |
XVtc_Polarity * | PolarityPtr | |||
) |
This function gets the output polarity setting used by a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
PolarityPtr | points to a Polarity configuration structure that will be populated with the setting used on the VTC device after this function returns. |
void XVtc_GetSkipLine | ( | XVtc * | InstancePtr, | |
int * | GeneratorChromaSkipPtr | |||
) |
This function gets the line skip setting used by the Generator in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
GeneratorChromaSkipPtr | will point to the value indicating whether 1 line is skipped between active chroma for the Generator module after this function returns. value 1 means that 1 line is skipped, and 0 means that no lines are skipped |
void XVtc_GetSkipPixel | ( | XVtc * | InstancePtr, | |
int * | GeneratorChromaSkipPtr | |||
) |
This function gets the pixel skip setting used by the Generator in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
GeneratorChromaSkipPtr | will point to the value indicating whether 1 pixel is skipped between active chroma for the Generator module after this function returns. value 1 means that 1 pixel is skipped, and 0 means that no pixels are skipped |
void XVtc_GetSource | ( | XVtc * | InstancePtr, | |
XVtc_SourceSelect * | SourcePtr | |||
) |
This function gets the source select setting used by a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on | |
SourcePtr | points to a source select configuration structure that will be populated with the setting used on the VTC device after this function returns |
void XVtc_GetVersion | ( | XVtc * | InstancePtr, | |
u16 * | Major, | |||
u16 * | Minor, | |||
u16 * | Revision | |||
) |
This function returns the version of a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
Major | points to an unsigned 16-bit variable that will be assigned with the major version number after this function returns. Value range is from 0x0 to 0xF. | |
Minor | points to an unsigned 16-bit variable that will be assigned with the minor version number after this function returns. Value range is from 0x00 to 0xFF. | |
Revision | points to an unsigned 16-bit variable that will be assigned with the revision version number after this function returns. Value range is from 0xA to 0xF. |
void XVtc_IntrHandler | ( | void * | InstancePtr | ) |
This function is the interrupt handler for the VTC driver.
This handler reads the pending interrupt from the IER/ISR, determines the source of the interrupts, calls according callbacks, and finally clears the interrupts.
The application is responsible for connecting this function to the interrupt system. Application beyond this driver is also responsible for providing callbacks to handle interrupts and installing the callbacks using XVtc_SetCallBack() during initialization phase. An example delivered with this driver demonstrates how this could be done.
InstancePtr | is a pointer to the XVtc instance that just interrupted. |
Definition at line 93 of file xvtc_intr.c.
XVtc_Config* XVtc_LookupConfig | ( | u16 | DeviceId | ) |
XVtc_LookupConfig returns a reference to an XVtc_Config structure based on the unique device id, DeviceId.
The return value will refer to an entry in the device configuration table defined in the xvtc_g.c file.
DeviceId | is the unique device ID of the device for the lookup operation. |
Definition at line 101 of file xvtc_sinit.c.
int XVtc_SetCallBack | ( | XVtc * | InstancePtr, | |
u32 | HandlerType, | |||
void * | CallBackFunc, | |||
void * | CallBackRef | |||
) |
This routine installs an asynchronous callback function for the given HandlerType:.
HandlerType Callback Function Type ----------------------- --------------------------- XVTC_HANDLER_FRAMESYNC XVtc_FrameSyncCallBack XVTC_HANDLER_LOCK XVtc_LockCallBack XVTC_HANDLER_DETECTOR XVtc_DetectorCallBack XVTC_HANDLER_GENERATOR XVtc_GeneratorCallBack XVTC_HANDLER_ERROR XVtc_ErrCallBack
HandlerType Invoked by this driver when: ----------------------- -------------------------------------------------- XVTC_HANDLER_FRAMESYNC A frame sync event happens XVTC_HANDLER_LOCK A signal lock event happens XVTC_HANDLER_DETECTOR A detector related event happens XVTC_HANDLER_GENERATOR A generator related event happens XVTC_HANDLER_ERROR An error condition happens
InstancePtr | is a pointer to the XVtc instance to be worked on. | |
HandlerType | specifies which callback is to be attached. | |
CallbackFunc | is the address of the callback function. | |
CallbackRef | is a user data item that will be passed to the callback function when it is invoked. |
Definition at line 179 of file xvtc_intr.c.
void XVtc_SetDelay | ( | XVtc * | InstancePtr, | |
int | VertDelay, | |||
int | HoriDelay | |||
) |
This function sets up the Generator delay setting of a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
VertDelay | indicates the number of total lines per frame to delay the generator output. The valid range is from 0 to 4095. | |
HoriDelay | indicates the number of total clock cycles per line to delay the generator output. The valid range is from 0 to 4095. |
void XVtc_SetFSync | ( | XVtc * | InstancePtr, | |
u16 | FrameSyncIndex, | |||
u16 | VertStart, | |||
u16 | HoriStart | |||
) |
This function sets up the SYNC setting of a Frame Sync used by VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
FrameSyncIndex | indicates the index number of the frame sync. The valid range is from 0 to 15. | |
VertStart | indicates the vertical line count during which the Frame Sync is active. The valid range is from 0 to 4095. | |
HoriStart | indicates the horizontal cycle count during which the Frame Sync is active. The valid range is from 0 to 4095. |
void XVtc_SetGenerator | ( | XVtc * | InstancePtr, | |
XVtc_VtcSignal * | SignalCfgPtr | |||
) |
This function sets up VTC signal to be used by the Generator module in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
SignalCfgPtr | is a pointer to the VTC signal configuration to be used by the Generator module in the VTC device. |
void XVtc_SetGeneratorHoriOffset | ( | XVtc * | InstancePtr, | |
XVtc_HoriOffsets * | HoriOffsets | |||
) |
This function sets the VBlank/VSync Horizontal Offsets for the Generator in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
HoriOffsets | points to a VBlank/VSync Horizontal Offset configuration with the setting to use on the VTC device. |
void XVtc_SetPolarity | ( | XVtc * | InstancePtr, | |
XVtc_Polarity * | PolarityPtr | |||
) |
void XVtc_SetSkipLine | ( | XVtc * | InstancePtr, | |
int | GeneratorChromaSkip | |||
) |
This function sets up the line skip setting of the Generator in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
GeneratorChromaSkip | indicates whether to skip 1 line between active chroma for the Generator module. Use Non-0 value for this parameter to skip 1 line, and 0 to not skip lines |
void XVtc_SetSkipPixel | ( | XVtc * | InstancePtr, | |
int | GeneratorChromaSkip | |||
) |
This function sets up the pixel skip setting of the Generator in a VTC device.
InstancePtr | is a pointer to the VTC device instance to be worked on. | |
GeneratorChromaSkip | indicates whether to skip 1 pixel between active chroma for the Generator module. Use Non-0 value for this parameter to skip 1 pixel, and 0 to not skip pixels |
void XVtc_SetSource | ( | XVtc * | InstancePtr, | |
XVtc_SourceSelect * | SourcePtr | |||
) |