enhance: Added files to enhance_v7_0 driver.

Added source files, integration files, self test example,
mdd and tcl files to enhance_v7_0 driver.

Signed-off-by: Shravan Kumar A <skumara@xilinx.com>
Acked-by: Srikanth Vemula <svemula@xilinx.com>
This commit is contained in:
Shravan Kumar A 2014-07-10 18:29:26 +05:30 committed by Jagannadha Sutradharudu Teki
parent 1b561d8e6b
commit d730ba136c
14 changed files with 2463 additions and 619 deletions

View file

@ -1,45 +1,43 @@
###############################################################################
#
# Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# Use of the Software is limited solely to applications:
# (a) running on a Xilinx device, or
# (b) that interact with a Xilinx device through a bus or interconnect.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# Except as contained in this notice, the name of the Xilinx shall not be used
# in advertising or otherwise to promote the sale, use or other dealings in
# this Software without prior written authorization from Xilinx.
#
###############################################################################
OPTION psf_version = 2.1;
BEGIN driver enhance
OPTION supported_peripherals = (v_enhance_v[8]_[0-9]);
OPTION driver_state = ACTIVE;
OPTION copyfiles = all;
OPTION VERSION = 7.0;
OPTION NAME = enhance;
END driver
##############################################################################
#
# Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"),to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# Use of the Software is limited solely to applications:
# (a) running on a Xilinx device, or
# (b) that interact with a Xilinx device through a bus or interconnect.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# Except as contained in this notice, the name of the Xilinx shall not be used
# in advertising or otherwise to promote the sale, use or other dealings in
# this Software without prior written authorization from Xilinx.
###############################################################################
OPTION psf_version = 2.1;
BEGIN driver enhance
OPTION supported_peripherals = (v_enhance_v[8]_[0-9]);
OPTION driver_state = ACTIVE;
OPTION copyfiles = all;
OPTION VERSION = 7.0;
OPTION NAME = enhance;
END driver

View file

@ -1,37 +1,37 @@
###############################################################################
#
# Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# Use of the Software is limited solely to applications:
# (a) running on a Xilinx device, or
# (b) that interact with a Xilinx device through a bus or interconnect.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# Except as contained in this notice, the name of the Xilinx shall not be used
# in advertising or otherwise to promote the sale, use or other dealings in
# this Software without prior written authorization from Xilinx.
#
###############################################################################
proc generate {drv_handle} {
xdefine_include_file $drv_handle "xparameters.h" "ENHANCE" "NUM_INSTANCES" "C_BASEADDR" "C_HIGHADDR" "DEVICE_ID" "C_S_AXIS_VIDEO_DATA_WIDTH" "C_S_AXIS_VIDEO_FORMAT" "C_S_AXIS_VIDEO_TDATA_WIDTH" "C_M_AXIS_VIDEO_DATA_WIDTH" "C_M_AXIS_VIDEO_FORMAT" "C_M_AXIS_VIDEO_TDATA_WIDTH" "C_HAS_AXI4_LITE" "C_HAS_DEBUG" "C_HAS_INTC_IF" "C_MAX_COLS" "C_ACTIVE_COLS" "C_ACTIVE_ROWS" "C_HAS_NOISE" "C_HAS_ENHANCE" "C_HAS_HALO" "C_HAS_ALIAS" "C_OPT_SIZE" "C_NOISE_THRESHOLD" "C_ENHANCE_STRENGTH" "C_HALO_SUPPRESS"
xdefine_canonical_xpars $drv_handle "xparameters.h" "ENHANCE" "DEVICE_ID" "C_BASEADDR" "C_HIGHADDR" "C_S_AXIS_VIDEO_DATA_WIDTH" "C_S_AXIS_VIDEO_FORMAT" "C_S_AXIS_VIDEO_TDATA_WIDTH" "C_M_AXIS_VIDEO_DATA_WIDTH" "C_M_AXIS_VIDEO_FORMAT" "C_M_AXIS_VIDEO_TDATA_WIDTH" "C_HAS_AXI4_LITE" "C_HAS_DEBUG" "C_HAS_INTC_IF" "C_MAX_COLS" "C_ACTIVE_COLS" "C_ACTIVE_ROWS" "C_HAS_NOISE" "C_HAS_ENHANCE" "C_HAS_HALO" "C_HAS_ALIAS" "C_OPT_SIZE" "C_NOISE_THRESHOLD" "C_ENHANCE_STRENGTH" "C_HALO_SUPPRESS"
}
##############################################################################
#
# Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"),to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# Use of the Software is limited solely to applications:
# (a) running on a Xilinx device, or
# (b) that interact with a Xilinx device through a bus or interconnect.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# Except as contained in this notice, the name of the Xilinx shall not be used
# in advertising or otherwise to promote the sale, use or other dealings in
# this Software without prior written authorization from Xilinx.
###############################################################################
proc generate {drv_handle} {
xdefine_include_file $drv_handle "xparameters.h" "ENHANCE" "NUM_INSTANCES" "DEVICE_ID" "C_BASEADDR" "C_HIGHADDR" "C_S_AXIS_VIDEO_FORMAT" "C_M_AXIS_VIDEO_FORMAT" "C_HAS_AXI4_LITE" "C_HAS_INTC_IF" "C_HAS_DEBUG" "C_MAX_COLS" "C_ACTIVE_COLS" "C_ACTIVE_ROWS" "C_HAS_NOISE" "C_HAS_ENHANCE" "C_HAS_HALO" "C_HAS_ALIAS" "C_OPT_SIZE" "C_NOISE_THRESHOLD" "C_ENHANCE_STRENGTH" "C_HALO_SUPPRESS"
xdefine_config_file $drv_handle "xenhance_g.c" "XEnhance" "DEVICE_ID" "C_BASEADDR" "C_S_AXIS_VIDEO_FORMAT" "C_M_AXIS_VIDEO_FORMAT" "C_HAS_INTC_IF" "C_HAS_DEBUG" "C_MAX_COLS" "C_ACTIVE_COLS" "C_ACTIVE_ROWS" "C_HAS_NOISE" "C_HAS_ENHANCE" "C_HAS_HALO" "C_HAS_ALIAS" "C_OPT_SIZE" "C_NOISE_THRESHOLD" "C_ENHANCE_STRENGTH" "C_HALO_SUPPRESS"
xdefine_canonical_xpars $drv_handle "xparameters.h" "ENHANCE" "DEVICE_ID" "C_BASEADDR" "C_HIGHADDR" "C_S_AXIS_VIDEO_FORMAT" "C_M_AXIS_VIDEO_FORMAT" "C_HAS_INTC_IF" "C_HAS_DEBUG" "C_MAX_COLS" "C_ACTIVE_COLS" "C_ACTIVE_ROWS" "C_HAS_NOISE" "C_HAS_ENHANCE" "C_HAS_HALO" "C_HAS_ALIAS" "C_OPT_SIZE" "C_NOISE_THRESHOLD" "C_ENHANCE_STRENGTH" "C_HALO_SUPPRESS"
}

View file

@ -0,0 +1,161 @@
/******************************************************************************
*
* (c) Copyright 2010-14 Xilinx, Inc. All rights reserved.
*
* This file contains confidential and proprietary information of Xilinx, Inc.
* and is protected under U.S. and international copyright and other
* intellectual property laws.
*
* DISCLAIMER
* This disclaimer is not a license and does not grant any rights to the
* materials distributed herewith. Except as otherwise provided in a valid
* license issued to you by Xilinx, and to the maximum extent permitted by
* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL
* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS,
* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE
* and (2) Xilinx shall not be liable (whether in contract or tort, including
* negligence, or under any other theory of liability) for any loss or damage
* of any kind or nature related to, arising under or in connection with these
* materials, including for any direct, or any indirect, special, incidental,
* or consequential loss or damage (including loss of data, profits, goodwill,
* or any type of loss or damage suffered as a result of any action brought by
* a third party) even if such damage or loss was reasonably foreseeable or
* Xilinx had been advised of the possibility of the same.
*
* CRITICAL APPLICATIONS
* Xilinx products are not designed or intended to be fail-safe, or for use in
* any application requiring fail-safe performance, such as life-support or
* safety devices or systems, Class III medical devices, nuclear facilities,
* applications related to the deployment of airbags, or any other applications
* that could lead to death, personal injury, or severe property or
* environmental damage (individually and collectively, "Critical
* Applications"). Customer assumes the sole risk and liability of any use of
* Xilinx products in Critical Applications, subject only to applicable laws
* and regulations governing limitations on product liability.
*
* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE
* AT ALL TIMES.
*
******************************************************************************/
/*****************************************************************************/
/**
*
* @file enhance_selftest_example.c
*
* This file contains an example using the XEnhance driver to do self test
* on the device.
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ------ -------- -----------------------------------------------
* 1.00a drg/jz 01/13/10 First Release
* 1.03a sg 08/14/12 Updated the example for CR 666306. Modified
* the device ID to use the first Device Id
* Removed the printf at the start of the main
* 7.0 adk 02/19/14 Modified function names as per guidelines
* </pre>
*
******************************************************************************/
/***************************** Include Files *********************************/
#include "xenhance.h"
#include "xparameters.h"
#include "xil_printf.h"
/************************** Constant Definitions *****************************/
/*
* The following constants map to the XPAR parameters created in the
* xparameters.h file. They are defined here such that a user can easily
* change all the needed parameters in one place.
*/
/**************************** Type Definitions *******************************/
/***************** Macros (Inline Functions) Definitions *********************/
/************************** Function Prototypes ******************************/
u32 XEnhanceSelfTestExample(u16 DeviceId);
/************************** Variable Definitions *****************************/
XEnhance InstancePtr; /**< Instance of the Enhance Device */
/*****************************************************************************/
/**
*
* Main function to call the example.
*
* @return XST_SUCCESS if successful, otherwise XST_FAILURE.
*
* @note None.
*
******************************************************************************/
int main(void)
{
u32 Status;
/*
* Run the selftest example
*/
Status = XEnhanceSelfTestExample((u16)XPAR_ENHANCE_0_DEVICE_ID);
if (Status != XST_SUCCESS) {
xil_printf("ENHANCE Selftest Example Failed\r\n");
return XST_FAILURE;
}
xil_printf("Successfully ran ENHANCE Selftest Example\r\n");
return XST_SUCCESS;
}
/*****************************************************************************/
/**
*
* This function does a minimal test on the XEnhance driver.
*
*
* @param DeviceId is the XPAR_<ENHANCE_instance>_DEVICE_ID value from
* xparameters.h.
*
* @return XST_SUCCESS if successful, otherwise XST_FAILURE.
*
* @note None.
*
******************************************************************************/
u32 XEnhanceSelfTestExample(u16 DeviceId)
{
u32 Status;
XEnhance_Config *Config;
/*
* Initialize the ENHANCE driver so that it's ready to use
* Look up the configuration in the config table,
* then initialize it.
*/
Config = XEnhance_LookupConfig(DeviceId);
if (NULL == Config) {
return XST_FAILURE;
}
Status = XEnhance_CfgInitialize(&InstancePtr, Config,
Config->BaseAddress);
if (Status != (u32)XST_SUCCESS) {
return (u32)XST_FAILURE;
}
/*
* Perform a self-test to check hardware build.
*/
Status = XEnhance_SelfTest(&InstancePtr);
if (Status != (u32)XST_SUCCESS) {
return (u32)XST_FAILURE;
}
return XST_SUCCESS;
}

