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

VxWorks

开发平台:

C/C++

  1. /* m68901.h - Motorola MC68901 MFP (Multi-Function Peripheral) */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01m,30jan93,dzb  added sys and aux TIMER structures to TY_CO_DEV.
  7.                  consolidated each timer's MFP_TCR macros into generic macros.
  8.  added MFP_TCR_{A,B,C,D}_MASK macros.  added comments.
  9. 01l,04jan93,caf  added timer driver support to TY_CO_DEV structure.
  10.  also added baudFreq, baudMin and baudMax to TY_CO_DEV.
  11. 01k,18dec92,caf  added TY_CO_DEV and function declarations for 5.1 upgrade.
  12.  for 5.0.x compatibility, define INCLUDE_TY_CO_DRV_50 when
  13.  including this header.
  14. 01j,22sep92,rrr  added support for c++
  15. 01i,26may92,rrr  the tree shuffle
  16. 01h,04oct91,rrr  passed through the ansification filter
  17.   -changed ASMLANGUAGE to _ASMLANGUAGE
  18.   -changed copyright notice
  19. 01g,05oct90,shl  added copyright notice.
  20.                  made #endif ANSI style.
  21. 01f,28jul90,gae  fixed typo in TADR definition introduced in 01e.
  22. 01e,13jul90,gae  simplified MFP macros.
  23. 01d,15feb89,jcc  incorporated MFP_REG_ADDR_INTERVAL into
  24.  register address definitions.
  25. 01c,16jan89,jcf  added defines for rest of chip.
  26. 01b,04may88,gae  fixed name on banner.
  27. 01a,30apr88,gae  extracted from mv133.h.
  28. */
  29. #ifndef __INCm68901h
  30. #define __INCm68901h
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34. /*
  35.  * The macro MFP_REG_ADDR_INTERVAL must be defined
  36.  * when including this header.
  37.  */
  38. #ifdef _ASMLANGUAGE
  39. #define CAST
  40. #else /* _ASMLANGUAGE */
  41. #define CAST (char *)
  42. #ifndef INCLUDE_TY_CO_DRV_50
  43. #include "tyLib.h"
  44. typedef struct /* TIMER */
  45.     {
  46.     char *cr; /* timer control register */
  47.     char *dr; /* timer data register */
  48.     char *ier; /* interrupt enable register */
  49.     char *imr; /* interrupt mask register */
  50.     int cMask; /* timer control register mask */
  51.     int iMask; /* interrupt register mask */
  52.     int prescale; /* clock timer resolution constant */
  53.     } TIMER;
  54. typedef struct /* TY_CO_DEV */
  55.     {
  56.     TY_DEV tyDev;
  57.     BOOL created; /* true if this device has really been created  */
  58.     uint32_t baudFreq; /* reference clock, in Hz                       */
  59.     uint16_t baudMin; /* minimum baud rate                            */
  60.     uint16_t baudMax; /* maximum baud rate                            */
  61.     char *ucr; /* USART control register                       */
  62.     char *rsr; /* receiver status register                     */
  63.     char *tsr; /* transmit status register                     */
  64.     char *udr; /* USART data register                          */
  65.     char *imra;
  66.     char *imrb;
  67.     char *iera;
  68.     char *ierb;
  69.     char *baud1; /* baud rate 1 generator data register */
  70.     char *baud2; /* baud rate 2 generator data register */
  71.     TIMER sys; /* system clock timer */
  72.     TIMER aux; /* auxilliary clock timer */
  73.     } TY_CO_DEV;
  74. #endif /* INCLUDE_TY_CO_DRV_50 */
  75. #endif /* _ASMLANGUAGE */
  76. #define MFP_ADRS(base,reg)   (CAST (base+(reg*MFP_REG_ADDR_INTERVAL)))
  77. /* register definitions */
  78. #define MFP_GPIP(base) MFP_ADRS(base,0x00) /* Data I/O port           */
  79. #define MFP_AER(base) MFP_ADRS(base,0x01) /* active edge register    */
  80. #define MFP_DDR(base) MFP_ADRS(base,0x02) /* data direction reg.     */
  81. #define MFP_IERA(base) MFP_ADRS(base,0x03) /* interrupt enable reg A  */
  82. #define MFP_IERB(base) MFP_ADRS(base,0x04) /* interrupt enable reg B  */
  83. #define MFP_IPRA(base) MFP_ADRS(base,0x05) /* int. pending reg A      */
  84. #define MFP_IPRB(base) MFP_ADRS(base,0x06) /* int. pending reg B      */
  85. #define MFP_ISRA(base) MFP_ADRS(base,0x07) /* int. in-service reg A   */
  86. #define MFP_ISRB(base) MFP_ADRS(base,0x08) /* int. in-service reg B   */
  87. #define MFP_IMRA(base) MFP_ADRS(base,0x09) /* interrupt mask reg A    */
  88. #define MFP_IMRB(base) MFP_ADRS(base,0x0a) /* interrupt mask reg B    */
  89. #define MFP_VR(base) MFP_ADRS(base,0x0b) /* vector reg              */
  90. #define MFP_TACR(base)  MFP_ADRS(base,0x0c) /* timer A control reg     */
  91. #define MFP_TBCR(base)  MFP_ADRS(base,0x0d) /* timer B control reg     */
  92. #define MFP_TCDCR(base) MFP_ADRS(base,0x0e) /* timers C&D control reg  */
  93. #define MFP_TADR(base)  MFP_ADRS(base,0x0f) /* timer A data reg        */
  94. #define MFP_TBDR(base)  MFP_ADRS(base,0x10) /* timer B data reg        */
  95. #define MFP_TCDR(base)  MFP_ADRS(base,0x11) /* timer C data reg        */
  96. #define MFP_TDDR(base)  MFP_ADRS(base,0x12) /* timer D data reg        */
  97. #define MFP_SCR(base) MFP_ADRS(base,0x13) /* sync char reg           */
  98. #define MFP_UCR(base) MFP_ADRS(base,0x14) /* USART control reg       */
  99. #define MFP_RSR(base) MFP_ADRS(base,0x15) /* receiver status reg     */
  100. #define MFP_TSR(base) MFP_ADRS(base,0x16) /* transmitter status reg  */
  101. #define MFP_UDR(base)   MFP_ADRS(base,0x17) /* USART data reg          */
  102. /* vector number offsets */
  103. #define MFP_INT_GP0 0x00 /* general purpose I0 */
  104. #define MFP_INT_GP1 0x01 /* general purpose I1 */
  105. #define MFP_INT_GP2 0x02 /* general purpose I2 */
  106. #define MFP_INT_GP3 0x03 /* general purpose I3 */
  107. #define MFP_INT_TIMER_D 0x04 /* timer D */
  108. #define MFP_INT_TIMER_C 0x05 /* timer C */
  109. #define MFP_INT_GP4 0x06 /* general purpose I4 */
  110. #define MFP_INT_GP5 0x07 /* general purpose I5 */
  111. #define MFP_INT_TIMER_B 0x08 /* timer B */
  112. #define MFP_INT_TX_ERR 0x09 /* transmit error */
  113. #define MFP_INT_TRANS 0x0a /* transmit buffer empty */
  114. #define MFP_INT_RX_ERR 0x0b /* receive error */
  115. #define MFP_INT_RECV 0x0c /* receive buffer full */
  116. #define MFP_INT_TIMER_A 0x0d /* timer A */
  117. #define MFP_INT_GP6 0x0e /* general purpose I6 */
  118. #define MFP_INT_GP7 0x0f /* general purpose I7 */
  119. /* fields of vector register (VR) */
  120. #define MFP_VR_SOFT 0x08 /* software acknowledge interrupts */
  121. /* fields of interrupt enable A (IERA), interrupt pending A (IPRA), */
  122. /* interrupt in-service A (ISRA), interrupt mask A (IMRA) */
  123. #define MFP_A_TIMER_B 0x01 /* timer B */
  124. #define MFP_A_TX_ERR 0x02 /* transmitter error */
  125. #define MFP_A_TX_EMPTY 0x04 /* transmitter buffer empty */
  126. #define MFP_A_RX_ERR 0x08 /* receiver error */
  127. #define MFP_A_RX_FULL 0x10 /* receiver buffer full */
  128. #define MFP_A_TIMER_A 0x20 /* timer A */
  129. #define MFP_A_GPIP6 0x40 /* general purpose i/o 6 */
  130. #define MFP_A_GPIP7 0x80 /* general purpose i/o 7 */
  131. /* fields of interrupt enable B (IERB), interrupt pending B (IPRB), */
  132. /* interrupt in-service B (ISRB), interrupt mask B (IMRB) */
  133. #define MFP_B_GPIP0 0x01 /* general purpose i/o 0 */
  134. #define MFP_B_GPIP1 0x02 /* general purpose i/o 1 */
  135. #define MFP_B_GPIP2 0x04 /* general purpose i/o 2 */
  136. #define MFP_B_GPIP3 0x08 /* general purpose i/o 3 */
  137. #define MFP_B_TIMER_D 0x10 /* timer D */
  138. #define MFP_B_TIMER_C 0x20 /* timer C */
  139. #define MFP_B_GPIP4 0x40 /* general purpose i/o 4 */
  140. #define MFP_B_GPIP5 0x80 /* general purpose i/o 5 */
  141. /* fields of usart control register (UCR) */
  142. #define MFP_UCR_16X 0x80 /* divide clock souce by 16 */
  143. #define MFP_UCR_8BIT 0x00 /* 8 bit word length */
  144. #define MFP_UCR_7BIT 0x20 /* 7 bit word length */
  145. #define MFP_UCR_6BIT 0x40 /* 6 bit word length */
  146. #define MFP_UCR_5BIT 0x60 /* 5 bit word length */
  147. #define MFP_UCR_SYNC 0x00 /* synchronous */
  148. #define MFP_UCR_1STOP 0x08 /* one stop bit */
  149. #define MFP_UCR_1_AND_HALF_STOP 0x10 /* one and a half stop bits */
  150. #define MFP_UCR_2STOP 0x18 /* two stop bits */
  151. #define MFP_UCR_NO_PARITY 0x00 /* disable parity */
  152. #define MFP_UCR_EVEN_PARITY 0x06 /* enable even parity */
  153. #define MFP_UCR_ODD_PARITY 0x04 /* enable odd parity */
  154. /* fields of receiver status register (RSR) */
  155. #define MFP_RSR_RX_ENABLE 0x01 /* enable receiver */
  156. #define MFP_RSR_SYNC_STRIP_ENABLE 0x02 /* strip sync characters */
  157. #define MFP_RSR_CHAR_IN_PROGRESS 0x04 /* receiving a character */
  158. #define MFP_RSR_BREAK_DETECT 0x08 /* break detect */
  159. #define MFP_RSR_FRAME_ERROR 0x10 /* framing error */
  160. #define MFP_RSR_PARITY_ERROR 0x20 /* parity error */
  161. #define MFP_RSR_OVERRUN_ERROR 0x40 /* overrun error */
  162. #define MFP_RSR_BUFFER_FULL 0x80 /* receive buffer full */
  163. /* fields of transmitter status register (TSR) */
  164. #define MFP_TSR_TX_ENABLE 0x01 /* enable receiver */
  165. #define MFP_TSR_HI_Z 0x00 /* hi - Z */
  166. #define MFP_TSR_LOW 0x02 /* LOW */
  167. #define MFP_TSR_HIGH 0x04 /* HIGH */
  168. #define MFP_TSR_LOOP 0x06 /* LOOP */
  169. #define MFP_TSR_BREAK 0x08 /* transmit break */
  170. #define MFP_TSR_EOT 0x10 /* end of transmission */
  171. #define MFP_TSR_AUTO_TURNAROUND 0x20 /* parity error */
  172. #define MFP_TSR_UNDERRUN_ERROR 0x40 /* overrun error */
  173. #define MFP_TSR_BUFFER_EMPTY 0x80 /* transmit buffer empty */
  174. /* fields of timer control registers */
  175. #define MFP_TCR_A_MASK 0xf /* timer A mask                       */
  176. #define MFP_TCR_B_MASK 0xf /* timer B mask                       */
  177. #define MFP_TCR_C_MASK 0x70 /* timer C mask                       */
  178. #define MFP_TCR_D_MASK 0x7 /* timer D mask                       */
  179. #define MFP_TCR_RESET 0x10 /* reset timer A&B       */
  180. #define MFP_TCR_STOP 0x00 /* stop timer        */
  181. #define MFP_TCR_DELAY_4 0x11 /* delay mode, divide by 4 prescale   */
  182. #define MFP_TCR_DELAY_10 0x22 /* delay mode, divide by 10 prescale  */
  183. #define MFP_TCR_DELAY_16 0x33 /* delay mode, divide by 16 prescale  */
  184. #define MFP_TCR_DELAY_50 0x44 /* delay mode, divide by 50 prescale  */
  185. #define MFP_TCR_DELAY_64 0x55 /* delay mode, divide by 64 prescale  */
  186. #define MFP_TCR_DELAY_100 0x66 /* delay mode, divide by 100 prescale */
  187. #define MFP_TCR_DELAY_200 0x77 /* delay mode, divide by 200 prescale */
  188. #define MFP_TCR_EVENT 0x8 /* event count mode       */
  189. #define MFP_TCR_PULSE_4 0x9 /* pulse mode, divide by 4 prescale   */
  190. #define MFP_TCR_PULSE_10 0xa /* pulse mode, divide by 10 prescale  */
  191. #define MFP_TCR_PULSE_16 0xb /* pulse mode, divide by 16 prescale  */
  192. #define MFP_TCR_PULSE_50 0xc /* pulse mode, divide by 50 prescale  */
  193. #define MFP_TCR_PULSE_64 0xd /* pulse mode, divide by 64 prescale  */
  194. #define MFP_TCR_PULSE_100 0xe /* pulse mode, divide by 100 prescale */
  195. #define MFP_TCR_PULSE_200 0xf /* pulse mode, divide by 200 prescale */
  196. /* function declarations */
  197. #ifndef INCLUDE_TY_CO_DRV_50
  198. #ifndef _ASMLANGUAGE
  199. #if defined(__STDC__) || defined(__cplusplus)
  200. IMPORT void tyCoRxInt (void);
  201. IMPORT void tyCoTxInt (void);
  202. #else /* __STDC__ */
  203. IMPORT void tyCoRxInt ();
  204. IMPORT void tyCoTxInt ();
  205. #endif /* __STDC__ */
  206. #endif /* _ASMLANGUAGE */
  207. #endif /* INCLUDE_TY_CO_DRV_50 */
  208. #ifdef __cplusplus
  209. }
  210. #endif
  211. #endif /* __INCm68901h */