
/*******************************************************************
*
* CAUTION: This file is automatically generated by HSI.
* Version: 
* DO NOT EDIT.
*
* Copyright (C) 2010-2018 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 
*XILINX 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.
*

* 
* Description: Driver configuration
*
*******************************************************************/

#include "xparameters.h"
#include "xttcps.h"

/*
* The configuration table for devices
*/

XTtcPs_Config XTtcPs_ConfigTable[] =
{
	{
		XPAR_PSU_TTC_0_DEVICE_ID,
		XPAR_PSU_TTC_0_BASEADDR,
		XPAR_PSU_TTC_0_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_1_DEVICE_ID,
		XPAR_PSU_TTC_1_BASEADDR,
		XPAR_PSU_TTC_1_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_2_DEVICE_ID,
		XPAR_PSU_TTC_2_BASEADDR,
		XPAR_PSU_TTC_2_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_3_DEVICE_ID,
		XPAR_PSU_TTC_3_BASEADDR,
		XPAR_PSU_TTC_3_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_4_DEVICE_ID,
		XPAR_PSU_TTC_4_BASEADDR,
		XPAR_PSU_TTC_4_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_5_DEVICE_ID,
		XPAR_PSU_TTC_5_BASEADDR,
		XPAR_PSU_TTC_5_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_6_DEVICE_ID,
		XPAR_PSU_TTC_6_BASEADDR,
		XPAR_PSU_TTC_6_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_7_DEVICE_ID,
		XPAR_PSU_TTC_7_BASEADDR,
		XPAR_PSU_TTC_7_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_8_DEVICE_ID,
		XPAR_PSU_TTC_8_BASEADDR,
		XPAR_PSU_TTC_8_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_9_DEVICE_ID,
		XPAR_PSU_TTC_9_BASEADDR,
		XPAR_PSU_TTC_9_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_10_DEVICE_ID,
		XPAR_PSU_TTC_10_BASEADDR,
		XPAR_PSU_TTC_10_TTC_CLK_FREQ_HZ
	},
	{
		XPAR_PSU_TTC_11_DEVICE_ID,
		XPAR_PSU_TTC_11_BASEADDR,
		XPAR_PSU_TTC_11_TTC_CLK_FREQ_HZ
	}
};