View file

@ -1,152 +0,0 @@
/******************************************************************************
* (c) Copyright 2009-2013 Xilinx, Inc. All rights reserved.
*
* This file contains confidential and proprietary information
* of Xilinx, Inc. and is protected under U.S. and
* international copyright and other intellectual property
* laws.
*
* DISCLAIMER
* This disclaimer is not a license and does not grant any
* rights to the materials distributed herewith. Except as
* otherwise provided in a valid license issued to you by
* Xilinx, and to the maximum extent permitted by applicable
* law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
* WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
* AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
* BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
* INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
* (2) Xilinx shall not be liable (whether in contract or tort,
* including negligence, or under any other theory of
* liability) for any loss or damage of any kind or nature
* related to, arising under or in connection with these
* materials, including for any direct, or any indirect,
* special, incidental, or consequential loss or damage
* (including loss of data, profits, goodwill, or any type of
* loss or damage suffered as a result of any action brought
* by a third party) even if such damage or loss was
* reasonably foreseeable or Xilinx had been advised of the
* possibility of the same.
*
* CRITICAL APPLICATIONS
* Xilinx products are not designed or intended to be fail-
* safe, or for use in any application requiring fail-safe
* performance, such as life-support or safety devices or
* systems, Class III medical devices, nuclear facilities,
* applications related to the deployment of airbags, or any
* other applications that could lead to death, personal
* injury, or severe property or environmental damage
* (individually and collectively, "Critical
* Applications"). Customer assumes the sole risk and
* liability of any use of Xilinx products in Critical
* Applications, subject only to applicable laws and
* regulations governing limitations on product liability.
*
* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
* PART OF THIS FILE AT ALL TIMES.
******************************************************************************/
/*****************************************************************************/
/**
*
* @file example.c
*
* This file demonstrates how to use Xilinx Image Enhancement (Enhance)
* driver of the Xilinx Image Enhancement core. This code does not
* cover the Enhance setup and any other configuration which might be
* required to get the Enhance device working properly.
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ---- -------- -------------------------------------------------------
* 5.00a vc 06/19/13 Updated for new edge enhancement and noise reduction algorithms and registers
* 4.00a vc 12/18/12 Updated for new gain quantization levels
* 4.00a vc 10/16/12 Switched from Xuint32 to u32
* Renamed example function to main()
* Renamed reference to XPAR_ENHANCE_0_BASEADDR
* 4.00a vc 04/24/12 Updated for v4.00.a
* 2.00a vc 12/14/10 First release
* </pre>
*
* ***************************************************************************
*/
#include "enhance.h"
#include "xparameters.h"
/***************************************************************************/
// Image Enhancement Register Reading Example
// This function provides an example of how to read the current configuration
// settings of the Enhance core.
/***************************************************************************/
void report_enhance_settings(u32 BaseAddress) {
xil_printf("Image Edge Enhancement Core Configuration:\r\n");
xil_printf(" Enhance Version: 0x%08x\r\n", ENHANCE_ReadReg(BaseAddress, ENHANCE_VERSION));
xil_printf(" Enhance Enable Bit: %1d\r\n", ENHANCE_ReadReg(BaseAddress, ENHANCE_CONTROL) & ENHANCE_CTL_EN_MASK);
xil_printf(" Enhance Register Update Bit: %1d\r\n", (ENHANCE_ReadReg(BaseAddress, ENHANCE_CONTROL) & ENHANCE_CTL_RU_MASK) >> 1);
xil_printf(" Enhance Reset Bit: %1d\r\n", (ENHANCE_ReadReg(BaseAddress, ENHANCE_CONTROL) & ENHANCE_CTL_RESET) >> 31);
xil_printf(" Enhance AutoReset Bit: %1d\r\n", (ENHANCE_ReadReg(BaseAddress, ENHANCE_CONTROL) & ENHANCE_CTL_AUTORESET) >> 30);
xil_printf(" Active Columns=%d, Active Rows=%d\r\n",
ENHANCE_ReadReg(BaseAddress, ENHANCE_ACTIVE_SIZE)&0x0000FFFF,
ENHANCE_ReadReg(BaseAddress, ENHANCE_ACTIVE_SIZE)>>16);
xil_printf(" Noise Threshold=%d, Enhance Strength=%d, Halo Suppression=%d\r\n",
ENHANCE_ReadReg(BaseAddress, ENHANCE_NOISE_THRESHOLD),
ENHANCE_ReadReg(BaseAddress, ENHANCE_ENHANCE_STRENGTH),
ENHANCE_ReadReg(BaseAddress, ENHANCE_HALO_SUPPRESS));
}
/***************************************************************************/
// Image Enhancement Register Update Example
// This function provides an example of the process used to update
// the noise, enhance, and halo registers in the Enhance core.
// In most video systems, it is expected that this process would be executed
// in response to an interrupt connected to the SOF video timing signal
// or a timeout signal associated with a watchdog timer.
/***************************************************************************/
void ENHANCE_Update_Example(u32 BaseAddress) {
//Enable the Enhance software enable
ENHANCE_Enable(BaseAddress);
//Disable register updates.
//This is the default operating mode for the Enhance core, and allows
//registers to be updated without effecting the core's behavior.
ENHANCE_RegUpdateDisable(BaseAddress);
//Set the noise threshold
// These values are integers in the range: [0, 2^DATA_WIDTH-1]
ENHANCE_WriteReg(BaseAddress, ENHANCE_NOISE_THRESHOLD, 255); //maximum value for 8 bit data
//Set the enhance strength and halo suppression factor
// These values are floating point values in the range: [0, 1]
// These are represented as integers by multiplying by 2^15,
// resulting in an integer value in the range from [0, 32728]
ENHANCE_WriteReg(BaseAddress, ENHANCE_ENHANCE_STRENGTH, 32768); //maximum value
ENHANCE_WriteReg(BaseAddress, ENHANCE_HALO_SUPPRESS, 32768); //maximum value
//Enable register updates.
//This mode will cause the active size and noise, enhance, halo registers internal
//to the Enhance core to automatically be updated on the next SOF
ENHANCE_RegUpdateEnable(BaseAddress);
}
/*****************************************************************************/
//
// This is the main function for the Enhance example.
//
/*****************************************************************************/
int main(void)
{
//Print the current settings for the Enhance core
report_enhance_settings(XPAR_ENHANCE_0_BASEADDR);
//Call the Enhance example, specify the Device ID generated in xparameters.h
ENHANCE_Update_Example(XPAR_ENHANCE_0_BASEADDR);
return 0;
}

View file

@ -1,17 +1,18 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Driver example applications</title>
<link rel="stylesheet" type="text/css" href="../help.css">
</head>
<body bgcolor="#FFFFFF">
<h1> Example Applications for the driver enhance_v6_0</h1>
<HR>
<ul>
<li>example.c <a href="example.c">(source)</a> </li>
</ul>
<p><font face="Times New Roman" color="#800000">Copyright <20> 1995-2014 Xilinx, Inc. All rights reserved.</font></p>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Driver example applications</title>
<link rel="stylesheet" type="text/css" href="../help.css">
</head>
<body bgcolor="#FFFFFF">
<h1> Example Applications for the driver enhance_v7_0 </h1>
<HR>
<ul>
<li>enhance_selftest_example.c <a href="enhance_selftest_example.c">(source)</a> </li>
</ul>
<p><font face="Times New Roman" color="#800000">Copyright ? 1995-2014 Xilinx, Inc. All rights reserved.</font></p>
</body>
</html>

View file

