⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xintc.h

📁 基于Xilinx-XUPV2P开发平台的嵌入式系统实验例程:实验5高级应用程序编写
💻 H
字号:
/* $Id: xintc.h,v 1.3.8.1 2005/09/07 22:56:32 trujillo Exp $ *//********************************************************************************       XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"*       AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND*       SOLUTIONS FOR XILINX DEVICES.  BY PROVIDING THIS DESIGN, CODE,*       OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,*       APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION*       THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,*       AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE*       FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY DISCLAIMS ANY*       WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE*       IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR*       REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF*       INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS*       FOR A PARTICULAR PURPOSE.**       (c) Copyright 2002-2003 Xilinx Inc.*       All rights reserved.*******************************************************************************//*****************************************************************************//**** @file xintc.h** The Xilinx interrupt controller driver component. This component supports the* Xilinx interrupt controller.** The interrupt controller driver uses the idea of priority for the various* handlers. Priority is an integer within the range of 0 and 31 inclusive with* 0 being the highest priority interrupt source.** The Xilinx interrupt controller supports the following features:**   - specific individual interrupt enabling/disabling*   - specific individual interrupt acknowledging*   - attaching specific callback function to handle interrupt source*   - master enable/disable*   - single callback per interrupt or all pending interrupts handled for*     each interrupt of the processor** The acknowledgement of the interrupt within the interrupt controller is* selectable, either prior to the device's handler being called or after* the handler is called. This is necessary to support interrupt signal inputs* which are either edge or level signals.  Edge driven interrupt signals* require that the interrupt is acknowledged prior to the interrupt being* serviced in order to prevent the loss of interrupts which are occurring* extremely close together.  A level driven interrupt input signal requires* the interrupt to acknowledged after servicing the interrupt to ensure that* the interrupt only generates a single interrupt condition.** Details about connecting the interrupt handler of the driver are contained* in the source file specific to interrupt processing, xintc_intr.c.** This driver is intended to be RTOS and processor independent.  It works with* physical addresses only.  Any needs for dynamic memory management, threads* or thread mutual exclusion, virtual memory, or cache control must be* satisfied by the layer above this driver.** <b>Interrupt Vector Tables</b>** The interrupt vector table for each interrupt controller device is declared* statically in xintc_g.c within the configuration data for each instance.* The device ID of the interrupt controller device is used by the driver as a* direct index into the configuration data table - to retrieve the vector table* for an instance of the interrupt controller. The user should populate the* vector table with handlers and callbacks at run-time using the XIntc_Connect()* and XIntc_Disconnect() functions.** Each vector table entry corresponds to a device that can generate an* interrupt. Each entry contains an interrupt handler function and an argument* to be passed to the handler when an interrupt occurs.  The tools default this* argument to the base address of the interrupting device.  Note that Level 1* device driver interrupt handlers do not take a base address as an argument,* but instead take a pointer to the driver instance.  This means that although* the table is created statically, the user must still use XIntc_Connect() when* the interrupt handler takes an argument other than the base address. This is* only to say that the existence of the static vector tables should not mislead* the user into thinking they no longer need to register/connect interrupt* handlers with this driver.** <pre>* MODIFICATION HISTORY:** Ver   Who  Date     Changes* ----- ---- -------- -------------------------------------------------------* 1.00a ecm  08/16/01 First release* 1.00a rpm  01/09/02 Removed the AckLocation argument from XIntc_Connect().*                     This information is now internal in xintc_g.c.* 1.00b jhl  02/13/02 Repartitioned the driver for smaller files* 1.00b jhl  04/24/02 Made LookupConfig function global and relocated config*                     data type* 1.00c rpm  10/17/03 New release. Support the static vector table created*                     in the xintc_g.c configuration table. Moved vector*                     table and options out of instance structure and into*                     the configuration table.* </pre>*******************************************************************************/#ifndef XINTC_H /* prevent circular inclusions */#define XINTC_H /* by using protection macros */#ifdef __cplusplusextern "C" {#endif/***************************** Include Files *********************************/#include "xbasic_types.h"#include "xparameters.h"#include "xstatus.h"#include "xintc_l.h"/************************** Constant Definitions *****************************//** * @name Configuration options * These options are used in XIntc_SetOptions() to configure the device. * @{ *//** * <pre> * XIN_SVC_SGL_ISR_OPTION      Service the highest priority pending interrupt *                             and then return. * XIN_SVC_ALL_ISRS_OPTION     Service all of the pending interrupts and then *                             return. * </pre> */#define XIN_SVC_SGL_ISR_OPTION  1UL#define XIN_SVC_ALL_ISRS_OPTION 2UL/*@}*//** * @name Start modes * One of these values is passed to XIntc_Start() to start the device. * @{ *//** Simulation only mode, no hardware interrupts recognized */#define XIN_SIMULATION_MODE     0/** Real mode, no simulation allowed, hardware interrupts recognized */#define XIN_REAL_MODE           1/*@}*//**************************** Type Definitions *******************************//** * This typedef contains configuration information for the device. */typedef struct{    Xuint16 DeviceId;           /**< Unique ID  of device */    Xuint32 BaseAddress;        /**< Register base address */    Xuint32 AckBeforeService;   /**< Ack location per interrupt */    Xuint32 Options;            /**< Device options */    /** Static vector table of interrupt handlers */    XIntc_VectorTableEntry HandlerTable[XPAR_INTC_MAX_NUM_INTR_INPUTS];} XIntc_Config;/** * The XIntc driver instance data. The user is required to allocate a * variable of this type for every intc device in the system. A pointer * to a variable of this type is then passed to the driver API functions. */typedef struct{    Xuint32 BaseAddress;        /* Base address of registers */    Xuint32 IsReady;            /* Device is initialized and ready */    Xuint32 IsStarted;          /* Device has been started */    Xuint32 UnhandledInterrupts;/* Intc Statistics */    XIntc_Config *CfgPtr;       /* Pointer to instance config entry */} XIntc;/***************** Macros (Inline Functions) Definitions *********************//************************** Function Prototypes ******************************//* * Required functions in xintc.c */XStatus XIntc_Initialize(XIntc *InstancePtr, Xuint16 DeviceId);XStatus XIntc_Start(XIntc *InstancePtr, Xuint8 Mode);void XIntc_Stop(XIntc *InstancePtr);XStatus XIntc_Connect(XIntc *InstancePtr, Xuint8 Id,                      XInterruptHandler Handler, void *CallBackRef);void XIntc_Disconnect(XIntc *InstancePtr, Xuint8 Id);void XIntc_Enable(XIntc *InstancePtr, Xuint8 Id);void XIntc_Disable(XIntc *InstancePtr, Xuint8 Id);void XIntc_Acknowledge(XIntc *InstancePtr, Xuint8 Id);XIntc_Config *XIntc_LookupConfig(Xuint16 DeviceId);/* * Interrupt functions in xintr_intr.c */void XIntc_VoidInterruptHandler();void XIntc_InterruptHandler(XIntc *InstancePtr);/* * Options functions in xintc_options.c */XStatus XIntc_SetOptions(XIntc *InstancePtr, Xuint32 Options);Xuint32 XIntc_GetOptions(XIntc *InstancePtr);/* * Self-test functions in xintc_selftest.c */XStatus XIntc_SelfTest(XIntc *InstancePtr);XStatus XIntc_SimulateIntr(XIntc *InstancePtr, Xuint8 Id);#ifdef __cplusplus}#endif#endif            /* end of protection macro */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -