mpc107Epic.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:13k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* mpc107Epic.h - MPC107 EPIC register definitions  */
  2. /* Copyright 1984-2000 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,11sep00,rcs  correct include path errors
  7. 01a,06jun00,bri written
  8. */
  9. #ifndef __INCmpc107Epich
  10. #define __INCmpc107Epich
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. /* includes */
  15. #include "drv/multi/mpc107.h"
  16. /* defines */
  17. /* MPC107 configuration registers for EPIC  && other definitions */
  18. #define  INTERRUPT_TABLESIZE   256 /* Interrupt Table Size */
  19. #define EPIC_EUMBBAR   0x40000   /* EUMBBAR of EPIC  */
  20. #define MPC107_EPIC_FEATURES_REG  (EPIC_EUMBBAR + 0x01000)/* Feature report */
  21. #define MPC107_EPIC_GLOBAL_REG   (EPIC_EUMBBAR + 0x01020)/* Global config.  */
  22. #define MPC107_EPIC_INT_CONF_REG  (EPIC_EUMBBAR + 0x01030)/* Interrupt config */
  23. #define MPC107_EPIC_VENDOR_ID_REG (EPIC_EUMBBAR + 0x01080)/* Vendor id */
  24. #define MPC107_EPIC_PROC_INIT_REG (EPIC_EUMBBAR + 0x01090)/* Processor init. */
  25. #define MPC107_EPIC_SPUR_VEC_REG  (EPIC_EUMBBAR + 0x010e0)/* Spurious vector */
  26. #define MPC107_EPIC_TM_FREQ_REG   (EPIC_EUMBBAR + 0x010f0)/* Timer Frequency */
  27. /*
  28.  * Definitions of Global Timer Registers :
  29.  * Global Timer Current Count Register   (GTCCR)
  30.  * Global Timer Base Count Register      (GTBCR)
  31.  * Global Timer Vector/Priority Register (GTVPR)
  32.  * Global Timer  Destination Register    (GTDR)
  33.  */
  34. #define MPC107_EPIC_TM0_CUR_COUNT_REG (EPIC_EUMBBAR + 0x01100) /* GTCCR0 */
  35. #define MPC107_EPIC_TM0_BASE_COUNT_REG (EPIC_EUMBBAR + 0x01110) /* GTBCRO */
  36. #define MPC107_EPIC_TM0_VEC_REG         (EPIC_EUMBBAR + 0x01120) /* GTVPR0 */
  37. #define MPC107_EPIC_TM0_DES_REG         (EPIC_EUMBBAR + 0x01130) /* GTDR0 */
  38. #define MPC107_EPIC_TM1_CUR_COUNT_REG (EPIC_EUMBBAR + 0x01140) /* GTCCR1 */
  39. #define MPC107_EPIC_TM1_BASE_COUNT_REG (EPIC_EUMBBAR + 0x01150) /* GTBCR1*/
  40. #define MPC107_EPIC_TM1_VEC_REG         (EPIC_EUMBBAR + 0x01160) /* GTVPR1*/
  41. #define MPC107_EPIC_TM1_DES_REG         (EPIC_EUMBBAR + 0x01170) /* GTDR1*/
  42. #define MPC107_EPIC_TM2_CUR_COUNT_REG (EPIC_EUMBBAR + 0x01180) /* GTCCR2 */
  43. #define MPC107_EPIC_TM2_BASE_COUNT_REG (EPIC_EUMBBAR + 0x01190) /* GTBCR2 */
  44. #define MPC107_EPIC_TM2_VEC_REG         (EPIC_EUMBBAR + 0x011a0) /* GTVPR2 */
  45. #define MPC107_EPIC_TM2_DES_REG         (EPIC_EUMBBAR + 0x011b0) /* GTDR2 */
  46. #define MPC107_EPIC_TM3_CUR_COUNT_REG (EPIC_EUMBBAR + 0x011c0) /* GTCCR3 */
  47. #define MPC107_EPIC_TM3_BASE_COUNT_REG (EPIC_EUMBBAR + 0x011d0) /* GTBCR3 */
  48. #define MPC107_EPIC_TM3_VEC_REG         (EPIC_EUMBBAR + 0x011e0) /* GTVPR3 */
  49. #define MPC107_EPIC_TM3_DES_REG         (EPIC_EUMBBAR + 0x011f0) /* GTDR3  */
  50. /*
  51.  * External Interrupts  Vector /Priority Registers (IVPR) and
  52.  * Destination Registers (IDR)
  53.  */
  54. #define MPC107_EPIC_EX_INT0_VEC_REG (EPIC_EUMBBAR + 0x10200) /* IVPR0 */
  55. #define MPC107_EPIC_EX_INT0_DES_REG (EPIC_EUMBBAR + 0x10210) /* IDR0  */
  56. #define MPC107_EPIC_EX_INT1_VEC_REG (EPIC_EUMBBAR + 0x10220) /* IVPR1 */
  57. #define MPC107_EPIC_EX_INT1_DES_REG (EPIC_EUMBBAR + 0x10230) /* IDR1  */
  58. #define MPC107_EPIC_EX_INT2_VEC_REG (EPIC_EUMBBAR + 0x10240) /* IVPR2 */
  59. #define MPC107_EPIC_EX_INT2_DES_REG (EPIC_EUMBBAR + 0x10250) /* IDR2  */
  60. #define MPC107_EPIC_EX_INT3_VEC_REG (EPIC_EUMBBAR + 0x10260) /* IVPR3 */
  61. #define MPC107_EPIC_EX_INT3_DES_REG (EPIC_EUMBBAR + 0x10270) /* IDR3  */
  62. #define MPC107_EPIC_EX_INT4_VEC_REG (EPIC_EUMBBAR + 0x10280) /* IVPR4 */
  63. #define MPC107_EPIC_EX_INT4_DES_REG (EPIC_EUMBBAR + 0x10290) /* IDR4  */
  64. /*
  65.  * Serial Interrupts  Vector /Priority Registers (SVPR) and
  66.  * Destination Registers (SDR)
  67.  */
  68. #define MPC107_EPIC_SR_INT0_VEC_REG (EPIC_EUMBBAR + 0x10200) /*  SVPR0 */
  69. #define MPC107_EPIC_SR_INT0_DES_REG (EPIC_EUMBBAR + 0x10210) /*  SDR0  */
  70. #define MPC107_EPIC_SR_INT1_VEC_REG (EPIC_EUMBBAR + 0x10220) /*  SVPR1 */
  71. #define MPC107_EPIC_SR_INT1_DES_REG (EPIC_EUMBBAR + 0x10230) /*  SDR1  */
  72. #define MPC107_EPIC_SR_INT2_VEC_REG (EPIC_EUMBBAR + 0x10240) /*  SVPR2 */
  73. #define MPC107_EPIC_SR_INT2_DES_REG (EPIC_EUMBBAR + 0x10250) /*  SDR2  */
  74. #define MPC107_EPIC_SR_INT3_VEC_REG (EPIC_EUMBBAR + 0x10260) /*  SVPR3 */
  75. #define MPC107_EPIC_SR_INT3_DES_REG (EPIC_EUMBBAR + 0x10270) /*  SDR3  */
  76. #define MPC107_EPIC_SR_INT4_VEC_REG (EPIC_EUMBBAR + 0x10280) /*  SVPR4 */
  77. #define MPC107_EPIC_SR_INT4_DES_REG (EPIC_EUMBBAR + 0x10290) /*  SDR4  */
  78. #define MPC107_EPIC_SR_INT5_VEC_REG (EPIC_EUMBBAR + 0x102a0) /* SVPR5 */
  79. #define MPC107_EPIC_SR_INT5_DES_REG (EPIC_EUMBBAR + 0x102b0) /* SDR5  */
  80. #define MPC107_EPIC_SR_INT6_VEC_REG (EPIC_EUMBBAR + 0x102c0) /* SVPR6 */
  81. #define MPC107_EPIC_SR_INT6_DES_REG (EPIC_EUMBBAR + 0x102d0) /* SDR6  */
  82. #define MPC107_EPIC_SR_INT7_VEC_REG (EPIC_EUMBBAR + 0x102e0) /* SVPR7 */
  83. #define MPC107_EPIC_SR_INT7_DES_REG (EPIC_EUMBBAR + 0x102f0) /* SDR7  */
  84. #define MPC107_EPIC_SR_INT8_VEC_REG (EPIC_EUMBBAR + 0x10300) /* SVPR8 */
  85. #define MPC107_EPIC_SR_INT8_DES_REG (EPIC_EUMBBAR + 0x10310) /* SDR8  */
  86. #define MPC107_EPIC_SR_INT9_VEC_REG (EPIC_EUMBBAR + 0x10320) /* SVPR9 */
  87. #define MPC107_EPIC_SR_INT9_DES_REG (EPIC_EUMBBAR + 0x10330) /* SDR9  */
  88. #define MPC107_EPIC_SR_INT10_VEC_REG (EPIC_EUMBBAR + 0x10340) /* SVPR10 */
  89. #define MPC107_EPIC_SR_INT10_DES_REG (EPIC_EUMBBAR + 0x10350) /* SDR10  */
  90. #define MPC107_EPIC_SR_INT11_VEC_REG (EPIC_EUMBBAR + 0x10360) /* SVPR11 */
  91. #define MPC107_EPIC_SR_INT11_DES_REG (EPIC_EUMBBAR + 0x10370) /* SDR11  */
  92. #define MPC107_EPIC_SR_INT12_VEC_REG (EPIC_EUMBBAR + 0x10380) /* SVPR12 */
  93. #define MPC107_EPIC_SR_INT12_DES_REG (EPIC_EUMBBAR + 0x10390) /* SDR12  */
  94. #define MPC107_EPIC_SR_INT13_VEC_REG (EPIC_EUMBBAR + 0x103a0) /* SVPR13 */
  95. #define MPC107_EPIC_SR_INT13_DES_REG (EPIC_EUMBBAR + 0x103b0) /* SDR13  */
  96. #define MPC107_EPIC_SR_INT14_VEC_REG (EPIC_EUMBBAR + 0x103c0) /* SVPR14 */
  97. #define MPC107_EPIC_SR_INT14_DES_REG (EPIC_EUMBBAR + 0x103d0) /* SDR14  */
  98. #define MPC107_EPIC_SR_INT15_VEC_REG (EPIC_EUMBBAR + 0x103e0) /* SVPR15 */
  99. #define MPC107_EPIC_SR_INT15_DES_REG (EPIC_EUMBBAR + 0x103f0) /* SDR15 */
  100. /*
  101.  * IIC Interrupts  Vector /Priority Registers (IIVPR) and
  102.  * Destination Registers (IIDR)
  103.  */
  104. #define MPC107_EPIC_I2C_INT_VEC_REG (EPIC_EUMBBAR + 0x11020)/* IIVPR0 */
  105. #define MPC107_EPIC_I2C_INT_DES_REG (EPIC_EUMBBAR + 0x11030)/* IIDR0 */
  106. /*
  107.  * DMA Interrupts  Vector /Priority Registers (IIVPR) and
  108.  * Destination Registers (IIDR) - Channel Zero
  109.  */
  110. #define MPC107_EPIC_DMA0_INT_VEC_REG (EPIC_EUMBBAR + 0x11040) /* IIVPR1 */
  111. #define MPC107_EPIC_DMA0_INT_DES_REG (EPIC_EUMBBAR + 0x11050) /* IIDR1  */
  112. /*
  113.  * DMA Interrupts  Vector /Priority Registers (IIVPR) and
  114.  * Destination Registers (IIDR) -  Channel One
  115.  */
  116. #define MPC107_EPIC_DMA1_INT_VEC_REG (EPIC_EUMBBAR + 0x11060) /* IIVPR2 */
  117. #define MPC107_EPIC_DMA1_INT_DES_REG (EPIC_EUMBBAR + 0x11070) /* IIDR2 */
  118. /*
  119.  * Message Unit  Interrupts  Vector /Priority Registers (IIVPR) and
  120.  * Destination Registers (IIDR)
  121.  */
  122. #define MPC107_EPIC_MSG_INT_VEC_REG (EPIC_EUMBBAR + 0x110c0)/* IIVPR3 */
  123. #define MPC107_EPIC_MSG_INT_DES_REG (EPIC_EUMBBAR + 0x110d0)/* IIDR3  */
  124. /* General  Register Definitions */
  125. #define MPC107_EPIC_PROC_CTASK_PRI_REG 
  126.               (EPIC_EUMBBAR + 0x20080)  /* Proccesor current task Register */
  127. #define MPC107_EPIC_PROC_INT_ACK_REG 
  128.               (EPIC_EUMBBAR + 0x200a0) /* Interrupt  acknowledge  Register */
  129. #define MPC107_EPIC_PROC_EOI_REG 
  130.               (EPIC_EUMBBAR + 0x200b0) /* End of interrupt Register */
  131. /* General   Definitions */
  132. #define MPC107_EPIC_VEC_REG_INTERVAL 0x20 /* Distance between interrupt */
  133.                                              /* vector registers */
  134. #define MPC107_EPIC_VEC_REG(irq)       (MPC107_EPIC_EX_INT0_VEC_REG + 
  135.                                  (irq * MPC107_EPIC_VEC_REG_INTERVAL))
  136. #define MPC107_EPIC_DIRECT_IRQ 0 /* Direct IRQ */
  137. #define MPC107_INT_VEC_IRQ0             5 /* Maximum Ext Interrupts */
  138. #define MPC107_EPIC_INTER_IN_SERVICE 2 /* Interrupt in service */
  139. #define MPC107_EPIC_INTERNAL_INTERRUPT 20 /* Internal Interrupts */
  140. #define MPC107_EPIC_EXTERNAL_INTERRUPT 21 /* External Interrupts */
  141. #define MPC107_EPIC_INV_INTER_SOURCE   22 /* Invalid Interrupt Source */
  142. #define MPC107_EPIC_MAX_EXT_IRQS        5 /* Maximum No. of ext.Interrupts */
  143. #define MPC107_EPIC_PRIORITY_MIN 0 /* minimum level of priority */
  144. #define MPC107_EPIC_PRIORITY_MAX       15 /* maximum level of priority */
  145. #define MPC107_EPIC_PRIORITY_GENERAL   12 /* General priority */
  146. #define MPC107_EPIC_INV_PRIO_ERROR ((ULONG)(-1)) /* Invalid Priority */
  147. #define MPC107_EPIC_IVPRO_INT_NUM       0  /* External Interrupt 0 */
  148. #define MPC107_EPIC_IVPR1_INT_NUM 1  /* External Interrupt 1 */
  149. #define MPC107_EPIC_IVPR2_INT_NUM 2  /* External Interrupt 2 */
  150. #define MPC107_EPIC_IVPR3_INT_NUM 3  /* External Interrupt 3 */
  151. #define MPC107_EPIC_IVPR4_INT_NUM 4  /* External Interrupt 4 */
  152. #define MPC107_EPIC_SVPRO_INT_NUM 0  /* Serial Interrupt 0   */
  153. #define MPC107_EPIC_SVPR1_INT_NUM 1  /* Serial Interrupt 1   */
  154. #define MPC107_EPIC_SVPR2_INT_NUM 2  /* Serial Interrupt 2   */
  155. #define MPC107_EPIC_SVPR3_INT_NUM 3  /* Serial Interrupt 3   */
  156. #define MPC107_EPIC_SVPR4_INT_NUM 4  /* Serial Interrupt 4   */
  157. #define MPC107_EPIC_SVPR5_INT_NUM 5  /* Serial Interrupt 5   */
  158. #define MPC107_EPIC_SVPR6_INT_NUM 6  /* Serial Interrupt 6   */
  159. #define MPC107_EPIC_SVPR7_INT_NUM 7  /* Serial Interrupt 7   */
  160. #define MPC107_EPIC_SVPR8_INT_NUM 8  /* Serial Interrupt 8   */
  161. #define MPC107_EPIC_SVPR9_INT_NUM 9  /* Serial Interrupt 9   */
  162. #define MPC107_EPIC_SVPR1O_INT_NUM 10 /* Serial Interrupt 10  */
  163. #define MPC107_EPIC_SVPR11_INT_NUM 11 /* Serial Interrupt 11  */
  164. #define MPC107_EPIC_SVPR12_INT_NUM 12 /* Serial Interrupt 12  */
  165. #define MPC107_EPIC_SVPR13_INT_NUM 13 /* Serial Interrupt 13  */
  166. #define MPC107_EPIC_SVPR14_INT_NUM 14 /* Serial Interrupt 14  */
  167. #define MPC107_EPIC_SVPR15_INT_NUM 15 /* Serial Interrupt 15  */
  168. #define MPC107_EPIC_IIC_INT_VECT         0x71  /* IIC  Interrupt  */
  169. #define MPC107_EPIC_DMA0_INT_VECT  0x72  /* DMA Channel 0 Interrupt */
  170. #define MPC107_EPIC_DMA1_INT_VECT  0x73  /* DMA Channel 1 Interrupt */
  171. #define MPC107_EPIC_MU_INT_VECT          0x76  /* Message Unit Interrupt  */
  172. /* Bit definitions */
  173. /* Global Configuration Register Bit Definitions  */
  174. #define MPC107_EPIC_GCR_RESET 0x80000000 /* EPIC reset bit */
  175. #define MPC107_EPIC_GCR_MODE_MIXED 0x20000000 /* EPIC Mixed Mode bit */
  176. /* Interrupt Configuration Register Bit Definitions  */
  177. #define MPC107_EPIC_ICR_SEI 0x08000000 /* Serial Interrupt Enable */
  178. #define MPC107_EPIC_ICR_CLK_RATIO_MSK
  179.         (0x40000000 | 0x20000000 | 0x10000000) /* Clock  Ratio Mask  Bits */
  180. #define MPC107_EPIC_ICR_CLK_RATIO(val) 
  181.         (((val) << 28) & MPC107_EPIC_ICR_CLK_RATIO_MSK) /* Clock Ratio Shift */
  182. /* Interrupt Vector/Priority  Register Bit Definitions */
  183. #define MPC107_EPIC_IVPR_INTR_MSK    0x80000000   /* Interrupt Mask bit */
  184. #define MPC107_EPIC_IVPR_INTR_ACTIVE 0x40000000   /* Interrupt Activity Bit */
  185. #define MPC107_EPIC_IVPR_INTR_POLARITY 0x00800000   /* Interrupt Polarity Bit */
  186. #define MPC107_EPIC_IVPR_INTR_SENSE    0x00400000   /* Interrupt Sense Bit */
  187. #define MPC107_EPIC_IVPR_POLARITY(p) ((p) << 23) /* Int Polarity Shift */
  188. #define MPC107_EPIC_IVPR_SENS(s)       ((s) << 22) /* Int Sense Shift */
  189. #define MPC107_EPIC_IVPR_PRIORITY_MSK
  190.         (0x00080000 | 0x00040000 | 0x00020000 | 0x00010000) /* Priority Mask */
  191. #define MPC107_EPIC_IVPR_PRIORITY(p) 
  192.         (((p) << 16) & MPC107_EPIC_IVPR_PRIORITY_MSK)/* Priority Shift */
  193. #define MPC107_EPIC_IVPR_VECTOR_MSK    (0xff)       /* Vector Mask  */
  194. #define MPC107_EPIC_IVPR_VECTOR(vec) 
  195.                ((vec) & MPC107_EPIC_IVPR_VECTOR_MSK) /* Vector Mask */
  196. #define MPC107_EPIC_INT_ACT_LOW    0                 /* Active low Interrupt */
  197. #define MPC107_EPIC_INT_ACT_HIGH   1                 /* Active high Interrupt */
  198. #define MPC107_EPIC_SENSE_LVL    1                 /* Level Sensitive */
  199. #define MPC107_EPIC_SENSE_EDG    0                 /* Edge Sensitive  */
  200. #define MPC107_EPIC_INT_POLARITY   0x0               /* Interrupt polarity */
  201. /* Global Timer Vector/Priority register Bit Definitions */
  202. #define MPC107_EPIC_TM_VECREG_INTMASK   0x80000000 /* Interrupt Mask Bit */
  203. /* Global Timer Base Count Register  Bit Definitions */
  204. #define MPC107_EPIC_TM_BASE_COUNT_CI   0x80000000 /* Count Inhibit Bit */
  205. #define MPC107_EPIC_TM_CUR_COUNT_TB   0x80000000 /* toggle bit */
  206. /* typedefs */
  207. /*  interrupt handler description  */
  208. typedef struct intHandlerDesc
  209.     {
  210.     VOIDFUNCPTR vec; /* interrupt vector */
  211.     INT32 arg; /* interrupt handler argument */
  212.     struct  intHandlerDesc * next; /* pointer to the next handler */
  213.     } INT_HANDLER_DESC;
  214. /* function declarations */
  215. IMPORT VOID    mpc107EpicInit (ULONG IRQType, ULONG clkRatio);
  216. IMPORT VOID mpc107EpicIntrInit (VOID);
  217. IMPORT STATUS   mpc107EpicIntConnect (VOIDFUNCPTR *vector,
  218.                                       VOIDFUNCPTR routine,
  219.                                       INT32 parameter );
  220. IMPORT STATUS mpc107EpicIntDisconnect (VOIDFUNCPTR * vector,
  221.                                         VOIDFUNCPTR routine);
  222. IMPORT VOID    mpc107EpicIntHandler (VOID);
  223. #ifdef __cplusplus
  224. }
  225. #endif
  226. #endif /* __INCmpc107Epich */