@ -1,29 +1,29 @@
COMPILER=
ARCHIVER=
CP=cp
COMPILER_FLAGS=
EXTRA_COMPILER_FLAGS=
LIB=libxil.a
LEVEL=0
RELEASEDIR=../../../lib
INCLUDEDIR=../../../include
INCLUDES=-I./. -I${INCLUDEDIR}
INCLUDEFILES=*.h
LIBSOURCES=*.c
OUTS = *.o
libs:
echo "Compiling enhance"
$(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
$(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OUTS}
make clean
include:
${CP} $(INCLUDEFILES) $(INCLUDEDIR)
clean:
rm -rf ${OUTS}
COMPILER=
ARCHIVER=
CP=cp
COMPILER_FLAGS=
EXTRA_COMPILER_FLAGS=
LIB=libxil.a
LEVEL=0
RELEASEDIR=../../../lib
INCLUDEDIR=../../../include
INCLUDES=-I./. -I${INCLUDEDIR}
INCLUDEFILES=*.h
LIBSOURCES=*.c
OUTS = *.o
libs:
echo "Compiling enhance"
$(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
$(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OUTS}
make clean
include:
${CP} $(INCLUDEFILES) $(INCLUDEDIR)
clean:
rm -rf ${OUTS}

View file

@ -1,277 +0,0 @@
/******************************************************************************
*
* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/**
*
* @file enhance.h
*
* This header file contains identifiers and register-level driver functions (or
* macros) that can be used to access the Xilinx Image Enhancement core instance.
*
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ---- -------- -------------------------------------------------------
* 5.00a vyc 06/19/13 Updated for ENHANCE V8.0
* New edge enhancement algorithm and registers
* Noise reduction support added
* 4.00a vyc 04/24/12 Updated for ENHANCE V4.00.a
* Converted from xio.h to xil_io.h, translating
* basic type, MB cache functions, exceptions and
* assertion to xil_io format.
* 3.00a rc 09/11/11 Updated for ENHANCE V3.0
* 2.00a vc 12/14/10 Updated for ENHANCE V2.0
* 6.0 adk 19/12/13 Updated as per the New Tcl API's
*
******************************************************************************/
#ifndef ENHANCE_DRIVER_H /* prevent circular inclusions */
#define ENHANCE_DRIVER_H /* by using protection macros */
#ifdef __cplusplus
extern "C" {
#endif
/***************************** Include Files *********************************/
#include "xil_io.h"
/************************** Constant Definitions *****************************/
/**
* Register Offsets
*/
/* General Control Registers */
#define ENHANCE_CONTROL 0x0000 /**< Control */
#define ENHANCE_STATUS 0x0004 /**< Status */
#define ENHANCE_ERROR 0x0008 /**< Error */
#define ENHANCE_IRQ_ENABLE 0x000C /**< IRQ Enable */
#define ENHANCE_VERSION 0x0010 /**< Version */
#define ENHANCE_SYSDEBUG0 0x0014 /**< System Debug 0 */
#define ENHANCE_SYSDEBUG1 0x0018 /**< System Debug 1 */
#define ENHANCE_SYSDEBUG2 0x001C /**< System Debug 2 */
/* Timing Control Registers */
#define ENHANCE_ACTIVE_SIZE 0x0020 /**< Horizontal and Vertical Active Frame Size */
/* Core Specific Registers */
#define ENHANCE_NOISE_THRESHOLD 0x0100 /**< Noise Reduction Control */
#define ENHANCE_ENHANCE_STRENGTH 0x0104 /**< Edge Enhancement Control */
#define ENHANCE_HALO_SUPPRESS 0x0108 /**< Halo Suppression Control */
/*****************************************************************************/
/**
* Control Register bit definition
*/
#define ENHANCE_CTL_EN_MASK 0x00000001 /**< Enable */
#define ENHANCE_CTL_RU_MASK 0x00000002 /**< Register Update */
#define ENHANCE_CTL_AUTORESET 0x40000000 /**< Software Reset - Auto-synchronize to SOF */
#define ENHANCE_CTL_RESET 0x80000000 /**< Software Reset - Instantaneous */
/***************** Macros (Inline Functions) Definitions *********************/
#define ENHANCE_In32 Xil_In32
#define ENHANCE_Out32 Xil_Out32
/*****************************************************************************/
/**
*
* Read the given register.
*
* @param BaseAddress is the Xilinx base address of the Image Enhancement core (from xparameters.h)
* @param RegOffset is the register offset of the register (defined at top of this file)
*
* @return The 32-bit value of the register
*
* @note
* C-style signature:
* u32 ENHANCE_ReadReg(u32 BaseAddress, u32 RegOffset)
*
******************************************************************************/
#define ENHANCE_ReadReg(BaseAddress, RegOffset) \
ENHANCE_In32((BaseAddress) + (RegOffset))
/*****************************************************************************/
/**
*
* Write the given register.
*
* @param BaseAddress is the Xilinx base address of the Image Enhancement core (from xparameters.h)
* @param RegOffset is the register offset of the register (defined at top of this file)
* @param Data is the 32-bit value to write to the register
*
* @return None.
*
* @note
* C-style signature:
* void ENHANCE_WriteReg(u32 BaseAddress, u32 RegOffset, u32 Data)
*
******************************************************************************/
#define ENHANCE_WriteReg(BaseAddress, RegOffset, Data) \
ENHANCE_Out32((BaseAddress) + (RegOffset), (Data))
/*****************************************************************************/
/**
*
* This macro enables a Image Enhancement core instance.
*
* @param BaseAddress is the Xilinx base address of the Image Enhancement core (from xparameters.h)
*
* @return None.
*
* @note
* C-style signature:
* void ENHANCE_Enable(u32 BaseAddress);
*
******************************************************************************/
#define ENHANCE_Enable(BaseAddress) \
ENHANCE_WriteReg(BaseAddress, ENHANCE_CONTROL, \
ENHANCE_ReadReg(BaseAddress, ENHANCE_CONTROL) | \
ENHANCE_CTL_EN_MASK)
/*****************************************************************************/
/**
*
* This macro disables a Image Enhancement core instance.
*
* @param BaseAddress is the Xilinx base address of the Image Enhancement core (from xparameters.h)
*
* @return None.
*
* @note
* C-style signature:
* void ENHANCE_Disable(u32 BaseAddress);
*
******************************************************************************/
#define ENHANCE_Disable(BaseAddress) \
ENHANCE_WriteReg(BaseAddress, ENHANCE_CONTROL, \
ENHANCE_ReadReg(BaseAddress, ENHANCE_CONTROL) & \
~ENHANCE_CTL_EN_MASK)
/*****************************************************************************/
/**
*
* This macro commits all the register value changes made so far by the software
* to the Image Enhancement core instance. The registers will be automatically updated
* on the next rising-edge of the SOF signal on the core.
* It is up to the user to manually disable the register update after a sufficient
* amount of time.
*
* This function only works when the Image Enhancement core is enabled.
*
* @param BaseAddress is the Xilinx base address of the Image Enhancement core (from xparameters.h)
*
* @return None.
*
* @note
* C-style signature:
* void ENHANCE_RegUpdateEnable(u32 BaseAddress);
*
******************************************************************************/
#define ENHANCE_RegUpdateEnable(BaseAddress) \
ENHANCE_WriteReg(BaseAddress, ENHANCE_CONTROL, \
ENHANCE_ReadReg(BaseAddress, ENHANCE_CONTROL) | \
ENHANCE_CTL_RU_MASK)
/*****************************************************************************/
/**
*
* This macro prevents the Image Enhancement core instance from committing recent changes made
* so far by the software. When disabled, changes to other configuration registers
* are stored, but do not effect the behavior of the core.
*
* This function only works when the Image Enhancement core is enabled.
*
* @param BaseAddress is the Xilinx base address of the Image Enhancement core (from xparameters.h)
*
* @return None.
*
* @note
* C-style signature:
* void ENHANCE_RegUpdateDisable(u32 BaseAddress);
*
******************************************************************************/
#define ENHANCE_RegUpdateDisable(BaseAddress) \
ENHANCE_WriteReg(BaseAddress, ENHANCE_CONTROL, \
ENHANCE_ReadReg(BaseAddress, ENHANCE_CONTROL) & \
~ENHANCE_CTL_RU_MASK)
/*****************************************************************************/
/**
*
* This macro resets a Image Enhancement core instance. This reset effects the core immediately,
* and may cause image tearing.
*
* This reset resets the Image Enhancement's configuration registers.
*
*
* @param BaseAddress is the Xilinx base address of the Image Enhancement core (from xparameters.h)
*
* @return None.
*
* @note
* C-style signature:
* void ENHANCE_Reset(u32 BaseAddress);
*
******************************************************************************/
#define ENHANCE_Reset(BaseAddress) \
ENHANCE_WriteReg(BaseAddress, ENHANCE_CONTROL, ENHANCE_CTL_RESET) \
/*****************************************************************************/
/**
*
* This macro resets a Image Enhancement core instance, but differs from ENHANCE_Reset() in that it
* automatically synchronizes to the SOF input of the core to prevent tearing.
*
* On the next SOF following a call to ENHANCE_AutoSyncReset(),
* all of the core's configuration registers and outputs will be reset, then the
* reset flag will be immediately released, allowing the core to immediately resume
* default operation.
*
* @param BaseAddress is the Xilinx base address of the Image Enhancement core (from xparameters.h)
*
* @return None.
*
* @note
* C-style signature:
* void ENHANCE_AutoSyncReset(u32 BaseAddress);
*
******************************************************************************/
#define ENHANCE_AutoSyncReset(BaseAddress) \
ENHANCE_WriteReg(BaseAddress, ENHANCE_CONTROL, ENHANCE_CTL_AUTORESET) \
/************************** Function Prototypes ******************************/
#ifdef __cplusplus
}
#endif
#endif /* end of protection macro */

View file

@ -0,0 +1,749 @@
/******************************************************************************
*
* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/*****************************************************************************/
/**
*
* @file xenhance.c
*
* This file contains the implementation of the interface functions for
* Enhance core. Refer to the header file xenhance.h for more detailed
* information.
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- --- -------- ---------------------------------------------------
* 2.00a vc 12/14/10 Updated for ENHANCE V2.0
* 3.00a rc 09/11/11 Updated for ENHANCE V3.0
* 4.00a vyc 04/24/12 Updated for ENHANCE V4.00.a
* Converted from xio.h to xil_io.h, translating
* basic type, MB cache functions, exceptions and
* assertion to xil_io format.
* 5.00a vyc 06/19/13 Updated for ENHANCE V8.0
* New edge enhancement algorithm and registers
* Noise reduction support added
* 6.0 adk 19/12/13 Updated as per the New Tcl API's
* 7.0 adk 02/19/14 Changed the filename from enhance.c to xenhance.c.
* Modified the following functions
* XENHANCE_CfgInitialize -> XEnhance_CfgInitialize
* XENHANCE_Setup -> XEnhance_Setup
*
* Implemented the following functions:
* XEnhance_GetVersion, XEnhance_EnableDbgByPass
* XEnhance_IsDbgByPassEnabled, XEnhance_DisableDbgBypass
* XEnhance_EnableDbgTestPattern,
* XEnhance_IsDbgTestPatternEnabled
* XEnhance_DisableDbgTestPattern
* XEnhance_GetDbgFrameCount, XEnhance_GetDbgLineCount,
* XEnhance_GetDbgPixelCount, XEnhance_SetActiveSize,
* XEnhance_GetActiveSize, XEnhance_SetNoiseThreshold,
* XEnhance_GetNoiseThreshold, XEnhance_SetEdgeStrength,
* XEnhance_GetEdgeStrength, XEnhance_SetHaloSuppress
* XEnhance_GetHaloSuppress.
* </pre>
*
******************************************************************************/
/***************************** Include Files *********************************/
#include "xenhance.h"
/************************** Constant Definitions *****************************/
/***************** Macros (Inline Functions) Definitions *********************/
/**************************** Type Definitions *******************************/
/************************** Function Prototypes ******************************/
static void StubErrCallBack(void *CallBackRef, u32 ErrorMask);
static void StubCallBack(void *CallBackRef);
/************************** Variable Definitions *****************************/
/************************** Function Definitions *****************************/
/****************************************************************************/
/**
*
* This function initializes a Enhance core. This function must be called
* prior to using a Enhance core. Initialization of a Enhance includes
* setting up the instance data, and ensuring the hardware is in a quiescent
* state.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
* @param CfgPtr is a reference to a configuration structure
* containing information about the Enhance core.
* @param EffectiveAddr is the base address of the core. If address
* translation is being used then this parameter must
* reflect the virtual base address. Otherwise, the physical
* address should be used.
*
* @return
* - XST_SUCCESS if initialization was successful.
*
* @note None.
*
******************************************************************************/
int XEnhance_CfgInitialize(XEnhance *InstancePtr, XEnhance_Config *CfgPtr,
u32 EffectiveAddr)
{
/* Verify arguments. */
Xil_AssertNonvoid(CfgPtr != NULL);
Xil_AssertNonvoid(EffectiveAddr != ((u32)0x0U));
/* Setup the instance */
(void)memset((void *)InstancePtr, 0, sizeof(XEnhance));
(void)memcpy((void *)&(InstancePtr->Config), (const void *)CfgPtr,
sizeof(XEnhance_Config));
InstancePtr->Config.BaseAddress = EffectiveAddr;
/* Set all handlers to stub values, let user configure this data
* later
*/
InstancePtr->ProcStartCallBack =
(XEnhance_CallBack)((void *)StubCallBack);
InstancePtr->FrameDoneCallBack =
(XEnhance_CallBack)((void *)StubCallBack);
InstancePtr->ErrCallBack =
(XEnhance_ErrorCallBack)((void *)StubErrCallBack);
/* Reset the hardware and set the flag to indicate the core is
* ready
*/
XEnhance_Reset(InstancePtr);
InstancePtr->IsReady = (u32)(XIL_COMPONENT_IS_READY);
return (XST_SUCCESS);
}
/*****************************************************************************/
/**
*
* This function sets the input/output frame size in Active Size register and
* enables the register update.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return None.
*
* @note None.
*
******************************************************************************/
void XEnhance_Setup(XEnhance *InstancePtr)
{
u32 Data;
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
XEnhance_RegUpdateDisable(InstancePtr);
/* Write active size register */
Data = ((((InstancePtr)->VSize) << (XENH_ACTSIZE_NUM_LINE_SHIFT)) &
(XENH_ACTSIZE_NUM_LINE_MASK)) |
(((InstancePtr)->HSize) &
(XENH_ACTSIZE_NUM_PIXEL_MASK));
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress,
(XENH_ACTIVE_SIZE_OFFSET), Data);
XEnhance_RegUpdateEnable(InstancePtr);
}
/*****************************************************************************/
/**
*
* This sets the bypass bit of the control register to switch the core to bypass
* mode if debug is enabled in the Enhance core.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return None.
*
* @note Debug functionality should be enabled..
*
******************************************************************************/
void XEnhance_EnableDbgByPass(XEnhance *InstancePtr)
{
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid((InstancePtr)->Config.HasDebug != (u16)0x0U);
/* Write into control register to set debug bypass. */
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress,
(XENH_CONTROL_OFFSET),
(XEnhance_ReadReg((InstancePtr)->Config.BaseAddress,
(XENH_CONTROL_OFFSET)) | ((XENH_CTL_BPE_MASK))));
}
/*****************************************************************************/
/**
*
* This function gets the current status of the bypass setting of the Enhance
* core.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return Core debug bypass mode.
* - TRUE = Bypass mode is enabled.
* - FALSE = Bypass mode is not enabled.
*
* @note Debug functionality should be enabled.
*
******************************************************************************/
int XEnhance_IsDbgByPassEnabled(XEnhance *InstancePtr)
{
u32 Data;
int Status;
/* Verify arguments. */
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid((InstancePtr)->Config.HasDebug != (u16)0x0U);
/* Read from control register to know debug bypass status. */
Data = XEnhance_ReadReg((InstancePtr)->Config.BaseAddress,
(XENH_CONTROL_OFFSET)) & ((u32)((XENH_CTL_BPE_MASK)));
if (Data == (XENH_CTL_BPE_MASK)) {
Status = (TRUE);
}
else {
Status = (FALSE);
}
return Status;
}
/*****************************************************************************/
/**
*
* This function disables Bypass mode of the Enhance core.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return None.
*
* @note Debug functionality should be enabled.
*
******************************************************************************/
void XEnhance_DisableDbgBypass(XEnhance *InstancePtr)
{
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid((InstancePtr)->Config.HasDebug != (u16)0x0U);
/* Write into control register to disable debug bypass. */
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress,
(XENH_CONTROL_OFFSET),
(XEnhance_ReadReg((InstancePtr)->Config.BaseAddress,
(XENH_CONTROL_OFFSET)) & (~(XENH_CTL_BPE_MASK))));
}
/*****************************************************************************/
/**
*
* This function sets the test-pattern mode of the Enhance core if debug
* features is enabled.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return None.
*
* @note Debug functionality should be enabled.
*
******************************************************************************/
void XEnhance_EnableDbgTestPattern(XEnhance *InstancePtr)
{
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->Config.HasDebug != (u16)0x0U);
/* Write into control register to set test pattern. */
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress,
(XENH_CONTROL_OFFSET),
((XEnhance_ReadReg((InstancePtr)->Config.BaseAddress,
(XENH_CONTROL_OFFSET))) |
((XENH_CTL_TPE_MASK))));
}
/*****************************************************************************/
/**
*
* This function gets the test-pattern mode if debug feature is enabled.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return Test-pattern generator mode.
* - TRUE = Test-pattern mode is enabled.
* - FALSE = Test-pattern mode is not enabled.
*
* @note Debug functionality should be enabled.
*
******************************************************************************/
int XEnhance_IsDbgTestPatternEnabled(XEnhance *InstancePtr)
{
u32 Data;
int Status;
/* Verify arguments. */
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->Config.HasDebug != (u16)0x0U);
/* Read from control register to know debug test pattern status. */
Data = XEnhance_ReadReg((InstancePtr)->Config.BaseAddress,
(XENH_CONTROL_OFFSET)) & ((XENH_CTL_TPE_MASK));
if (Data == (XENH_CTL_TPE_MASK)) {
Status = (TRUE);
}
else {
Status = (FALSE);
}
return Status;
}
/*****************************************************************************/
/**
*
* This function disables the test Pattern mode of the Enhance core.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return None.
*
* @note Debug functionality should be enabled.
*
******************************************************************************/
void XEnhance_DisableDbgTestPattern(XEnhance *InstancePtr)
{
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid((InstancePtr)->Config.HasDebug != (u16)0x0U);
/* Write into control register to disable debug bypass. */
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress,
(XENH_CONTROL_OFFSET),
((XEnhance_ReadReg((InstancePtr)->Config.BaseAddress,
(XENH_CONTROL_OFFSET))) &
(~(XENH_CTL_TPE_MASK))));
}
/*****************************************************************************/
/**
*
* This function returns the contents of Version register.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return Returns the contents of the Version register.
*
* @note None.
*
******************************************************************************/
u32 XEnhance_GetVersion(XEnhance *InstancePtr)
{
u32 Data;
/* Verify arguments. */
Xil_AssertNonvoid(InstancePtr != NULL);
/* Read version register of the Enhance core */
Data = XEnhance_ReadReg((InstancePtr)->Config.BaseAddress,
(XENH_VERSION_OFFSET));
return Data;
}
/*****************************************************************************/
/**
*
* This function gets number of frames processed since power-up or last
* time the core is reset.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return FrameCount is the number of frames processed since power-up.
*
* @note Debug functionality should be enabled.
*
******************************************************************************/
u32 XEnhance_GetDbgFrameCount(XEnhance *InstancePtr)
{
u32 FrameCount;
/* Verify argument. */
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->Config.HasDebug != (u16)0x0);
/* Reads Frame Throughput monitor */
FrameCount = XEnhance_ReadReg(InstancePtr->Config.BaseAddress,
(XENH_SYSDEBUG0_OFFSET));
return FrameCount;
}
/*****************************************************************************/
/**
*
* This function gets the number of lines processed since power-up or last
* time the core is reset.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return LineCount is the number of lines processed since power-up.
*
* @note Debug functionality should be enabled.
*
******************************************************************************/
u32 XEnhance_GetDbgLineCount(XEnhance *InstancePtr)
{
u32 LineCount;
/* Verify argument. */
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->Config.HasDebug != (u16)0x0);
/* Reads Line throughput monitor */
LineCount = XEnhance_ReadReg(InstancePtr->Config.BaseAddress,
(XENH_SYSDEBUG1_OFFSET));
return LineCount;
}
/*****************************************************************************/
/**
*
* This function gets the number of pixels processed since power-up or last
* time the core is reset.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return PixelCount is the number of pixels processed since power-up.
*
* @note Debug functionality should be enabled.
*
******************************************************************************/
u32 XEnhance_GetDbgPixelCount(XEnhance *InstancePtr)
{
u32 PixelCount;
/* Verify argument. */
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->Config.HasDebug != (u16)0x0);
/* Reads Pixel Throughput monitor */
PixelCount=XEnhance_ReadReg(InstancePtr->Config.BaseAddress,
(XENH_SYSDEBUG2_OFFSET));
return PixelCount;
}
/*****************************************************************************/
/**
*
* This function sets active H/V sizes in the Active size register.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
* @param HSize is number of Active Pixels per scan line to be set.
* Range of HSize is 32 to 7680.
* @param VSize is number of Active Lines per frame to be set.
* Range of VSize is 32 to 7680.
*
* @return None.
*
* @note None.
*
******************************************************************************/
void XEnhance_SetActiveSize(XEnhance *InstancePtr, u16 HSize, u16 VSize)
{
u32 Size;
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid((VSize >= (u16)(XENH_VSIZE_FIRST)) &&
(VSize <= (u16)(XENH_VSIZE_LAST)));
Xil_AssertVoid((HSize >= (u16)(XENH_HSIZE_FIRST)) &&
(HSize <= (u16)(XENH_HSIZE_LAST)));
Size = (((u32)VSize) << ((u32)(XENH_ACTSIZE_NUM_LINE_SHIFT))) | (HSize);
XEnhance_WriteReg(InstancePtr->Config.BaseAddress,
(XENH_ACTIVE_SIZE_OFFSET), Size);
}
/*****************************************************************************/
/**
*
* This function gets the number of Active Pixel per Scan line
* and number of Active Lines per Frame from the Active Frame Size register.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
* @param HSize is a pointer to 16-bit variable in which
* the number of Active Pixels per Scan Line is returned.
* (Range is 32 to 7680).
* @param VSize is a pointer to 16-bit variable in which
* the number of Active Lines per Frame is returned.
* (Range is 32 to 7680).
*
* @return None.
*
* @note None.
*
*****************************************************************************/
void XEnhance_GetActiveSize(XEnhance *InstancePtr, u16 *HSize, u16 *VSize)
{
u32 Data;
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(HSize != NULL);
Xil_AssertVoid(VSize != NULL);
Data = XEnhance_ReadReg(InstancePtr->Config.BaseAddress,
XENH_ACTIVE_SIZE_OFFSET);
/* Reads Number of Active Lines per Frame */
*HSize = (u16)((Data) & (XENH_ACTSIZE_NUM_PIXEL_MASK));
/* Reads Number of Active Lines per Frame */
*VSize = (u16)((Data) & (XENH_ACTSIZE_NUM_LINE_MASK)) >>
(XENH_ACTSIZE_NUM_LINE_SHIFT);
}
/*****************************************************************************/
/**
*
* This function sets the Noise Threshold value for the Enhance core
* The amount of noise reduction can be controlled through Noise
* Threshold parameter.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
* @param Threshold is the value to set the Noise Threshold.
*
* @return None.
*
* @note None.
*
******************************************************************************/
void XEnhance_SetNoiseThreshold(XEnhance *InstancePtr, u32 Threshold)
{
/* Verify argument. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(Threshold <= (u32)XENH_NOISETHRES_MAX);
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress,
(XENH_NOISE_THRESHOLD_OFFSET), Threshold);
}
/*****************************************************************************/
/**
*
* This function gets the Noise Threshold value for the Enhance core.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return The amount of noise reduction that can be controlled.
*
* @note None.
*
******************************************************************************/
u32 XEnhance_GetNoiseThreshold(XEnhance *InstancePtr)
{
u32 NoiseThreshold;
/* Verify argument. */
Xil_AssertNonvoid(InstancePtr != NULL);
NoiseThreshold = (XEnhance_ReadReg(InstancePtr-> Config.BaseAddress,
(XENH_NOISE_THRESHOLD_OFFSET))) &
(XENH_NOISE_THRESHOLD_MASK);
return NoiseThreshold;
}
/*****************************************************************************/
/**
*
* This function sets the Edge Strength value for the Enhance core.
* i.e. The amount of edge enhancement can be controlled through the
* programmable Enhance Strength parameter.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
* @param Strength is the value to set the Edge Strength of the core.
*
* @return None.
*
* @note The larger the strength, the stronger the edge enhancement.
*
******************************************************************************/
void XEnhance_SetEdgeStrength(XEnhance *InstancePtr, u32 Strength)
{
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(Strength <= (u32)XENH_ENHSTRENGTH_MAX);
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress,
(XENH_ENHANCE_STRENGTH_OFFSET), Strength);
}
/*****************************************************************************/
/**
*
* This function gets the Edge Strength value for the Enhance core.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return The amount of edge enhancement that can be controlled.
*
* @note None.
*
******************************************************************************/
u32 XEnhance_GetEdgeStrength(XEnhance *InstancePtr)
{
u32 EdgeStrength;
/* Verify argument. */
Xil_AssertNonvoid(InstancePtr != NULL);
EdgeStrength = (XEnhance_ReadReg(InstancePtr->Config.BaseAddress,
(XENH_ENHANCE_STRENGTH_OFFSET))) &
(XENH_STRENGTH_MASK);
return EdgeStrength;
}
/*****************************************************************************/
/**
*
* This function sets the Halo Suppress value for the Enhance core.
* i.e. The amount of halo suppression can be controlled through the
* programmable Halo Suppress parameter.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
* @param Suppress is the value to set the Suppression value.
*
* @return None.
*
* @note None.
*
******************************************************************************/
void XEnhance_SetHaloSuppress(XEnhance *InstancePtr, u32 Suppress)
{
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(Suppress <= (u32)XENH_HALOSUPPRESS_MAX);
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress,
(XENH_HALO_SUPPRESS_OFFSET), Suppress);
}
/*****************************************************************************/
/**
*
* This function gets the Halo Suppress value for the Enhance core.
*
* @param InstancePtr is a pointer to XEnhance instance to be worked on.
*
* @return The amount of halo suppression that can be controlled.
*
* @note None.
*
******************************************************************************/
u32 XEnhance_GetHaloSuppress(XEnhance *InstancePtr)
{
u32 HaloSuppress;
/* Verify argument. */
Xil_AssertNonvoid(InstancePtr != NULL);
HaloSuppress = (XEnhance_ReadReg(InstancePtr->Config.BaseAddress,
(XENH_HALO_SUPPRESS_OFFSET))) &
(XENH_HALO_SUPPRESS_MASK);
return HaloSuppress;
}
/*****************************************************************************/
/**
*
* This routine is a stub for the asynchronous callbacks. The stub is here in
* case the upper layer forgot to set the handlers. On initialization, All
* handlers except error handler are set to this callback. It is considered an
* error for this handler to be invoked.
*
* @param 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.
*
* @return None.
*
* @note None.
*
*****************************************************************************/
static void StubCallBack(void *CallBackRef)
{
/* Verify arguments. */
Xil_AssertVoid(CallBackRef != NULL);
Xil_AssertVoidAlways();
}
/*****************************************************************************/
/**
*
* This routine is a stub for the asynchronous error interrupt callback. The
* stub is here in case the upper layer forgot to set the handler. On
* initialization, Error interrupt handler is set to this callback. It is
* considered an error for this handler to be invoked.
*
* @param 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.
* @param ErrorMask is a bit mask indicating the cause of the error. Its
* value equals 'OR'ing one or more XENH_IXR_*_MASK values defined
* in xenhance_hw.h.
*
* @return None.
*
* @note None.
*
*****************************************************************************/
static void StubErrCallBack(void *CallBackRef, u32 ErrorMask)
{
/* Verify arguments. */
Xil_AssertVoid((ErrorMask == ((u32)0x0U)) ||
(ErrorMask > ((u32)0x0U)));
Xil_AssertVoid(CallBackRef != NULL);
Xil_AssertVoidAlways();
}

