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

📄 ivic.h

📁 IXP425的BSP代码
💻 H
字号:
/* ivic.h - Ironics/VTCs VME Interface Chip (VIC) constants *//*modification history--------------------02d,22sep92,rrr  added support for c++02c,26may92,rrr  the tree shuffle02b,04oct91,rrr  passed through the ansification filter		  -fixed #else and #endif		  -changed ASMLANGUAGE to _ASMLANGUAGE		  -changed copyright notice02a,31jan91,rjt  initial release to windriver after many minor                 fixes and alterations.01a,25jul90,rjt  writen by modifying IV-SPRC sparcmon versions.*/#ifndef __INCivich#define __INCivich#ifdef __cplusplusextern "C" {#endif/*=========================================================================*//*                                                                         *//* NOTE:                                                                   *//* assembly language files should turn off type declartions by not         *//* including those portions of this include file, this is done by          *//* placing a															   *//*																		   *//* #define _ASMLANGUAGE													   *//*																		   *//* statement before this file is included in any other files               *//*                                                                         *//* Also in order to incorparate stronger typing of all constants, and to   *//* allow the same constants to be typed in C files,yet usable in           *//* assembly files. An unorthadox method of TYPING is used by CONDITIONALLY *//* #define'ing the constant TYPES. If no _ASMLANGUAGE #define is present,   *//* then the type is defined to a blank space, otherwise it is defined      *//* to be a C type. This looks weird but works nicely.                      *//*                                                                         *//*=========================================================================*//*=========================================================================*Naming of register names and constants was done ( or was attempted ) so thatthe front end of the names would indicate a related group while the tailend of the names would further define the purpose of the name. Some groupsoften contained sub-groups. Also some names don't follow this convention forthe sake of readability and other reasons.An H_ prefix indicates that the constant is typed as a pointer tounsigned short register.An B_ prefix indicates that the constant is typed as a pointer tounsigned char register.Because of unpredictability of structure sizing and placement fordifferent compilers, we use contants to access each register.Most constants are defined for consistancy in name AND intended usage.BIT MANIPUATION is set up so that each bit field has 3 or more definesassociated with it.1. BIT VALUE MASK2. ASSERTED VALUE(S)3. DEASERTED VALUEwhere ASSERTED VALUE = 0 and dasserted value = 0xff for ACTIVE LOW SIGNALS  OR visa versawhere ASSERTED VALUE = 0xff and dasserted value = 0 for ACTIVE HIGH SIGNALSNOTE: The active high bits may also be something other than 0xff for      multi-bit fields.  EG: for at 2 bit active high field there may be      4 asserted values associated with it: 0x00 0x01 0x02 0x03.the bit field should be altered as follows:new_reg_value =   (old_reg_val & ~MASK) | (MASK & VALUE )REGISTER BIT STATUS for a bit field has 2 or more defines associated with it.1.  BIT MASK2.  POSSIBLE BIT VALUE3.     .4      .returned_bit_field_status  =  MASK & reg_valueMost constants are declared immediatly after the register they are used in.Some constants are shared between more than 1 register and are only definedonce after the first register.Some of names used here indicatate the following:virqack - interrupt from the completion of vme irq acknowledge cyclevirq    - interrupt from vmevirqreq - interrupt to vmelirq    - interrupt from the boards local stuff ie timers, sio etc.misci   - interrupt from error,dma or vmeackerri    - interrupt from error registerdmai    - interrupt from dma registericgsi   - interrupt from icgs facilitiesicmsi   - interrupt from icms facilities======================================================================**//* IMPORTANT NOTICE: NOT ALL CONSTANTS HAVE BEEN TESTED *//* The following #defines allow or disallow C types */#ifndef _ASMLANGUAGE/* C code type casting */#ifndef P_VI_TYPE#define P_VI_TYPE (unsigned char *)#endif#ifndef VI_TYPE#define VI_TYPE  (unsigned char)#endif#else/* No type casting allowed in assembly */#define VI_TYPE#define P_VI_TYPE#endif	/* _ASMLANGUAGE */#define VIC_ADR 0xfffc0000#define VIC_TYPE unsigned char/* IMPORTANT *//* Some boards may require a special routine to access the vic registers.    *//* ( ex: a board whose cache must be bypassed to ensure register integrity ) *//* If they do, there should be  viXetReg() macros #define'd to call that     *//* special routine. Otherwise the following viXetReg() macros will be used.  *//* For portability reasons, it might be a good idea to only use viRegSet()   *//* to alter any vic registers in C code.				     *//*								             *//* #undef the following macro to replace it if needed                        */#ifndef viRegSet#define viRegSet(bReg,val) *(bReg) = (VIC_TYPE)(val)#endif#ifndef viRegGet#define viRegGet(bReg) *(bReg)#endif/* BEGIN REGISTER CONSTANTS *//* VME Intr IACK cntl */#define	B_VIC_VIRQACK_CTL	P_VI_TYPE (VIC_ADR +  0x03)#define	VIRQACK_MASK	VI_TYPE 0x80#define	VIRQACK_ENABLE	VI_TYPE 0x0#define	VIRQACK_DISABLE	VI_TYPE 0x80#define VIRQACK_IPL_MASK	VI_TYPE 0x07/* VME IRQ handler cntl lev 1-7 */#define B_VIC_VIRQ1_CTL  P_VI_TYPE (VIC_ADR +  0x07)#define B_VIC_VIRQ2_CTL  P_VI_TYPE (VIC_ADR +  0x0b)#define B_VIC_VIRQ3_CTL  P_VI_TYPE (VIC_ADR +  0x0f)#define B_VIC_VIRQ4_CTL  P_VI_TYPE (VIC_ADR +  0x13)#define B_VIC_VIRQ5_CTL  P_VI_TYPE (VIC_ADR +  0x17)#define B_VIC_VIRQ6_CTL  P_VI_TYPE (VIC_ADR +  0x1b)#define B_VIC_VIRQ7_CTL  P_VI_TYPE (VIC_ADR +  0x1f)/* these are used a shift values to access the proper ctl reg */#define	VIRQ1	VI_TYPE	0x01#define	VIRQ2	VI_TYPE	0x02#define	VIRQ3	VI_TYPE	0x03#define	VIRQ4	VI_TYPE	0x04#define	VIRQ5	VI_TYPE	0x05#define	VIRQ6	VI_TYPE	0x06#define	VIRQ7	VI_TYPE	0x07#define         VIRQ_CTL_IPL_MASK	VI_TYPE 0x7#define 	VIRQ_MASK	 	VI_TYPE 0x80#define 	VIRQ_ENABLE   		VI_TYPE 0x0#define 	VIRQ_DISABLE  		VI_TYPE 0x80 /* DMA Status Interrupt cntl */#define B_VIC_DMAI_CTL  P_VI_TYPE (VIC_ADR +  0x23)#define         DMAI_IPL_MASK	0x7#define DMAI_MASK	 VI_TYPE 0x80#define	DMAI_ENABLE   VI_TYPE 0x0#define DMAI_DISABLE  VI_TYPE 0x80/* Local Interrupt cntl lev 1-7 */#define B_VIC_LIRQ1_CTL  P_VI_TYPE (VIC_ADR +  0x27)#define B_VIC_LIRQ2_CTL  P_VI_TYPE (VIC_ADR +  0x2b)#define B_VIC_LIRQ3_CTL  P_VI_TYPE (VIC_ADR +  0x2f)#define B_VIC_LIRQ4_CTL  P_VI_TYPE (VIC_ADR +  0x33)#define B_VIC_LIRQ5_CTL  P_VI_TYPE (VIC_ADR +  0x37)#define B_VIC_LIRQ6_CTL  P_VI_TYPE (VIC_ADR +  0x3b)#define B_VIC_LIRQ7_CTL  P_VI_TYPE (VIC_ADR +  0x3f)/* these are used as shift values to access the proper ctl reg *//* these are also used for lirq status */#define LIRQ1 			 VI_TYPE 0x01#define LIRQ2 			 VI_TYPE 0x02#define LIRQ3 			 VI_TYPE 0x03#define LIRQ4 			 VI_TYPE 0x04#define LIRQ5 			 VI_TYPE 0x05#define LIRQ6 			 VI_TYPE 0x06#define LIRQ7 			 VI_TYPE 0x07#define LIRQ_MASK		 VI_TYPE 0x80#define	LIRQ_ENABLE  		 VI_TYPE 0x0#define LIRQ_DISABLE  	         VI_TYPE 0x80#define SENCE_MASK		 VI_TYPE 0x70#define ACTIVE_MASK    	  	 VI_TYPE 0x40#define LEVEL_MASK		 VI_TYPE 0x20#define VIC_VECTOR_MASK	         VI_TYPE 0x10#define ACTIVE_HIGH         VI_TYPE 0x40#define ACTIVE_LOW          VI_TYPE 0x00#define EDGE_SENSITIVE	    VI_TYPE 0x20#define LEVEL_SENSITIVE	    VI_TYPE 0x00#define VIC_SUP_VECTOR	    VI_TYPE 0x10#define VIC_NO_SUP_VECTOR   VI_TYPE 0x00/* mask for state of LIRQ X VIC input signal */#define LIRQ_INPUT_SIGNAL_MASK	 VI_TYPE 0x08#define LIRQ_CTL_IPL_MASK	  VI_TYPE	0x07#define B_VIC_ICGSI_CTL  P_VI_TYPE (VIC_ADR +  0x43)#define ICGSI_ENABLE	VI_TYPE 	0x00#define ICGSI_DISABLE	VI_TYPE 	0xf0/*These are actually masks which may be or'ed together.NOTE:These are used for shift base values, to access the controlbit in the B_VIC_ICGSI_CTL reg do  0x1 << (ICGSx + 4)these constants are used for other ICF functions.*/#define ICGS3	 VI_TYPE 0x3#define ICGS2	 VI_TYPE 0x2#define ICGS1	 VI_TYPE 0x1#define ICGS0	 VI_TYPE 0x0#define ICGSI_IPL_MASK	VI_TYPE	0x07#define B_VIC_ICMSI_CTL  P_VI_TYPE (VIC_ADR +  0x47)#define ICMSI_ENABLE	VI_TYPE 	0x00#define ICMSI_DISABLE	VI_TYPE 	0xf0/* these are actually masks which may be or'ed together */#define ICMS3	 VI_TYPE 0x3#define ICMS2	 VI_TYPE 0x2#define ICMS1	 VI_TYPE 0x1#define ICMS0	 VI_TYPE 0x0#define ICMSI_IPL_MASK	VI_TYPE	0x07#define B_VIC_ERRI_CTL  P_VI_TYPE (VIC_ADR +  0x4b)#define ERRI_ENABLE	VI_TYPE 	0x00#define ERRI_DISABLE	VI_TYPE 	0xf0/* these are actually masks which may be or'ed together */#define ERRI_SYSFAIL		 VI_TYPE 0x10#define ERRI_ARB_TIMEOUT 	 VI_TYPE 0x20#define ERRI_WRITE_POST		 VI_TYPE 0x40#define ERRI_ACFAIL		 VI_TYPE 0x80#define ERRI_IPL_MASK	VI_TYPE	0x07#define B_VIC_ICGSI_VBASE       P_VI_TYPE (VIC_ADR +  0x4f)#define B_VIC_ICGSI_STAT        P_VI_TYPE (VIC_ADR +  0x4f)#define ICGSI_VBASE_MASK   	VI_TYPE 0xfc#define ICGSI_STAT_MASK	        VI_TYPE 0x03/* defined above but shown here	#define ICGS0		0	#define ICGS1		1	#define ICGS2		2	#define ICGS3		3*/#define B_VIC_ICMSI_VBASE 	P_VI_TYPE (VIC_ADR +  0x53)#define B_VIC_ICMSI_STAT 	P_VI_TYPE (VIC_ADR +  0x53)#define ICMSI_VBASE_MASK   	VI_TYPE 0xfc#define ICMSI_STAT_MASK	 	VI_TYPE 0x03/* defined above but shown here	#define ICMS0		0	#define ICMS1		1	#define ICMS2		2	#define ICMS3		3*/#define B_VIC_LIRQ_VBASE P_VI_TYPE (VIC_ADR +  0x57)#define B_VIC_LIRQ_STAT  P_VI_TYPE (VIC_ADR +  0x57)#define LIRQ_VBASE_MASK   	 VI_TYPE 0xf8#define LIRQ_STAT_MASK	         VI_TYPE 0x07/* this was B_VIC_ERRI_xxxx */#define B_VIC_MISCI_VBASE  	P_VI_TYPE (VIC_ADR +  0x5b)#define B_VIC_MISCI_STAT  	P_VI_TYPE (VIC_ADR +  0x5b)#define MISCI_VBASE_MASK   	 VI_TYPE 0xf8#define MISCI_STAT_MASK	         VI_TYPE 0x07#define MISCI_DMA		 VI_TYPE 0x5#define MISCI_VME_IACK	 	 VI_TYPE 0x4#define MISCI_SYSFAIL		 VI_TYPE 0x3#define MISCI_ARB_TIMEOUT 	 VI_TYPE 0x2#define MISCI_WRITE_POST 	 VI_TYPE 0x1#define MISCI_ACFAIL		 VI_TYPE 0x0#define B_VIC_IPC_SWITCH  P_VI_TYPE (VIC_ADR +  0x5f)/* ICMSX and ICGSX contants above and shift accordingly */#define B_VIC_IPC_REG0  P_VI_TYPE (VIC_ADR +  0x63)#define B_VIC_IPC_REG1  P_VI_TYPE (VIC_ADR +  0x67)#define B_VIC_IPC_REG2  P_VI_TYPE (VIC_ADR +  0x6b)#define B_VIC_IPC_REG3  P_VI_TYPE (VIC_ADR +  0x6f)#define B_VIC_IPC_REG4  P_VI_TYPE (VIC_ADR +  0x73)#define B_VIC_IPC_REG5  P_VI_TYPE (VIC_ADR +  0x77)#define B_VIC_IPC_REG6  P_VI_TYPE (VIC_ADR +  0x7b)#define B_VIC_IPC_REG7  P_VI_TYPE (VIC_ADR +  0x7f)#define B_VIC_VIRQREQ_CTL   P_VI_TYPE (VIC_ADR +  0x83)#define B_VIC_VIRQREQ_STAT  P_VI_TYPE (VIC_ADR +  0x83)#define VIRQREQ_MASK		 VI_TYPE 0x01#define VIRQREQ_ENABLE		 VI_TYPE 0x01#define VIRQREQ_DISABLE	 	 VI_TYPE 0x00#define VIRQREQ_CTL_MASK	 VI_TYPE 0xfe#define VIRQREQ_STAT	 	 VI_TYPE 0xfe#define VIRQ1REQ		 VI_TYPE 0x02#define VIRQ2REQ		 VI_TYPE 0x04#define VIRQ3REQ		 VI_TYPE 0x08#define VIRQ4REQ		 VI_TYPE 0x10#define VIRQ5REQ		 VI_TYPE 0x20#define VIRQ6REQ		 VI_TYPE 0x40#define VIRQ7REQ		 VI_TYPE 0x80#define B_VIC_VIRQ1REQ_VECTOR  P_VI_TYPE (VIC_ADR +  0x87)#define B_VIC_VIRQ2REQ_VECTOR  P_VI_TYPE (VIC_ADR +  0x8b)#define B_VIC_VIRQ3REQ_VECTOR  P_VI_TYPE (VIC_ADR +  0x8f)#define B_VIC_VIRQ4REQ_VECTOR  P_VI_TYPE (VIC_ADR +  0x93)#define B_VIC_VIRQ5REQ_VECTOR  P_VI_TYPE (VIC_ADR +  0x97)#define B_VIC_VIRQ6REQ_VECTOR  P_VI_TYPE (VIC_ADR +  0x9b)#define B_VIC_VIRQ7REQ_VECTOR  P_VI_TYPE (VIC_ADR +  0x9f)#define B_VIC_TIMEOUTS  P_VI_TYPE (VIC_ADR +  0xa3)#define B_VIC_LBUS_TIMING  P_VI_TYPE (VIC_ADR +  0xa7)#define B_VIC_BLK_XFER_DEF  P_VI_TYPE (VIC_ADR +  0xab)#define B_VIC_VME_CONFIG  P_VI_TYPE (VIC_ADR +  0xaf)#define B_VIC_ARB_REQ_CONFIG  P_VI_TYPE (VIC_ADR +  0xb3)#define B_VIC_AM_SRC  P_VI_TYPE (VIC_ADR +  0xb7)/* bus error status reg */#define B_VIC_BERR_STAT		 P_VI_TYPE (VIC_ADR +  0xbb)#define LBUS_VME_ACQ_TIME_OUT    VI_TYPE 0x01#define SELF_SLAVE1_ACC 	 VI_TYPE 0x02#define SELF_SLAVE0_ACC 	 VI_TYPE 0x04#define LBUS_TIME_OUT		 VI_TYPE 0x08#define VME_TIMEOUT		 VI_TYPE 0x10#define VME_BUS_ERROR		 VI_TYPE 0x20#define LBUS_ERROR		 VI_TYPE 0x40#define IAM_SYSCON		 VI_TYPE 0x80#define B_VIC_DMA_STAT  P_VI_TYPE (VIC_ADR +  0xbf)#define B_VIC_SLS0_CTL0  P_VI_TYPE (VIC_ADR +  0xc3)#define TMR_MASK 	 VI_TYPE 0xc0#define DISABLE_TMR	 VI_TYPE  0x0#define ENABLE_HZ50	 VI_TYPE 0x40#define ENABLE_HZ1000	 VI_TYPE 0x80#define ENABLE_HZ100	 VI_TYPE 0xc0#define ASIZE_MASK	VI_TYPE	0x0c#define	ASIZE_32	VI_TYPE 0x00#define	ASIZE_24	VI_TYPE 0x04#define	ASIZE_16	VI_TYPE 0x08#define B_VIC_SLS0_CTL1  P_VI_TYPE (VIC_ADR +  0xc7)#define B_VIC_SLS1_CTL0  P_VI_TYPE (VIC_ADR +  0xcb)#define B_VIC_SLS1_CTL1  P_VI_TYPE (VIC_ADR +  0xcf)#define B_VIC_RLSE_CTL  P_VI_TYPE (VIC_ADR +  0xd3)#define B_VIC_BLK_XFER_CTL  P_VI_TYPE (VIC_ADR +  0xd7)#define B_VIC_BLK_XFER_LEN0  P_VI_TYPE (VIC_ADR +  0xdb)#define B_VIC_BLK_XFER_LEN1  P_VI_TYPE (VIC_ADR +  0xdf)#define B_VIC_SYS_RESET  P_VI_TYPE (VIC_ADR +  0xe3)#define SYS_RESET_ENABLE	 VI_TYPE 0xf0#ifdef __cplusplus}#endif#endif /* __INCivich */

⌨️ 快捷键说明

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