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

📄 xio_dcr.c

📁 实用的程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/* $Id: xio_dcr.c,v 1.8 2002/07/26 20:27:56 moleres 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
* </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_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                 17          /* 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)(void);


typedef struct DcrFunctionTableEntryTag
{
    Xuint32 OpCode;
    Xuint32 Return;
} DcrFunctionTableEntry;




static DcrFunctionTableEntry MtDcrTable[MAX_DCR_REGISTERS] =
{
  {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*/

  {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},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((10)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((11)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((12)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((13)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((14)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((15)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((16)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((17)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((18)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((19)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((20)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((21)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((22)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((23)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((24)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((25)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},
  {MTDCR_FIXED | GPR_SOURCE_REG | ((26)<<DCR_SHIFT_LH)|((DCR_REG_32+0)<<DCR_SHIFT_UH) ,SUB_RETURN},

⌨️ 快捷键说明

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