View file

@ -0,0 +1,643 @@
/******************************************************************************
*
* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/*****************************************************************************/
/**
*
* @file xenhance.h
*
* This header file contains identifiers and register-level driver functions (or
* macros), range macros, structure typedefs that can be used to access the
* Image Statistic core instance.
*
* The Image Enhancement core offers noise reduction and/or edge enhancement.
* For edge enhancement, optional anti-halo and anti-alias post-processing
* modules are available to reduce image artifacts that can appear from the
* high-pass filtering of the edge enhancement filters. The amount of noise
* reduction and edge enhancement is controlled through user parameters.
* There are two variations of the algorithm offered to choose between high
* performance and minimal resource usage. This core works on YCbCr 4:4:4 and
* 4:2:2 data. The core is capable of a maximum resolution of 7680 columns by
* 7680 rows with 8, 10, 12, or 16 bits per pixel and supports the bandwidth
* necessary for High-definition (1080p60) resolutions in all Xilinx FPGA device
* families. Higher resolutions can be supported in Xilinx high-performance
* device families.
*
* <b>Initialization & Configuration</b>
*
* The device driver enables higher layer software (e.g., an application) to
* communicate to the Enhance core.
*
* XEnhance_CfgInitialize() API is used to initialize the Enhance core.
* The user needs to first call the XEnhance_LookupConfig() API which returns
* the Configuration structure pointer which is passed as a parameter to the
* XEnhance_CfgInitialize() API.
*
* <b> Interrupts </b>
*
* The driver provides an interrupt handler XEnhance_IntrHandler for handling
* the interrupt from the Enhance core. The users of this driver have to
* register this handler with the interrupt system and provide the callback
* functions by using XEnhance_SetCallBack API.
*
* <b> Virtual Memory </b>
*
* This driver supports Virtual Memory. The RTOS is responsible for calculating
* the correct device base address in Virtual Memory space.
*
* <b> Threads </b>
*
* This driver is not thread safe. Any needs for threads or thread mutual
* exclusion must be satisfied by the layer above this driver.
*
* <b> Asserts </b>
*
* Asserts are used within all Xilinx drivers to enforce constraints on argument
* values. Asserts can be turned off on a system-wide basis by defining, at
* compile time, the NDEBUG identifier. By default, asserts are turned on and it
* is recommended that users leave asserts on during development.
*
* <b> Building the driver </b>
*
* The XEnhance driver is composed of several source files. This allows the user
* to build and link only those parts of the driver that are necessary.
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ---- -------- -----------------------------------------------------
* 2.00a vc 12/14/10 Updated for ENHANCE V2.0
* 3.00a rc 09/11/11 Updated for ENHANCE V3.0
* 4.00a vyc 04/24/12 Updated for ENHANCE V4.00.a
* Converted from xio.h to xil_io.h, translating
* basic type, MB cache functions, exceptions and
* assertion to xil_io format.
* 5.00a vyc 06/19/13 Updated for ENHANCE V8.0
* New edge enhancement algorithm and registers
* Noise reduction support added
* 6.0 adk 19/12/13 Updated as per the New Tcl API's
* 7.0 adk 02/19/14 Changed the filename from enhance.h to xenhance.h.
* Changes in xenhance.h:
* Removed the following macros
* ENHANCE_Enable, ENHANCE_Disable, ENHANCE_RegUpdateEnable,
* ENHANCE_RegUpdateDisable, ENHANCE_Reset,
* ENHANCE_AutoSyncReset
*
* Added the following function macros
* XEnhance_Enable, XEnhance_Disable,
* XEnhance_RegUpdateDisable, XEnhance_RegUpdateDisable
* XEnhance_Reset, XEnhance_SyncReset, XEnhance_IntrEnable
* XEnhance_IntrDisable, XEnhance_StatusGetPending
* XEnhance_IntrGetPending, XEnhance_IntrClear
*
* Added the following type definitions:
* XEnhance_Config and XEnhance structures.
* XEnhance_CallBack and XEnhance_ErrorCallBack.
*
* Changes in xenhance.c:
* Modified the following functions
* XENHANCE_CfgInitialize -> XEnhance_CfgInitialize
* XENHANCE_Setup -> XEnhance_Setup
*
* Implemented the following functions:
* XEnhance_CfgInitialize, XEnhance_Setup,
* XEnhance_GetVersion, XEnhance_EnableDbgByPass,
* XEnhance_IsDbgByPassEnabled, XEnhance_DisableDbgBypass
* XEnhance_EnableDbgTestPattern,
* XEnhance_IsDbgTestPatternEnabled
* XEnhance_DisableDbgTestPattern
* XEnhance_GetDbgFrameCount, XEnhance_GetDbgLineCount,
* XEnhance_GetDbgPixelCount, XEnhance_SetActiveSize,
* XEnhance_GetActiveSize, XEnhance_SetNoiseThreshold,
* XEnhance_GetNoiseThreshold, XEnhance_SetEdgeStrength,
* XEnhance_GetEdgeStrength, XEnhance_SetHaloSuppress
* XEnhance_GetHaloSuppress.
*
* Changes in xenhance_hw.h:
* Added the register offsets and bit masks for the
* registers and added backward compatibility for macros.
*
* Changes in xenhance_intr.c:
* Implemented the following functions
* XEnhance_IntrHandler
* XEnhance_SetCallBack
*
* Changes in xenhance_sinit.c:
* Implemented the following function
* XEnhance_LookupConfig
*
* Changes in xenhance_selftest.c:
* Implemented the following function
* XEnhance_SelfTest
* </pre>
*
******************************************************************************/
#ifndef XENHANCE_H_
#define XENHANCE_H_ /**< Prevent circular inclusions by using
* protection macros */
#ifdef __cplusplus
extern "C" {
#endif
/***************************** Include Files *********************************/
#include "xil_assert.h"
#include "xstatus.h"
#include "xenhance_hw.h"
/************************** Constant Definitions *****************************/
/** @name Handler Types
* @{
*/
/**
* These constants specify different types of handlers and used to
* differentiate interrupt requests from core.
*
*/
enum {
XENH_HANDLER_PROCSTART = 1, /**< A processing start event
* interrupt type */
XENH_HANDLER_FRAMEDONE, /**< A frame done event
* interrupt type */
XENH_HANDLER_ERROR /**< An error condition event
* interrupt type */
} ;
/*@}*/
/** @name Active size range macros
* @{
*/
#define XENH_VSIZE_FIRST 32 /**< Vertical Size starting
* value */
#define XENH_VSIZE_LAST 7680 /**< Vertical Size ending
* value */
#define XENH_HSIZE_FIRST 32 /**< Horizontal Size starting
* value */
#define XENH_HSIZE_LAST 7680 /**< Horizontal Size ending
* value */
/*@}*/
/** @name Noise threshold range macros
* @{
*/
#define XENH_NOISETHRES_MIN 0 /**< Noise threshold starting
* value */
#define XENH_NOISETHRES_MAX 255 /**< Noise threshold ending
* value */
/*@}*/
/** @name Strength range macros
* @{
*/
#define XENH_ENHSTRENGTH_MIN 0 /**< Strength starting value */
#define XENH_ENHSTRENGTH_MAX 32768 /**< Strength ending value */
/*@}*/
/** @name Halo Suppress range macros
* @{
*/
#define XENH_HALOSUPPRESS_MIN 0 /**< Halo Suppress starting
* value */
#define XENH_HALOSUPPRESS_MAX 32768 /**< Halo Suppress ending
* value */
/*@}*/
/***************** Macros (Inline Functions) Definitions *********************/
/*****************************************************************************/
/**
*
* This function macro enables the Image Enhancement core instance.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
*
* @return None.
*
* @note C-style signature:
* void XEnhance_Enable(XEnhance *InstancePtr)
*
******************************************************************************/
#define XEnhance_Enable(InstancePtr) \
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress, \
(XENH_CONTROL_OFFSET), \
XEnhance_ReadReg((InstancePtr)->Config.BaseAddress, \
(XENH_CONTROL_OFFSET)) | (XENH_CTL_SW_EN_MASK))
/*****************************************************************************/
/**
*
* This function macro disables the Image Enhancement core instance.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
*
* @return None.
*
* @note C-style signature:
* void XEnhance_Disable(XEnhance *InstancePtr)
*
******************************************************************************/
#define XEnhance_Disable(InstancePtr) \
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress, \
(XENH_CONTROL_OFFSET), \
XEnhance_ReadReg((InstancePtr)->Config.BaseAddress, \
(XENH_CONTROL_OFFSET)) & (~(XENH_CTL_SW_EN_MASK)))
/*****************************************************************************/
/**
*
* This function macro starts the Image Enhancement core instance.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
*
* @return None.
*
* @note C-style signature:
* void XEnhance_Start(XEnhance *InstancePtr)
*
******************************************************************************/
#define XEnhance_Start XEnhance_Enable
/*****************************************************************************/
/**
*
* This function macro stops the Image Enhancement core instance.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
*
* @return None.
*
* @note C-style signature:
* void XEnhance_Stop(XEnhance *InstancePtr)
*
******************************************************************************/
#define XEnhance_Stop XEnhance_Disable
/*****************************************************************************/
/**
*
* This function macro commits all the register value changes made so far by the
* software to the Image Enhancement core instance.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
*
* @return None.
*
* @note C-style signature:
* void XEnhance_RegUpdateEnable(XEnhance *InstancePtr)
*
******************************************************************************/
#define XEnhance_RegUpdateEnable(InstancePtr) \
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress, \
(XENH_CONTROL_OFFSET), \
(XEnhance_ReadReg((InstancePtr)->Config.BaseAddress, \
(XENH_CONTROL_OFFSET))) | (XENH_CTL_RUE_MASK))
/*****************************************************************************/
/**
*
* This function macro prevents the Image Enhancement core instance from
* committing recent changes made so far by the software. When disabled, changes
* to other configuration registers are stored, but do not effect the behavior
* of the core.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
*
* @return None.
*
* @note C-style signature:
* void XEnhance_RegUpdateDisable(XEnhance *InstancePtr)
*
******************************************************************************/
#define XEnhance_RegUpdateDisable(InstancePtr) \
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress, \
(XENH_CONTROL_OFFSET), \
((XEnhance_ReadReg((InstancePtr)->Config.BaseAddress, \
(XENH_CONTROL_OFFSET))) & \
(~(XENH_CTL_RUE_MASK))))
/*****************************************************************************/
/**
*
* This function macro resets a Image Enhancement core instance, but differs from
* XEnhance_Reset() in that it automatically synchronizes to the SOF input of
* the core to prevent tearing.
*
* On the next SOF following a call to XEnhance_SyncReset(),
* all of the core's configuration registers and outputs will be reset, then the
* reset flag will be immediately released, allowing the core to immediately
* resume default operation.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
*
* @return None.
*
* @note C-style signature:
* void Enhance_SyncReset(XEnhance *InstancePtr)
*
******************************************************************************/
#define XEnhance_SyncReset(InstancePtr) \
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress, \
(XENH_CONTROL_OFFSET), (XENH_CTL_AUTORESET_MASK))
/*****************************************************************************/
/**
*
* This function macro resets a Image Enhancement core instance. This reset
* effects the core immediately, and may cause image tearing.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
*
* @return None.
*
* @note C-style signature:
* void XEnhance_Reset(XEnhance *InstancePtr)
*
******************************************************************************/
#define XEnhance_Reset(InstancePtr) \
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress, \
(XENH_CONTROL_OFFSET), (XENH_CTL_RESET_MASK))
/*****************************************************************************/
/**
*
* This function macro returns the pending status of a Enhance core.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
*
* @return The pending interrupts of the Enhance core. Use XENH_IXR_*_MASK
* constants defined in xenhance_hw.h to interpret this value.
*
* @note C-style signature:
* u32 XEnhance_StatusGePending(XEnhance *InstancePtr).
*
******************************************************************************/
#define XEnhance_StatusGetPending(InstancePtr) \
XEnhance_ReadReg((InstancePtr)->Config.BaseAddress, \
(XENH_STATUS_OFFSET)) & (XENH_IXR_ALLINTR_MASK)
/*****************************************************************************/
/**
*
* This function macro clears/acknowledges pending interrupts of a Enhance core.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
* @param IntrType is the pending interrupts to clear/acknowledge. Use
* OR'ing of XENH_IXR_*_MASK constants defined in xEnhance_hw.h
* to create this parameter value.
*
* @return None.
*
* @note C-style signature:
* void XEnhance_IntrClear(XEnhance *InstancePtr, u32 IntrType)
*
******************************************************************************/
#define XEnhance_IntrClear(InstancePtr, IntrType) \
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress, \
(XENH_STATUS_OFFSET), ((IntrType) & (XENH_IXR_ALLINTR_MASK)))
/*****************************************************************************/
/**
*
* This function macro enables the given individual interrupt(s) on the Enhance
* core.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
* @param IntrType is the bit-mask of the interrupts to be enabled.
* Bit positions of 1 will be enabled. Bit positions of 0 will
* keep the previous setting. This mask is formed by OR'ing
* XENH_IXR_*_MASK bits defined in xenhance_hw.h.
*
* @return None.
*
* @note The existing enabled interrupt(s) will remain enabled.
* C-style signature:
* void XEnhance_IntrEnable(XEnhance *InstancePtr, u32 IntrType)
*
******************************************************************************/
#define XEnhance_IntrEnable(InstancePtr, IntrType) \
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress, \
(XENH_IRQ_EN_OFFSET), \
((IntrType) & (XENH_IXR_ALLINTR_MASK)) | \
(XEnhance_ReadReg((InstancePtr)->Config.BaseAddress, \
(XENH_IRQ_EN_OFFSET))))
/*****************************************************************************/
/**
*
* This function macro disables the given individual interrupt(s) on the
* Enhance core by updating Irq_Enable register.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
* @param IntrType is the bit-mask of the interrupts to be disabled.
* Bit positions of 1 will be disabled. Bit positions of 0 will
* keep the previous setting. This mask is formed by OR'ing
* XENH_IXR_*_MASK bits defined in xenhance_hw.h.
*
* @return None.
*
* @note Any other interrupt not covered by parameter IntrType, if
* enabled before this macro is called, will remain enabled.
* C-style signature:
* void XEnhance_IntrDisable(XEnhance *InstancePtr, u32 IntrType)
*
******************************************************************************/
#define XEnhance_IntrDisable(InstancePtr, IntrType) \
XEnhance_WriteReg((InstancePtr)->Config.BaseAddress, \
(XENH_IRQ_EN_OFFSET), \
(XEnhance_ReadReg((InstancePtr)->Config.BaseAddress, \
(XENH_IRQ_EN_OFFSET)) & ((~(IntrType)) & \
(XENH_IXR_ALLINTR_MASK))))
/*****************************************************************************/
/**
*
* This function macro returns the pending interrupts of a Enhance core.
*
* @param InstancePtr is a pointer to the Enhance core instance to be
* worked on.
*
* @return The pending interrupts of the Enhance core. Use XENH_IXR_*_MASK
* constants defined in xenhance_hw.h to interpret this value.
*
* @note C-style signature:
* u32 XEnhance_IntrGetPending(XEnhance *InstancePtr)
*
******************************************************************************/
#define XEnhance_IntrGetPending(InstancePtr) \
XEnhance_ReadReg((InstancePtr)->Config.BaseAddress, \
(XENH_IRQ_EN_OFFSET)) & \
(XEnhance_ReadReg((InstancePtr)->Config.BaseAddress, \
(XENH_STATUS_OFFSET))) & ((u32)(XENH_IXR_ALLINTR_MASK))
/**************************** Type Definitions *******************************/
/**
* This typedef contains configuration information for a Video Enhance core.
* Each Video Enhance core should have a configuration structure associated.
*
******************************************************************************/
typedef struct {
u16 DeviceId; /**< DeviceId is the unique ID of the
* device */
u32 BaseAddress; /**< BaseAddress is the physical base
* address of the core registers */
u32 SlaveAxisVideoFormat; /**< Slave axis video format */
u32 MasteAxisVideoFoemat; /**< Master axis video format */
u32 SlaveAxiClkFreqHz; /**< Slave axi clock */
u16 HasIntcIf; /**< Has Intc IF */
u16 HasDebug; /**< Has Debug */
u32 MaxColumns; /**< Maximum columns */
u32 ActiveColumns; /**< Active columns */
u32 ActiveRows; /**< Active Rows */
u16 HasNoise; /**< Has noise */
u16 HasEnhance; /**< Has enhance */
u16 HasHalo; /**< Has halo suppression */
u16 HasAlias; /**< Has Alias */
u32 OptSize; /**< Optional size */
u16 NoiseThreshold; /**< Noise Threshold */
u32 EnhanceStrength; /**< Enhance strength */
u16 HaloSuppress; /**< Halo suppression */
} XEnhance_Config;
/*****************************************************************************/
/**
*
* Callback type for all interrupts except error interrupt.
*
* @param 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.
*
******************************************************************************/
typedef void (*XEnhance_CallBack)(void *CallBackRef);
/*****************************************************************************/
/**
*
* Callback type for Error interrupt.
*
* @param 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.
* @param ErrorMask is a bit mask indicating the cause of the error. Its
* value equals 'OR'ing one or more XENH_IXR_*_MASK values defined in
* xenhance_hw.h
*
******************************************************************************/
typedef void (*XEnhance_ErrorCallBack)(void *CallBackRef, u32 ErrorMask);
/**
* The Enhance driver instance data structure. A pointer to an instance data
* structure is passed around by functions to refer to a specific driver
* instance.
*/
typedef struct {
XEnhance_Config Config; /**< Hardware configuration */
u32 IsReady; /**< Device and the driver instantly
* are initialized */
u16 HSize; /**< Active Video Horizontal Size */
u16 VSize; /**< Active Video Vertical Size */
/* IRQ Callbacks */
XEnhance_CallBack ProcStartCallBack; /**< Callback for Processing
* Start interrupt */
void *ProcStartRef; /**< To be passed to Process
* Start interrupt
* callback */
XEnhance_CallBack FrameDoneCallBack; /**< Callback for Frame Done
* interrupt */
void *FrameDoneRef; /**< To be passed to the Frame
* Done interrupt callback */
XEnhance_ErrorCallBack ErrCallBack; /**< Callback for Error
* interrupt */
void *ErrRef; /**< To be passed to the Error
* interrupt callback */
} XEnhance;
/************************** Function Prototypes ******************************/
int XEnhance_CfgInitialize(XEnhance *InstancePtr, XEnhance_Config *CfgPtr,
u32 EffectiveAddr);
void XEnhance_Setup(XEnhance *InstancePtr);
void XEnhance_EnableDbgByPass(XEnhance *InstancePtr);
int XEnhance_IsDbgByPassEnabled(XEnhance *InstancePtr);
void XEnhance_DisableDbgBypass(XEnhance *InstancePtr);
void XEnhance_EnableDbgTestPattern(XEnhance *InstancePtr);
int XEnhance_IsDbgTestPatternEnabled(XEnhance *InstancePtr);
void XEnhance_DisableDbgTestPattern(XEnhance *InstancePtr);
u32 XEnhance_GetVersion(XEnhance *InstancePtr);
u32 XEnhance_GetDbgFrameCount(XEnhance *InstancePtr);
u32 XEnhance_GetDbgLineCount(XEnhance *InstancePtr);
u32 XEnhance_GetDbgPixelCount(XEnhance *InstancePtr);
void XEnhance_SetActiveSize(XEnhance *InstancePtr, u16 HSize, u16 VSize);
void XEnhance_GetActiveSize(XEnhance *InstancePtr, u16 *HSize, u16 *VSize);
void XEnhance_SetNoiseThreshold(XEnhance *InstancePtr, u32 Threshold);
u32 XEnhance_GetNoiseThreshold(XEnhance *InstancePtr);
void XEnhance_SetEdgeStrength(XEnhance *InstancePtr, u32 Strength);
u32 XEnhance_GetEdgeStrength(XEnhance *InstancePtr);
void XEnhance_SetHaloSuppress(XEnhance *InstancePtr, u32 Suppress);
u32 XEnhance_GetHaloSuppress(XEnhance *InstancePtr);
/* Initialization functions in xEnhance_sinit.c */
XEnhance_Config *XEnhance_LookupConfig(u16 DeviceId);
/* Self test functions in xenhance_selftest.c */
int XEnhance_SelfTest(XEnhance*InstancePtr);
/* Interrupt related functions in xEnhance_intr.c */
void XEnhance_IntrHandler(void *InstancePtr);
int XEnhance_SetCallBack(XEnhance *InstancePtr, u32 HandlerType,
void *CallBackFunc, void *CallBackRef);
/************************** Variable Declarations ****************************/
#ifdef __cplusplus
}
#endif
#endif /* End of protection macro */

