Main Page   Modules   Namespace List   Class Hierarchy   Data Structures   File List   Namespace Members   Data Fields   Related Pages  

utilities.h

00001 /************************************************************************************
00002  * utilities.h
00003  *
00004  *   synopsis: Function prototypes and #defines for general purpose utility routines
00005  *            and macros.
00006  *
00007  *  Damon Fasching, UW Madison (510)486-5230               fasching@wisconsin.cern.ch
00008  ************************************************************************************/
00009 
00010 #ifndef UTILITIES
00011 #define UTILITIES
00012 
00013 #include "processor.h"
00014 
00015 /* register access width (data bus width of EMIF) */
00016 
00017 #define BYTE_W   8
00018 #define HWORD_W 16
00019 #define WORD_W  32
00020 
00021 /* default value for primitive parameters, function arguments, etc */
00022 
00023 #define DEFAULT (0xFFFFFFFF)
00024 
00025 /* z is returned as lesser of x or y */
00026 
00027 #define MINI(x,y,z)   z=((x)<(y))?(x):(y);
00028 
00029 /*
00030  * macros to set, reset and read fields of variables and registers
00031  */
00032 
00033 #define N_BIT_MASK(wid)           (~(0xFFFFFFFF<<(wid)))
00034 #define FIELD_MASK(bit,wid)       (N_BIT_MASK(wid) << (bit))
00035 #define FIELD_OFF(bit,wid)        (~(FIELD_MASK(bit,wid)))
00036 #define FIELD_VAL(bit,wid,val)    ((val&(N_BIT_MASK(wid))) << bit)
00037 
00038 #define SET_VBIT(var,bit)        (var |= (1 << bit))
00039 #define RST_VBIT(var,bit)        (var &= ~(1 << bit))
00040 #define ASGN_VBIT(var,bit,val)   (var = ((RST_VBIT(var,bit)) | (val<<bit)))
00041 #define GET_VBIT(var,bit)        ((var >> bit) & 1)
00042 #define RST_VFLD(var,bit,wid)    (var &= (FIELD_OFF(bit,wid)))
00043 #define ASGN_VFLD(var,bit,wid,val)  \
00044              (var = (RST_VFLD(var,bit,wid)) | (FIELD_VAL(bit,wid,val)))
00045 #define GET_VFLD(var,bit,wid)    ((FIELD_MASK(bit,wid) & var) >> bit)
00046 
00047 /*  Some of the macros below are essentially the same as those in the Texas
00048  * Instruments provided regs.h.  The ones in this file should be used in DSP code
00049  * authored by the ROD group.  If Texas Instruments changes their macro names for
00050  * some reason, the DSP code will not be affected.                  dpf             */
00051  
00052 #define CONTENTS(adr) (*((volatile UINT32 *)(adr)))
00053 
00054 #define READ_REG(adr)             (CONTENTS(adr))
00055 #define WRITE_REG(adr,val)        (CONTENTS(adr) = (val))
00056 #define SET_RBIT(adr,bit)         (CONTENTS(adr) |= (1 << (bit)))
00057 #define RST_RBIT(adr,bit)         (CONTENTS(adr) &= (~(1 << (bit))))
00058 #define ASGN_RBIT(adr,bit,val)    (CONTENTS(adr) = (RST_RBIT(adr,bit)) | (val<<bit))
00059 #define GET_RBIT(adr,bit)         ((CONTENTS(adr) >> bit) & 1)
00060 #define RST_RFLD(adr,bit,wid)     (CONTENTS(adr) &= (FIELD_OFF(bit,wid)))
00061 #define GET_RFLD(adr,bit,wid)     ((CONTENTS(adr) & FIELD_MASK(bit,wid)) >> bit)
00062 #define ASGN_RFLD(adr,bit,wid,val) (CONTENTS(adr) = \
00063                                    (RST_RFLD(adr,bit,wid)) | (FIELD_VAL(bit,wid,val)))
00064 
00065 #endif

Generated on Tue Dec 9 10:07:56 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3