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

📄 xio_dcr.c

📁 基于Xilinx-XUPV2P开发平台的嵌入式系统实验例程:实验4编写基本的应用程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/* $Id: xio_dcr.c,v 1.15 2005/10/06 15:51:52 meinelte 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 Xilinx Inc.*       All rights reserved.*******************************************************************************//*****************************************************************************//**** @file xio_dcr.c** The implementation of the XDcrIo interface. See xio_dcr.h for more* information about the component.** <pre>* MODIFICATION HISTORY:** Ver   Who  Date     Changes* ----- ---- -------- -----------------------------------------------* 1.00a ecm  10/18/01 First release*       ecm  01/29/03 Cleaned up the table and made it more readable.*                     The DCR_REG_512 was 17 and the table used DCR_REG_32*                     +15 which is actually the same as what DCR_REG_512*                     should have been,16. I removed the blocks using*                     DCR_REG_32+15 and added blocks using DCR_REG_512+14*                     to make the table correct when DCR_REG_512 = 16.*                     This is functionally exactly the same, just more*                     readable hence no rev bump.*       ecm  09/21/05 Fixed the function calls into the table to allow*                     the code to be optimized. Also added the directive*                     to force the code into the text space for Linux to*                     function without causing a page fault.* </pre>** @internal** The C functions which subsequently call into either the assembly code or into* the provided table of functions are required since the registers assigned to* the calling and return from functions are strictly defined in the ABI and that* definition is used in the low-level functions directly. The use of macros is* not recommended since the temporary registers in the ABI are defined but there* is no way to force the compiler to use a specific register in a block of code.******************************************************************************//***************************** Include Files ********************************/#include "xstatus.h"#include "xbasic_types.h"#include "xio.h"#include "xio_dcr.h"/************************** Constant Definitions ****************************/#define SUB_RETURN                  0x4E800020  /* equals 'blr' */#define MTDCR_FIXED                 0x7C000386  /* this is the basic template*/                                                /* equals 'mtdcr 0, 0x00' */#define MFDCR_FIXED                 0x7C000286  /* this is the basic template*/                                                /* equals 'mfdcr 0, 0x00' */#define GPR_SHIFT                   21#define DCR_SHIFT_LH                16          /* bits 5 - 9 shift value */#define DCR_SHIFT_UH                11          /* bits 0 - 4 shift value */#define DCR_REG_32                   1          /* register 32 and above */#define DCR_REG_512                 16          /* register 512 and above *//* defines for the mfdcr and mfdcr structures */#define GPR_SOURCE_REG              4<<GPR_SHIFT#define GPR_DEST_REG                3<<GPR_SHIFT/**************************** Type Definitions ******************************/typedef Xuint32 (*XIo_DcrOpCode)(Xuint32 Register, Xuint32 Data);typedef struct DcrFunctionTableEntryTag{    Xuint32 OpCode;    Xuint32 Return;} DcrFunctionTableEntry;#if defined __GNUC__#if defined XPAR_XIO_DCR_TEXT_SPACEstatic DcrFunctionTableEntry __attribute__((section(".text")))MtDcrTable[MAX_DCR_REGISTERS] =#elsestatic DcrFunctionTableEntry MtDcrTable[MAX_DCR_REGISTERS] =#endif#elsestatic DcrFunctionTableEntry MtDcrTable[MAX_DCR_REGISTERS] =#endif{  {MTDCR_FIXED | GPR_SOURCE_REG | (0)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (1)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (2)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (3)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (4)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (5)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (6)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (7)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (8)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (9)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (10)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (11)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (12)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (13)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (14)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (15)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (16)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (17)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (18)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (19)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (20)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (21)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (22)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (23)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (24)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (25)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (26)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (27)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (28)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (29)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (30)<<DCR_SHIFT_LH,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | (31)<<DCR_SHIFT_LH,SUB_RETURN},  /* this is where the DCR register numbering goes weird*/  /* 32 through 63 */  {MTDCR_FIXED | GPR_SOURCE_REG | ((0)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | ((1)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | ((2)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | ((3)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | ((4)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | ((5)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | ((6)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | ((7)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | ((8)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},  {MTDCR_FIXED | GPR_SOURCE_REG | ((9)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},

⌨️ 快捷键说明

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