View file

@ -0,0 +1,68 @@
/******************************************************************************
*
* Copyright (C) 2010 - 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
#include "xparameters.h"
#include "xenhance.h"
/*
* The configuration table for devices
*/
XEnhance_Config XEnhance_ConfigTable[] =
{
{
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_DEVICE_ID,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_BASEADDR,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_S_AXIS_VIDEO_DATA_WIDTH,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_M_AXIS_VIDEO_DATA_WIDTH,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_S_AXIS_VIDEO_FORMAT,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_M_AXIS_VIDEO_FORMAT,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_S_AXIS_VIDEO_TDATA_WIDTH,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_M_AXIS_VIDEO_TDATA_WIDTH,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_HAS_AXI4_LITE,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_HAS_INTC_IF,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_HAS_DEBUG,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_MAX_COLS,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_ACTIVE_COLS,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_ACTIVE_ROWS,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_HAS_NOISE,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_HAS_ENHANCE,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_HAS_HALO,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_HAS_ALIAS,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_OPT_SIZE,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_NOISE_THRESHOLD,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_ENHANCE_STRENGTH,
XPAR_FMC_SENSOR_INPUT_V_ENHANCE_1_HALO_SUPPRESS
}
};

View file

@ -0,0 +1,287 @@
/******************************************************************************
*
* Copyright (C) 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/*****************************************************************************/
/**
*
* @file xenhance_hw.h
*
* This header file contains identifiers and register-level driver functions (or
* macros) that can be used to access the Xilinx Video Image Enhancement
* core.
*
* For more information about the operation of this core, see the hardware
* specification and documentation in the higher level driver xenhance.h source
* code file.
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- --- -------- -------------------------------------------------------
* 7.0 adk 01/07/14 First release.
* Added the register offsets and bit masks for the
* registers and added backward compatibility for macros.
* </pre>
*
******************************************************************************/
#ifndef XENHANCE_HW_H_
#define XENHANCE_HW_H_ /**< Prevent circular inclusions by using
* protection macros */
#ifdef __cplusplus
extern "C" {
#endif
/***************************** Include Files *********************************/
#include "xil_io.h"
/************************** Constant Definitions *****************************/
/** @name Control Registers
* @{
*/
#define XENH_CONTROL_OFFSET 0x0000 /**< Control Offset */
#define XENH_STATUS_OFFSET 0x0004 /**< Status Offset */
#define XENH_ERROR_OFFSET 0x0008 /**< Error Offset */
#define XENH_IRQ_EN_OFFSET 0x000C /**< IRQ Enable Offset */
#define XENH_VERSION_OFFSET 0x0010 /**< Version Offset */
#define XENH_SYSDEBUG0_OFFSET 0x0014 /**< System Debug 0
* Offset */
#define XENH_SYSDEBUG1_OFFSET 0x0018 /**< System Debug 1
* Offset */
#define XENH_SYSDEBUG2_OFFSET 0x001C /**< System Debug 2
* Offset */
/*@}*/
/** @name Timing Control Registers
* @{
*/
#define XENH_ACTIVE_SIZE_OFFSET 0x0020 /**< Horizontal and Vertical
* Active Frame Size Offset */
/*@}*/
/** @name Core Specific Registers
* @{
*/
#define XENH_NOISE_THRESHOLD_OFFSET 0x0100 /**< Noise Reduction
* Control Active */
#define XENH_ENHANCE_STRENGTH_OFFSET 0x0104 /**< Edge Enhancement
* Control Active */
#define XENH_HALO_SUPPRESS_OFFSET 0x0108 /**< Halo Suppression
* Control Active */
/*@}*/
/** @name Enhance Control Register Bit Masks
* @{
*/
#define XENH_CTL_SW_EN_MASK 0x00000001 /**< Enable Mask */
#define XENH_CTL_RUE_MASK 0x00000002 /**< Register
* Update Enable Mask */
#define XENH_CTL_BPE_MASK 0x00000010 /**< Bypass Mask */
#define XENH_CTL_TPE_MASK 0x00000020 /**< Test Pattern Mask */
#define XENH_CTL_AUTORESET_MASK 0x40000000 /**< Software Reset -
* Auto-synchronize to
* SOF Mask */
#define XENH_CTL_RESET_MASK 0x80000000 /**< Software Reset -
* Instantaneous
* Mask */
/*@}*/
/** @name Interrupt Register Bit Masks. It is applicable for
* Status and Irq_Enable Registers
* @{
*/
#define XENH_IXR_PROCS_STARTED_MASK 0x00000001 /**< Process started
* Mask */
#define XENH_IXR_EOF_MASK 0x00000002 /**< End-Of-Frame Mask */
#define XENH_IXR_SE_MASK 0x00010000 /**< Slave Error Mask */
#define XENH_IXR_ALLINTR_MASK 0x00010003 /**< OR'ing of all Mask */
/*@}*/
/** @name Enhance Error Register Bit Masks
* @{
*/
#define XENH_ERR_EOL_EARLY_MASK 0x00000001 /**< Frame EOL early Mask */
#define XENH_ERR_EOL_LATE_MASK 0x00000002 /**< Frame EOL late Mask */
#define XENH_ERR_SOF_EARLY_MASK 0x00000004 /**< Frame SOF early Mask */
#define XENH_ERR_SOF_LATE_MASK 0x00000008 /**< Frame SOF late Mask */
/*@}*/
/** @name Enhance Version Register bit definition
* @{
*/
#define XENH_VER_REV_NUM_MASK 0x000000FF /**< Revision Number Mask */
#define XENH_VER_PID_MASK 0x00000F00 /**< Patch ID Mask */
#define XENH_VER_MINOR_MASK 0x00FF0000 /**< Version Minor Mask */
#define XENH_VER_MAJOR_MASK 0xFF000000 /**< Version Major Mask */
#define XENH_VER_REV_MASK 0x0000F000 /**< VersionRevision Mask */
#define XENH_VER_INTERNAL_SHIFT 8 /**< Version Internal Shift */
#define XENH_VER_REV_SHIFT 12 /**< Version Revision Shift */
#define XENH_VER_MINOR_SHIFT 16 /**< Version Minor Shift */
#define XENH_VER_MAJOR_SHIFT 24 /**< Version Major Shift */
/*@}*/
/** @name Enhance ActiveSize register Masks and Shifts
* @{
*/
#define XENH_ACTSIZE_NUM_PIXEL_MASK 0x00001FFF /**< Active size
* Mask */
#define XENH_ACTSIZE_NUM_LINE_MASK 0x1FFF0000 /**< Number of Active
* lines per Frame
* (Vertical) Mask */
#define XENH_ACTSIZE_NUM_LINE_SHIFT 16 /**< Active size
* Shift */
/*@}*/
/** @name Enhance Noise Threshold Register Bit Masks
* @{
*/
#define XENH_NOISE_THRESHOLD_MASK 0x0000FFFF /**< Noise Threshold
* Mask */
/*@}*/
/** @name Enhance Strength Register Bit Masks
* @{
*/
#define XENH_STRENGTH_MASK 0x0000FFFF /**< Enhance Strength
* Mask */
/*@}*/
/** @name Enhance Halo Suppress Register Bit Masks
* @{
*/
#define XENH_HALO_SUPPRESS_MASK 0x0000FFFF /**< Halo Suppress
* Mask */
/*@}*/
/**@name Backward compatibility macros
* @{
*/
#define ENHANCE_CONTROL XENH_CONTROL_OFFSET
#define ENHANCE_STATUS XENH_STATUS_OFFSET
#define ENHANCE_ERROR XENH_ERROR_OFFSET
#define ENHANCE_IRQ_ENABLE XENH_IRQ_EN_OFFSET
#define ENHANCE_VERSION XENH_VERSION_OFFSET
#define ENHANCE_SYSDEBUG0 XENH_SYSDEBUG0_OFFSET
#define ENHANCE_SYSDEBUG1 XENH_SYSDEBUG1_OFFSET
#define ENHANCE_SYSDEBUG2 XENH_SYSDEBUG2_OFFSET
#define ENHANCE_ACTIVE_SIZE XENH_ACTIVE_SIZE_OFFSET
#define ENHANCE_NOISE_THRESHOLD XENH_NOISE_THRESHOLD_OFFSET
#define ENHANCE_ENHANCE_STRENGTH XENH_ENHANCE_STRENGTH_OFFSET
#define ENHANCE_HALO_SUPPRESS XENH_HALO_SUPPRESS_OFFSET
#define ENHANCE_CTL_EN_MASK XENH_CTL_SW_EN_MASK
#define ENHANCE_CTL_RU_MASK XENH_CTL_RUE_MASK
#define ENHANCE_CTL_RESET XENH_CTL_RESET_MASK
#define ENHANCE_CTL_AUTORESET XENH_CTL_AUTORESET_MASK
#define ENHANCE_In32 XEnhance_In32
#define ENHANCE_Out32 XEnhance_Out32
#define ENHANCE_ReadReg XEnhance_ReadReg
#define ENHANCE_WriteReg XEnhance_WriteReg
/*@}*/
/** @name Interrupt Registers
* @{
*/
/**
* Interrupt status register generates a interrupt if the corresponding bits of
* interrupt enable register bits are set.
*/
#define XENH_ISR_OFFSET XENH_STATUS_OFFSET /**< Interrupt Status
* Register */
#define XENH_IER_OFFSET XENH_IRQ_EN_OFFSET /**< Interrupt Enable
* Register corresponds
* to Status bits */
/*@}*/
/***************** Macros (Inline Functions) Definitions *********************/
#define XEnhance_In32 Xil_In32 /**< Enhance Input Operation. */
#define XEnhance_Out32 Xil_Out32 /**< Enhance Output Operation. */
/*****************************************************************************/
/**
*
* This function macro reads the given register.
*
* @param BaseAddress is the base address of the Image Enhancement core.
* @param RegOffset is the register offset of the core (defined at.
* top of this file).
*
* @return The 32-bit value of the register.
*
* @note C-style signature:2
* u32 XEnhance_ReadReg(u32 BaseAddress, u32 RegOffset).
*
******************************************************************************/
#define XEnhance_ReadReg(BaseAddress, RegOffset) \
XEnhance_In32((BaseAddress) + (u32)(RegOffset))
/*****************************************************************************/
/**
*
* This function macro writes the given register.
*
* @param BaseAddress is the base address of the Image Enhancement core.
* @param RegOffset is the register offset of the core (defined
* at top of this file).
* @param Data is the 32-bit value to write to the register.
*
* @return None.
*
* @note C-style signature:
* void XEnhance_WriteReg(u32 BaseAddress, u32 RegOffset,
* u32 Data).
*
******************************************************************************/
#define XEnhance_WriteReg(BaseAddress, RegOffset, Data) \
XEnhance_Out32((BaseAddress) + (u32)(RegOffset), (Data))
/**************************** Type Definitions *******************************/
/************************** Function Prototypes ******************************/
/************************** Variable Declarations ****************************/
#ifdef __cplusplus
}
#endif
#endif /* End of protection macro */

