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

VxWorks

开发平台:

C/C++

  1. /* m68681Sio.h - Motorola M68681 serial chip header file */
  2. /* Copyright 1984-1996 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,03jun96,dat  added opcrCopy and oprCopy fields, new rtns
  7. 01a,08feb96,dds  created.
  8. */
  9. /*
  10. This file contains constants for the Motorola M68681 serial chip.
  11. The constants DUART_REG_OFFSET and SIO must defined when
  12. including this header file.
  13. */
  14. #ifndef __INCm68681Sioh
  15. #define __INCm68681Sioh
  16. #ifdef __cplusplus
  17. extern "C" {
  18. #endif
  19. #ifndef _ASMLANGUAGE
  20. #include "sioLib.h"
  21. /* device and channel structures */
  22. /* 
  23.  * The M68681_CHAN structure defines a serial I/O channel which
  24.  * describes the baudrate, interrupt mode, control 
  25.  * registers mode registers and the I/O port registers for a given channel. 
  26.  * Also the various SIO driver functions ( ioctl, txStarup, callbackInstall,
  27.  * pollInput, polloutput ) that this channel could utilize are declared 
  28.  * here.
  29. */
  30. typedef volatile UCHAR VCHAR; /* shorthand for volatile UCHAR */
  31. typedef struct m68681_chan /* M68681_CHAN */
  32.     {
  33.     /* always goes first */
  34.     SIO_CHAN sio; /* driver functions */
  35.     
  36.     struct m68681_duart *pDuart;/* pointer to the mc68681 DUART */
  37.     /* callbacks */
  38.     STATUS (*getTxChar)(); /* pointer to a xmitr function */
  39.     STATUS (*putRcvChar)();/* pointer to a recvr function */
  40.     void * getTxArg;
  41.     void * putRcvArg;
  42.     /* control and data register addresses for each channel */
  43.     VCHAR * mr; /* mode register address */
  44.     VCHAR * sr; /* status register address */
  45.     VCHAR * csr; /* clock select  register address */
  46.     VCHAR * cr; /* command register address */
  47.     VCHAR * rb; /* receiver buffer address */
  48.     VCHAR * tb; /* transmit buffer address */
  49.     UCHAR xmitEnb; /* bit for transmit enable */
  50.     UCHAR rcvrEnb; /* bit for transmit enable */
  51.     UCHAR rxBreak; /* bit for enabling break interrupt */
  52.     /* misc values */
  53.     UINT baudRate; /* current baud rate */
  54.     UINT options; /* current options, SIO_HW_OPTS_SET */
  55.     /* interrupt/polled mode configuration info */
  56.     UINT mode; /* SIO_MODE_[INT | POLL] */
  57.     UCHAR       intVec; /* interrupt vector address */
  58.     UCHAR       intType; /* type of vector to supply from M68681 */
  59.     UINT channel; /* channel number (0 or 1) */
  60.     } M68681_CHAN;
  61. /* This structure defines that the m68681 has two channels */
  62. typedef struct m68681_duart /* M68681_DUART */
  63.     {
  64.     M68681_CHAN  portA; /* port A device descriptor */
  65.     M68681_CHAN  portB; /* port B device descriptor */
  66.     /* The registers defined below are common to both channels */
  67.     VCHAR * ipcr; /* input port change register address */
  68.     VCHAR * acr; /* auxilliary control register address */
  69.     VCHAR * isr; /* interupt status register address */
  70.     VCHAR * imr; /* interupt mask register address */
  71.     VCHAR * ip; /* input port register address */
  72.     VCHAR * opcr; /* output port config register address */
  73.     VCHAR * sopbc; /* set output port register address */
  74.     VCHAR * ropbc; /* reset output port register address */
  75.     VCHAR * ctroff; /* Counter off */
  76.     VCHAR * ctron; /* counter on  */
  77.     VCHAR * ctlr; /* counter timer lower register  */
  78.     VCHAR * ctur; /* counter timer upper register  */
  79.     VCHAR * ivr; /* interupt vector register address */
  80.     UCHAR  imrCopy; /* stores interrupt mask register value  */
  81.     UINT baudFreq; /* baud clock frequency */
  82.     UCHAR acrCopy; /* copy of acr */
  83.     UCHAR opcrCopy; /* copy of opcr */
  84.     UCHAR oprCopy; /* copy of opr */
  85.     VOIDFUNCPTR tickRtn; /* Timer interrupt service routine */
  86.     void * tickArg; /* pointer to the system clock */
  87.     BOOL intEnable; /* allow interrupt mode flag */
  88.     } M68681_DUART;
  89. typedef struct m68681_clock /* M68681_CLK */
  90.     {
  91.     M68681_DUART * pDuart; /* pointer to the DUART */
  92.     VOIDFUNCPTR routine; /* user routine */
  93.     void * arg; /* arg for user routine */
  94.     BOOL running; /* current status */
  95.     UINT rate; /* interrupt rate, ticks per second */
  96.     UINT hertz; /* oscillator input rate, hertz */
  97.     UINT min; /* min rate */
  98.     UINT max; /* max rate */
  99.     UINT preload; /* counter/timer preload value */
  100.     } M68681_CLK;
  101. #if defined(__STDC__) || defined(__cplusplus)
  102. /* serial procedures */
  103. IMPORT void m68681DevInit (M68681_DUART *);
  104. IMPORT void m68681DevInit2 (M68681_DUART *);
  105. IMPORT void m68681Int (M68681_DUART *);
  106. IMPORT void m68681ImrSetClr (M68681_DUART *, UCHAR, UCHAR);
  107. IMPORT void m68681AcrSetClr (M68681_DUART *, UCHAR, UCHAR);
  108. IMPORT void m68681OprSetClr (M68681_DUART *, UCHAR, UCHAR);
  109. IMPORT void m68681OpcrSetClr(M68681_DUART *, UCHAR, UCHAR);
  110. IMPORT UCHAR m68681Imr (M68681_DUART *);
  111. IMPORT UCHAR m68681Acr (M68681_DUART *);
  112. IMPORT UCHAR m68681Opcr (M68681_DUART *);
  113. IMPORT UCHAR m68681Opr (M68681_DUART *);
  114. /* clock procedures */
  115. IMPORT STATUS m68681ClkInit (M68681_CLK *, M68681_DUART *);
  116. IMPORT void m68681ClkInt (M68681_CLK *);
  117. IMPORT STATUS m68681ClkConnect(M68681_CLK *, VOIDFUNCPTR, void *);
  118. IMPORT void m68681ClkEnable (M68681_CLK *);
  119. IMPORT void m68681ClkDisable(M68681_CLK *); 
  120. IMPORT int m68681ClkRateGet(M68681_CLK *);
  121. IMPORT STATUS m68681ClkRateSet(M68681_CLK *, int);
  122. IMPORT int m68681ClkReadOnFly(M68681_CLK *);
  123. #else   /* __STDC__ */
  124. IMPORT void m68681DevInit ();
  125. IMPORT void m68681DevInit2 ();
  126. IMPORT void m68681Int ();
  127. IMPORT void m68681ImrSetClr ();
  128. IMPORT void m68681AcrSetClr ();
  129. IMPORT STATUS m68681ClkInit ();
  130. IMPORT void m68681ClkInt ();
  131. IMPORT STATUS m68681ClkConnect();
  132. IMPORT void m68681ClkEnable ();
  133. IMPORT void m68681ClkDisable(); 
  134. IMPORT int m68681ClkRateGet();
  135. IMPORT STATUS m68681ClkRateSet();
  136. IMPORT int m68681ClkReadOnFly();
  137. #endif  /* __STDC__ */
  138. #endif /* _ASMLANGUAGE */
  139. /* channels */
  140. #define M68681_CHANNEL_A   0
  141. #define M68681_CHANNEL_B   1
  142. #define M68681_N_CHANS    2 /* number of serial channels on chip */
  143. #ifdef _ASMLANGUAGE
  144. #   define M681_ADRS(reg) (M68681_BASE + (reg * M68681_REG_OFFSET))
  145. #else
  146. #   define M681_ADRS(reg) ((VCHAR *)M68681_BASE+(reg*M68681_REG_OFFSET))
  147. #endif /* _ASMLANGUAGE */
  148. /* SIO -- m68681 serial channel chip -- register definitions */
  149. #define M68681_MRA M681_ADRS(0x00) /* R/W: mode reg. A */
  150. #define M68681_SRA M681_ADRS(0x01) /* R: status reg. A */
  151. #define M68681_CSRA M681_ADRS(0x01) /* W: clock select reg. A */
  152. #define M68681_CRA M681_ADRS(0x02) /* W: command reg. A */
  153. #define M68681_RHRA M681_ADRS(0x03) /* R: receive buffer A */
  154. #define M68681_THRA M681_ADRS(0x03) /* W: transmit buffer A */
  155. #define M68681_IPCR M681_ADRS(0x04) /* R: input port change reg. */
  156. #define M68681_ACR M681_ADRS(0x04) /* W: auxiliary control reg. */
  157. #define M68681_ISR M681_ADRS(0x05) /* R: int. status reg. */
  158. #define M68681_IMR M681_ADRS(0x05) /* W: int. mask reg. */
  159. #define M68681_CUR M681_ADRS(0x06) /* R: current MSB of counter */
  160. #define M68681_CTUR M681_ADRS(0x06) /* W: counter timer upper reg. */
  161. #define M68681_CLR M681_ADRS(0x07) /* W: current LSB of counter */
  162. #define M68681_CTLR M681_ADRS(0x07) /* W: counter timer lower reg. */
  163. #define M68681_MRB M681_ADRS(0x08) /* R/W: mode reg. B */
  164. #define M68681_SRB M681_ADRS(0x09) /* R: status reg. B */
  165. #define M68681_CSRB M681_ADRS(0x09) /* W: clock select reg. B */
  166. #define M68681_CRB M681_ADRS(0x0a) /* W: command reg. B */
  167. #define M68681_RHRB M681_ADRS(0x0b) /* R: receive buffer B */
  168. #define M68681_THRB M681_ADRS(0x0b) /* W: transmit buffer B */
  169. #define M68681_IVR M681_ADRS(0x0c) /* R/W: int. vector reg. */
  170. #define M68681_IP M681_ADRS(0x0d) /* R: input port (Unlatched) */
  171. #define M68681_OPCR M681_ADRS(0x0d) /* W: output port config. reg. */
  172. #define M68681_CTRON M681_ADRS(0x0e) /* R: counter on */
  173. #define M68681_SOPBC M681_ADRS(0x0e) /* W: set output port bits */
  174. #define M68681_CTROFF M681_ADRS(0x0f) /* R: counter off */
  175. #define M68681_ROPBC M681_ADRS(0x0f) /* W: reset output port bits */
  176. /* equates for mode reg. 1 for channel  A or B */
  177. #define M68681_MR1_RX_RTS          0x80 /* receiver RTS enabled */
  178. #define M68681_MR1_RX_INT          0x40 /* receiver intrupt enabled */
  179. #define M68681_MR1_ERR_MODE        0x20 /* block error mode */
  180. #define M68681_MR1_PAR_MODE_MULTI  0x18 /* multi_drop mode */
  181. #define M68681_MR1_NO_PARITY       0x10 /* no parity mode */
  182. #define M68681_MR1_ALWAYS_0        0x08 /* force parity mode */
  183. #define M68681_MR1_ALWAYS_1        0x0c /* force parity mode */
  184. #define M68681_MR1_EVEN_PARITY     0x00 /* parity mode */
  185. #define M68681_MR1_ODD_PARITY      0x04 /* 0 = even, 1 = odd */
  186. #define M68681_MR1_BITS_CHAR_8     0x03 /* 8 bits */
  187. #define M68681_MR1_BITS_CHAR_7     0x02 /* 7 bits */
  188. #define M68681_MR1_BITS_CHAR_6     0x01 /* 6 bits */
  189. #define M68681_MR1_BITS_CHAR_5     0x00 /* 5 bits */
  190. /* equates for mode reg. 2 for channel  A or B */
  191. #define M68681_MR2_NORMAL_MODE     0x00 /* normal channel mode */
  192. #define M68681_MR2_AUTO_MODE       0x40 /* automatic channel mode */
  193. #define M68681_MR2_LOOPBACK_LOCL   0x80 /* local loopback channel mode */
  194. #define M68681_MR2_LOOPBACK_REMT   0xc0 /* remote loopback channel mode */
  195. #define M68681_MR2_TX_RTS          0x20 /* transmitter RTS enabled */
  196. #define M68681_MR2_TX_CTS          0x10 /* transmitter CTS enabled */
  197. #define M68681_MR2_STOP_BITS_2     0x0f /* 2 stop bits */
  198. #define M68681_MR2_STOP_BITS_1     0x07 /* 1 stop bit */
  199. /* equates for command reg. A or B */
  200. #define M68681_CR_NO_COMMAND     0x00    /* no command */
  201. #define M68681_CR_RST_MR_PTR_CMD 0x10    /* reset mr pointer command */
  202. #define M68681_CR_RST_RX_CMD         0x20 /* reset receiver command */
  203. #define M68681_CR_RST_TX_CMD         0x30 /* reset transmitter command */
  204. #define M68681_CR_RST_ERR_STS_CMD 0x40 /* reset error status cmnd */
  205. #define M68681_CR_RST_BRK_INT_CMD 0x50    /* reset break int. command */
  206. #define M68681_CR_STR_BREAK_CMD         0x60 /* start break command */
  207. #define M68681_CR_STP_BREAK_CMD         0x70 /* stop break command */
  208. #define M68681_CR_RX_ENABLE      0x01 /* receiver enabled */
  209. #define M68681_CR_RX_DISABLE         0x02 /* receiver disabled */
  210. #define M68681_CR_TX_ENABLE         0x04 /* transmitter enabled */
  211. #define M68681_CR_TX_DISABLE         0x08 /* transmitter disabled */
  212. /* equates for clock select reg. A or B */
  213. #define M68681_CSR_RX_SEL      0xf0            /* receiver clock select */
  214. #define M68681_CSR_RX_38400    0xc0            /* 38400, set 1 */
  215. #define M68681_CSR_RX_19200    0xc0            /* 19200 */
  216. #define M68681_CSR_RX_9600     0xb0            /* 9600 */
  217. #define M68681_CSR_RX_1800     0xa0            /* 1800 */
  218. #define M68681_CSR_RX_4800     0x90            /* 4800 */
  219. #define M68681_CSR_RX_2400     0x80            /* 2400 */
  220. #define M68681_CSR_RX_2000     0x70            /* 2000 */
  221. #define M68681_CSR_RX_1200     0x60            /* 1200 */
  222. #define M68681_CSR_RX_600      0x50            /* 600 */
  223. #define M68681_CSR_RX_300      0x40            /* 300 */
  224. #define M68681_CSR_RX_150      0x30            /* 150 */
  225. #define M68681_CSR_RX_134_5    0x20            /* 134.5 */
  226. #define M68681_CSR_RX_110      0x10            /* 110 */
  227. #define M68681_CSR_RX_75       0x00            /* 75 */
  228. #define M68681_CSR_TX_SEL      0x0f            /* transmitter clock select */
  229. #define M68681_CSR_TX_38400    0x0c            /* 38400, set 1 */
  230. #define M68681_CSR_TX_19200    0x0c            /* 19200 */
  231. #define M68681_CSR_TX_9600     0x0b            /* 9600 */
  232. #define M68681_CSR_TX_1800     0x0a            /* 1800 */
  233. #define M68681_CSR_TX_4800     0x09            /* 4800 */
  234. #define M68681_CSR_TX_2400     0x08            /* 2400 */
  235. #define M68681_CSR_TX_2000     0x07            /* 2000 */
  236. #define M68681_CSR_TX_1200     0x06            /* 1200 */
  237. #define M68681_CSR_TX_600      0x05            /* 600 */
  238. #define M68681_CSR_TX_300      0x04            /* 300 */
  239. #define M68681_CSR_TX_150      0x03            /* 150 */
  240. #define M68681_CSR_TX_134_5    0x02            /* 134.5 */
  241. #define M68681_CSR_TX_110      0x01            /* 110 */
  242. #define M68681_CSR_TX_75       0x00            /* 75 */
  243. /* equates for status reg. A or B */
  244. #define M68681_SR_BREAK           0x80 /* received break */
  245. #define M68681_SR_FRAMING            0x40 /* framing error */
  246. #define M68681_SR_PARITY         0x20 /* parity error */
  247. #define M68681_SR_OVERRUN        0x10 /* overrun error */
  248. #define M68681_SR_TXEMT  0x08 /* transmitter empty */
  249. #define M68681_SR_TXRDY  0x04 /* transmitter ready*/
  250. #define M68681_SR_FFULL  0x02 /* fifo full */
  251. #define M68681_SR_RXRDY  0x01 /* receiver ready */
  252. /* equates for int. status reg. */
  253. #define M68681_ISR_INPUT_DELTA_INT 0x80 /* input port change*/
  254. #define M68681_ISR_BREAK_B_INT    0x40 /* delta break B */
  255. #define M68681_ISR_RX_RDY_B_INT         0x20 /* rcvr ready / fifo full B */
  256. #define M68681_ISR_TX_RDY_B_INT  0x10 /* transmitter ready B */
  257. #define M68681_ISR_CTR_RDY_INT   0x08 /* counter / timer ready */
  258. #define M68681_ISR_BREAK_A_INT   0x04 /* delta break A */
  259. #define M68681_ISR_RX_RDY_A_INT   0x02 /* receiver rdy /fifo full A */
  260. #define M68681_ISR_TX_RDY_A_INT  0x01 /* transmitter ready A */
  261. /* equates for int. mask reg. */
  262. #define M68681_IMR_CLEAR                0xff    /* Clear the imr */
  263. #define M68681_IMR_INPUT_DELTA   0x80 /* input port change*/
  264. #define M68681_IMR_BREAK_B 0x40 /* delta break B */
  265. #define M68681_IMR_RX_RDY_B             0x20 /* rcvr rdy / fifo full B */
  266. #define M68681_IMR_TX_RDY_B         0x10 /* transmitter ready B */
  267. #define M68681_IMR_CTR_RDY 0x08 /* counter / timer ready */
  268. #define M68681_IMR_BREAK_A 0x04 /* delta break A */
  269. #define M68681_IMR_RX_RDY_A      0x02 /* rcvr ready / fifo full A */
  270. #define M68681_IMR_TX_RDY_A            0x01 /* transmitter ready A */
  271. /* equates for auxiliary control reg. (timer and counter clock selects) */
  272. #define M68681_ACR_BRG_SELECT         0x80 /* baud rate gen select */
  273.                 /* 0 = set 1; 1 = set 2 */
  274.                 /* equates are set 2 ONLY */
  275. #define M68681_ACR_TMR_EXT_CLK_16 0x70    /* xtnl clock divided by 16 */
  276. #define M68681_ACR_TMR_EXT_CLK         0x60 /* external clock */
  277. #define M68681_ACR_TMR_IP2_16         0x50 /* ip2 divided by 16 */
  278. #define M68681_ACR_TMR_IP2 0x40 /* ip2 */
  279. #define M68681_ACR_CTR_EXT_CLK_16 0x30 /* xtnl clock divided by 16 */
  280. #define M68681_ACR_CTR_TXCB         0x20 /* channel B xmitr clock */
  281. #define M68681_ACR_CTR_TXCA       0x10 /* channel A xmitr clock */
  282. #define M68681_ACR_CTR_IP2 0x00 /* ip2 */
  283. #define M68681_ACR_DELTA_IP3_INT 0x08 /* delta ip3 int. */
  284. #define M68681_ACR_DELTA_IP2_INT 0x04 /* delta ip2 int. */
  285. #define M68681_ACR_DELTA_IP1_INT 0x02 /* delta ip1 int. */
  286. #define M68681_ACR_DELTA_IP0_INT 0x01 /* delta ip0 int. */
  287. /* equates for input port change reg. */
  288. #define M68681_IPCR_DELTA_IP3         0x80 /* 0 = no, 1 = yes */
  289. #define M68681_IPCR_DELTA_IP2         0x40 /* 0 = no, 1 = yes */
  290. #define M68681_IPCR_DELTA_IP1         0x20 /* 0 = no, 1 = yes */
  291. #define M68681_IPCR_DELTA_IP0         0x10 /* 0 = no, 1 = yes */
  292. #define M68681_IPCR_IP3          0x08 /* 0 = low, 1 = high */
  293. #define M68681_IPCR_IP2             0x04 /* 0 = low, 1 = high */
  294. #define M68681_IPCR_IP1     0x02 /* 0 = low, 1 = high */
  295. #define M68681_IPCR_IP0          0x01 /* 0 = low, 1 = high */
  296. /* equates for output port config. reg. */
  297. #define M68681_OPCR_OP7         0x80 /* 0 = OPR[7], 1 = TxRDYB */
  298. #define M68681_OPCR_OP6  0x40 /* 0 = OPR[6], 1 = TxRDYA */
  299. #define M68681_OPCR_OP5          0x20 /* 0 = OPR[5], 1 = RxRDYB */
  300. #define M68681_OPCR_OP4   0x10 /* 0 = OPR[4], 1 = RxRDYA */
  301. #define M68681_OPCR_OP3  0x00 /* 0 = OPR[3] */
  302. #define M68681_OPCR_RXCB_1X 0x0c /* RCXB_1X */
  303. #define M68681_OPCR_TXCB_1X 0x08 /* TXCB_1X */
  304. #define M68681_OPCR_C_T_OUTPUT   0x04 /* C_T_OUTPUT */
  305. #define M68681_OPCR_TXCA_16X     0x01 /* TXCA_16X */
  306. #define M68681_OPCR_TXCA_1X 0x02 /* TXCA_1X */
  307. #define M68681_OPCR_RXCA_1X 0x03 /* RXCA_1X */
  308. #define M68681_OPCR_OP2  0x00 /* 0 = OPR[2] */
  309. /* Output port bit assignments */
  310. #define M68681_RTS_A_LOW 0x01 /* 1= low, 0=hi */
  311. #define M68681_RTS_B_LOW 0x02 /* 1= low, 0=hi */
  312. /* Macros for default baud, parity, stop bits & data bits */
  313. #define M68681_DEFAULT_BAUD (9600)
  314. #define M68681_ERROR_STATUS (M68681_SR_BREAK|M68681_SR_FRAMING|M68681_SR_PARITY 
  315.                       |M68681_SR_OVERRUN) 
  316. #define M68681_CHAN_A_INT (M68681_ISR_BREAK_A_INT|M68681_ISR_RX_RDY_A_INT 
  317.                     |M68681_ISR_TX_RDY_A_INT)
  318. #ifdef __cplusplus
  319. }
  320. #endif
  321. #endif /* __INCm68681Sioh */