View file

@ -0,0 +1,208 @@
/******************************************************************************
*
* Copyright (C) 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/*****************************************************************************/
/**
*
* @file xenhance_intr.c
*
* This code contains interrupt related functions of Xilinx Enhance core.
* Please see xenhance.h for more details of the core.
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- --- -------- -----------------------------------------------
* 7.0 adk 02/19/14 First release.
* Implemented the following functions
* XEnhance_IntrHandler
* XEnhance_SetCallBack
* </pre>
*
******************************************************************************/
/***************************** Include Files *********************************/
#include "xenhance.h"
/************************** Constant Definitions *****************************/
/***************** Macros (Inline Functions) Definitions *********************/
/**************************** Type Definitions *******************************/
/************************** Function Prototypes ******************************/
/************************** Variable Definitions *****************************/
/************************** Function Definitions *****************************/
/*****************************************************************************/
/**
*
* This function is the interrupt handler for the Enhance 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
* XEnhance_SetCallBack() during initialization phase.
*
* @param InstancePtr is a pointer to the XEnhance instance that just
* interrupted.
*
* @return None.
*
* @note Interrupt interface should be enabled.
*
******************************************************************************/
void XEnhance_IntrHandler(void *InstancePtr)
{
u32 PendingIntr;
u32 ErrorStatus;
XEnhance *XEnhancePtr = (XEnhance *)((void *)InstancePtr);
/* Verify arguments. */
Xil_AssertVoid(XEnhancePtr != NULL);
Xil_AssertVoid(XEnhancePtr->IsReady == (u32)(XIL_COMPONENT_IS_READY));
Xil_AssertVoid(XEnhancePtr->Config.HasIntcIf != (u16)0x0);
/* Get pending interrupts. */
PendingIntr = (u32)(XEnhance_IntrGetPending(XEnhancePtr));
/* A Slave Error interrupt has happened. */
if (((PendingIntr) & (XENH_IXR_SE_MASK)) ==
((XENH_IXR_SE_MASK))) {
ErrorStatus = (PendingIntr) & (XENH_IXR_SE_MASK);
XEnhancePtr->ErrCallBack(XEnhancePtr->ErrRef, ErrorStatus);
}
/* A Processing Start has happened. */
if (((PendingIntr) & (XENH_IXR_PROCS_STARTED_MASK)) ==
(XENH_IXR_PROCS_STARTED_MASK)) {
XEnhancePtr->ProcStartCallBack
(XEnhancePtr->ProcStartRef);
}
/* A Frame Done interrupt has happened */
if (((PendingIntr) & (XENH_IXR_EOF_MASK)) ==
(XENH_IXR_EOF_MASK)) {
XEnhancePtr->FrameDoneCallBack
(XEnhancePtr->FrameDoneRef);
}
/* Clear pending interrupt(s). */
XEnhance_IntrClear(XEnhancePtr, PendingIntr);
}
/*****************************************************************************/
/**
*
* This routine installs an asynchronous callback function for the given
* HandlerType:
*
* <pre>
* HandlerType Callback Function Type
* ----------------------- --------------------------------
* XENH_HANDLER_PROCSTART ProcStartCallBack
* XENH_HANDLER_FRAMEDONE FrameDoneCallBack
* XENH_HANDLER_ERROR ErrCallBack
* </pre>
*
* @param InstancePtr is a pointer to the XEnhance instance to be worked
* on.
* @param HandlerType specifies which callback is to be attached.
* @param CallBackFunc is the address of the callback function.
* @param CallBackRef is a user data item that will be passed to the
* callback function when it is invoked.
*
* @return
* - XST_SUCCESS when handler is installed.
* - XST_INVALID_PARAM when HandlerType is invalid.
*
* @note Invoking this function for a handler that already has been
* installed replaces it with the new handler.
*
******************************************************************************/
int XEnhance_SetCallBack(XEnhance *InstancePtr, u32 HandlerType,
void *CallBackFunc, void *CallBackRef)
{
int Status;
/* Verify arguments. */
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady ==
(u32)(XIL_COMPONENT_IS_READY));
Xil_AssertNonvoid(CallBackFunc != NULL);
Xil_AssertNonvoid(CallBackRef != NULL);
Xil_AssertNonvoid((HandlerType >= (u32)(XENH_HANDLER_PROCSTART)) &&
(HandlerType <= (u32)(XENH_HANDLER_ERROR)));
/* Calls the respective callbacks according to handler type. */
switch (HandlerType) {
case XENH_HANDLER_PROCSTART:
InstancePtr->ProcStartCallBack =
(XEnhance_CallBack)((void *)CallBackFunc);
InstancePtr->ProcStartRef = CallBackRef;
Status = (XST_SUCCESS);
break;
case XENH_HANDLER_FRAMEDONE:
InstancePtr->FrameDoneCallBack =
(XEnhance_CallBack)((void *)CallBackFunc);
InstancePtr->FrameDoneRef = CallBackRef;
Status = (XST_SUCCESS);
break;
case XENH_HANDLER_ERROR:
InstancePtr->ErrCallBack =
(XEnhance_ErrorCallBack)((void *)CallBackFunc);
InstancePtr->ErrRef = CallBackRef;
Status = (XST_SUCCESS);
break;
default:
Status = (XST_INVALID_PARAM);
break;
}
return Status;
}

View file

@ -1,63 +1,111 @@
/******************************************************************************
*
* Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
/******************************************************************************
*
* Copyright (C) 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/*****************************************************************************/
/**
*
* @file enhance.c
*
* This is main code of Xilinx Image Enhancement (ENHANCE)
* device driver. Please see enhance.h for more details of the driver.
*
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ---- -------- -------------------------------------------------------
* 5.00a vyc 06/19/13 Updated for ENHANCE V8.0
* 4.00a vyc 04/24/12 Updated for ENHANCE V4.00.a
* 3.00a rc 09/11/11 Updated for ENHANCE V3.0
* 2.00a vc 12/14/10 Updated for ENHANCE V2.0
*
******************************************************************************/
/***************************** Include Files *********************************/
#include "enhance.h"
#include "xenv.h"
/*****************************************************************************/
// Note: All functions are currently implemented as high-performance macros
// within enhance.h
/*****************************************************************************/
/*****************************************************************************/
/**
*
* @file xenhance_selftest.c
*
* This file contains the self-test functions for the Enhance driver.
* The self test function reads the Version register.
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ---- -------- -----------------------------------------------
* 7.0 adk 19/02/14 First Release.
* Implemented the following function
* XEnhance_SelfTest
* </pre>
*
******************************************************************************/
/***************************** Include Files *********************************/
#include "xenhance.h"
#include "xstatus.h"
/************************** Constant Definitions *****************************/
/***************** Macros (Inline Functions) Definitions *********************/
/**************************** Type Definitions *******************************/
/************************** Function Prototypes ******************************/
/************************** Variable Definitions *****************************/
/************************** Function Definitions *****************************/
/*****************************************************************************/
/**
*
* This function reads complete Version register of Enhance core and compares
* with zero values as part of self test.
*
* @param InstancePtr is a pointer to the XEnhance instance to be worked
* on.
*
* @return
* - XST_SUCCESS if the test was successful.
* - XST_FAILURE if the test failed.
*
* @note None.
*
******************************************************************************/
int XEnhance_SelfTest(XEnhance *InstancePtr)
{
u32 Version;
int Status;
/* Verify arguments. */
Xil_AssertNonvoid(InstancePtr != NULL);
/* Read Enhance core version register. */
Version = XEnhance_ReadReg((InstancePtr)->Config.BaseAddress,
(XENH_VERSION_OFFSET));
/* Compare Version with non-zero */
if(Version != (u32)0x00) {
Status = (XST_SUCCESS);
}
else {
Status = (XST_FAILURE);
}
return Status;
}

View file

@ -0,0 +1,110 @@
/******************************************************************************
*
* Copyright (C) 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/*****************************************************************************/
/**
*
* @file xenhance_sinit.c
*
* This file contains static initialization methods for Xilinx Enhance core.
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ---- -------- ------------------------------------------------------
* 7.0 adk 02/19/14 First release.
* Implemented the following function
* XEnhance_LookupConfig
* </pre>
*
******************************************************************************/
/***************************** Include Files *********************************/
#include "xenhance.h"
#include "xparameters.h"
/************************** Constant Definitions *****************************/
/**************************** Type Definitions *******************************/
/***************** Macros (Inline Functions) Definitions *********************/
/************************** Function Prototypes ******************************/
/************************** Variable Declaration *****************************/
/************************** Function Definitions *****************************/
/*****************************************************************************/
/**
*
* This function returns a reference to an XEnhance_Config structure
* based on the unique device id, <i>DeviceId</i>. The return value will refer
* to an entry in the device configuration table defined in the xenhance_g.c.
* file.
*
* @param DeviceId is the unique device ID of the device for the lookup
* operation.
*
* @return XEnhance_LookupConfig returns a reference to a config record in
* the configuration table (in xenhance_g.c) corresponding to
* <i>DeviceId</i>, or NULL if no match is found.
*
* @note None.
*
******************************************************************************/
XEnhance_Config *XEnhance_LookupConfig(u16 DeviceId)
{
extern XEnhance_Config
XEnhance_ConfigTable[XPAR_ENHANCE_NUM_INSTANCES];
XEnhance_Config *CfgPtr = NULL;
u32 Index;
/* To get the reference pointer to XEnhance_Config structure */
for (Index = (u32)0x0; Index < (u32)(XPAR_ENHANCE_NUM_INSTANCES);
Index++) {
/* Compare device Id with configTable's device Id */
if (XEnhance_ConfigTable[Index].DeviceId == DeviceId) {
CfgPtr = &XEnhance_ConfigTable[Index];
break;
}
}
return (XEnhance_Config *)CfgPtr;
}