source: rtems/c/src/lib/libbsp/m68k/idp/include/motorola/mc68681.h @ 0c0c18a

Last change on this file since 0c0c18a was 0c0c18a, checked in by Joel Sherrill <joel.sherrill@…>, on Dec 23, 2015 at 4:11:07 PM

m68k/idp: Minor Doxygen Cleanup

  • Property mode set to 100644
File size: 13.2 KB
Line 
1/**
2 *  @file rtems/motorola/mc68681.h
3 *
4 *  @ingroup idp_mc68681
5 *
6 *  @brief Low level support code for the Motorola mc68681 DUART.
7 */
8
9/*
10 *
11 *  Originally written by rob@cygnus.com (Rob Savoye) for the libgloss
12 *  IDP support.
13 */
14
15/**
16 *  @defgroup idp_mc68681 Motorola MC68681
17 *
18 *  @ingroup m68k_idp
19 *
20 *  @brief Support code for Motorola MC68681 DUART
21 */
22
23#ifndef _RTEMS_MOTOROLA_MC68681_H
24#define _RTEMS_MOTOROLA_MC68681_H
25
26/*
27 *  In the dark ages when this controller was designed, it was actually
28 *  possible to access data on unaligned byte boundaries with no penalty.
29 *  Now we find this chip in configurations in which the registers are
30 *  at 16-bit, 32-bit, and 64-bit boundaries at the whim of the board
31 *  designer.  If the registers are not at byte addresses, then
32 *  set this multiplier before including this file to correct the offsets.
33 */
34
35#ifndef MC68681_OFFSET_MULTIPLIER
36#define MC68681_OFFSET_MULTIPLIER 1
37#endif
38
39#define __MC68681_REG(_R) ((_R) * MC68681_OFFSET_MULTIPLIER)
40
41/*
42 *  mc68681 register offsets Read/Write Addresses
43 */
44#define MC68681_MODE_REG_1A  __MC68681_REG(0)  /* MR1A-MR Prior to Read */
45#define MC68681_MODE_REG_2A  __MC68681_REG(0)  /* MR2A-MR After Read    */
46
47#define MC68681_COUNT_MODE_CURRENT_MSB       __MC68681_REG(6)  /* CTU   */
48#define MC68681_COUNTER_TIMER_UPPER_REG      __MC68681_REG(6)  /* CTU   */
49#define MC68681_COUNT_MODE_CURRENT_LSB       __MC68681_REG(7)  /* CTL   */
50#define MC68681_COUNTER_TIMER_LOWER_REG      __MC68681_REG(7)  /* CTL   */
51#define MC68681_INTERRUPT_VECTOR_REG         __MC68681_REG(12) /* IVR   */
52
53#define MC68681_MODE_REG_1B  __MC68681_REG(8)  /* MR1B-MR Prior to Read */
54#define MC68681_MODE_REG_2B  __MC68681_REG(8)  /* MR2BA-MR After Read   */
55
56/*
57 * mc68681 register offsets Read Only  Addresses
58 */
59#define MC68681_STATUS_REG_A                __MC68681_REG(1)   /* SRA   */
60#define MC68681_MASK_ISR_REG                __MC68681_REG(2)   /* MISR  */
61#define MC68681_RECEIVE_BUFFER_A            __MC68681_REG(3)   /* RHRA  */
62#define MC68681_INPUT_PORT_CHANGE_REG       __MC68681_REG(4)   /* IPCR  */
63#define MC68681_INTERRUPT_STATUS_REG        __MC68681_REG(5)   /* ISR   */
64#define MC68681_STATUS_REG_B                __MC68681_REG(9)   /* SRB   */
65#define MC68681_RECEIVE_BUFFER_B            __MC68681_REG(11)  /* RHRB  */
66#define MC68681_INPUT_PORT                  __MC68681_REG(13)  /* IP    */
67#define MC68681_START_COUNT_CMD             __MC68681_REG(14)  /* SCC   */
68#define MC68681_STOP_COUNT_CMD              __MC68681_REG(15)  /* STC   */
69
70/*
71 * mc68681 register offsets Write Only  Addresses
72 */
73#define MC68681_CLOCK_SELECT_REG_A          __MC68681_REG(1)   /* CSRA  */
74#define MC68681_COMMAND_REG_A               __MC68681_REG(2)   /* CRA   */
75#define MC68681_TRANSMIT_BUFFER_A           __MC68681_REG(3)   /* THRA  */
76#define MC68681_AUX_CTRL_REG                __MC68681_REG(4)   /* ACR   */
77#define MC68681_INTERRUPT_MASK_REG          __MC68681_REG(5)   /* IMR   */
78#define MC68681_CLOCK_SELECT_REG_B          __MC68681_REG(9)   /* CSRB  */
79#define MC68681_COMMAND_REG_B               __MC68681_REG(10)  /* CRB   */
80#define MC68681_TRANSMIT_BUFFER_B           __MC68681_REG(11)  /* THRB  */
81#define MC68681_OUTPUT_PORT_CONFIG_REG      __MC68681_REG(13)  /* OPCR  */
82#define MC68681_OUTPUT_PORT_SET_REG         __MC68681_REG(14)  /* SOPBC */
83#define MC68681_OUTPUT_PORT_RESET_BITS      __MC68681_REG(15)  /* COPBC */
84
85
86#ifndef MC6681_VOL
87#define MC6681_VOL( ptr )   ((volatile unsigned char *)(ptr))
88#endif
89
90#define MC68681_WRITE( _base, _reg, _data ) \
91   *((volatile unsigned char *)_base+_reg) = (_data)
92
93#define MC68681_READ( _base, _reg ) \
94   *(((volatile unsigned char *)_base+_reg))
95
96
97
98#define  MC68681_CLEAR                                     0x00
99
100#define MC68681_PORT_A                                     0
101#define MC68681_PORT_B                                     1
102
103/*
104 *  DUART Command Register Definitions:
105 *
106 *  MC68681_COMMAND_REG_A,MC68681_COMMAND_REG_B
107 */
108#define MC68681_MODE_REG_ENABLE_RX                          0x01
109#define MC68681_MODE_REG_DISABLE_RX                         0x02
110#define MC68681_MODE_REG_ENABLE_TX                          0x04
111#define MC68681_MODE_REG_DISABLE_TX                         0x08
112#define MC68681_MODE_REG_RESET_MR_PTR                       0x10
113#define MC68681_MODE_REG_RESET_RX                           0x20
114#define MC68681_MODE_REG_RESET_TX                           0x30
115#define MC68681_MODE_REG_RESET_ERROR                        0x40
116#define MC68681_MODE_REG_RESET_BREAK                        0x50
117#define MC68681_MODE_REG_START_BREAK                        0x60
118#define MC68681_MODE_REG_STOP_BREAK                         0x70
119#define MC68681_MODE_REG_SET_RX_BRG                         0x80
120#define MC68681_MODE_REG_CLEAR_RX_BRG                       0x90
121#define MC68681_MODE_REG_SET_TX_BRG                         0xa0
122#define MC68681_MODE_REG_CLEAR_TX_BRG                       0xb0
123#define MC68681_MODE_REG_SET_STANDBY                        0xc0
124#define MC68681_MODE_REG_SET_ACTIVE                         0xd0
125
126/*
127 * Mode Register Definitions
128 *
129 *  MC68681_MODE_REG_1A
130 *  MC68681_MODE_REG_1B
131 */
132#define MC68681_5BIT_CHARS                                  0x00
133#define MC68681_6BIT_CHARS                                  0x01
134#define MC68681_7BIT_CHARS                                  0x02
135#define MC68681_8BIT_CHARS                                  0x03
136
137#define MC68681_ODD_PARITY                                  0x00
138#define MC68681_EVEN_PARITY                                 0x04
139
140#define MC68681_WITH_PARITY                                 0x00
141#define MC68681_FORCE_PARITY                                0x08
142#define MC68681_NO_PARITY                                   0x10
143#define MC68681_MULTI_DROP                                  0x18
144
145#define MC68681_ERR_MODE_CHAR                               0x00
146#define MC68681_ERR_MODE_BLOCK                              0x20
147
148#define MC68681_RX_INTR_RX_READY                            0x00
149#define MC68681_RX_INTR_FFULL                               0x40
150
151#define MC68681_NO_RX_RTS_CTL                               0x00
152#define MC68681_RX_RTS_CTRL                                 0x80
153
154
155/*
156 * Mode Register Definitions
157 *
158 *  MC68681_MODE_REG_2A
159 *  MC68681_MODE_REG_2B
160 */
161#define MC68681_STOP_BIT_LENGTH__563                        0x00
162#define MC68681_STOP_BIT_LENGTH__625                        0x01
163#define MC68681_STOP_BIT_LENGTH__688                        0x02
164#define MC68681_STOP_BIT_LENGTH__75                         0x03
165#define MC68681_STOP_BIT_LENGTH__813                        0x04
166#define MC68681_STOP_BIT_LENGTH__875                        0x05
167#define MC68681_STOP_BIT_LENGTH__938                        0x06
168#define MC68681_STOP_BIT_LENGTH_1                           0x07
169#define MC68681_STOP_BIT_LENGTH_1_563                       0x08
170#define MC68681_STOP_BIT_LENGTH_1_625                       0x09
171#define MC68681_STOP_BIT_LENGTH_1_688                       0x0a
172#define MC68681_STOP_BIT_LENGTH_1_75                        0x0b
173#define MC68681_STOP_BIT_LENGTH_1_813                       0x0c
174#define MC68681_STOP_BIT_LENGTH_1_875                       0x0d
175#define MC68681_STOP_BIT_LENGTH_1_938                       0x0e
176#define MC68681_STOP_BIT_LENGTH_2                           0x0f
177
178#define MC68681_CTS_ENABLE_TX                               0x10
179#define MC68681_TX_RTS_CTRL                                 0x20
180
181#define MC68681_CHANNEL_MODE_NORMAL                         0x00
182#define MC68681_CHANNEL_MODE_ECHO                           0x40
183#define MC68681_CHANNEL_MODE_LOCAL_LOOP                     0x80
184#define MC68681_CHANNEL_MODE_REMOTE_LOOP                    0xc0
185
186/*
187 * Status Register Definitions
188 *
189 *    MC68681_STATUS_REG_A,  MC68681_STATUS_REG_B
190 */
191#define MC68681_RX_READY                                    0x01
192#define MC68681_FFULL                                       0x02
193#define MC68681_TX_READY                                    0x04
194#define MC68681_TX_EMPTY                                    0x08
195#define MC68681_OVERRUN_ERROR                               0x10
196#define MC68681_PARITY_ERROR                                0x20
197#define MC68681_FRAMING_ERROR                               0x40
198#define MC68681_RECEIVED_BREAK                              0x80
199
200
201/*
202 * Interupt Status Register Definitions.
203 *
204 * MC68681_INTERRUPT_STATUS_REG
205 */
206
207
208/*
209 *  Interupt Mask Register Definitions
210 *
211 *  MC68681_INTERRUPT_MASK_REG
212 */
213#define MC68681_IR_TX_READY_A                               0x01
214#define MC68681_IR_RX_READY_A                               0x02
215#define MC68681_IR_BREAK_A                                  0x04
216#define MC68681_IR_COUNTER_READY                            0x08
217#define MC68681_IR_TX_READY_B                               0x10
218#define MC68681_IR_RX_READY_B                               0x20
219#define MC68681_IR_BREAK_B                                  0x40
220#define MC68681_IR_INPUT_PORT_CHANGE                        0x80
221
222/*
223 * Status Register Definitions.
224 *
225 * MC68681_STATUS_REG_A,MC68681_STATUS_REG_B
226 */
227#define MC68681_STATUS_RXRDY                                0x01
228#define MC68681_STATUS_FFULL                                0x02
229#define MC68681_STATUS_TXRDY                                0x04
230#define MC68681_STATUS_TXEMT                                0x08
231#define MC68681_STATUS_OVERRUN_ERROR                        0x10
232#define MC68681_STATUS_PARITY_ERROR                         0x20
233#define MC68681_STATUS_FRAMING_ERROR                        0x40
234#define MC68681_STATUS_RECEIVED_BREAK                       0x80
235
236/*
237 * Definitions for the Interrupt Vector Register:
238 *
239 * MC68681_INTERRUPT_VECTOR_REG
240 */
241#define  MC68681_INTERRUPT_VECTOR_INIT                      0x0f
242
243/*
244 * Definitions for the Auxiliary Control Register
245 *
246 * MC68681_AUX_CTRL_REG
247 */
248#define MC68681_AUX_BRG_SET1                                0x00
249#define MC68681_AUX_BRG_SET2                                0x80
250
251
252/*
253 * The following Baud rates assume the X1 clock pin is driven with a
254 * 3.6864 MHz signal.  If a different frequency is used the DUART channel
255 * is running at the follwoing baud rate:
256 *       ((Table Baud Rate)*frequency)/3.6864 MHz
257 */
258
259/*
260 * Definitions for the Clock Select Register:
261 *
262 * MC68681_CLOCK_SELECT_REG_A,MC68681_CLOCK_SELECT_REG_A
263 *
264 * Note:  ACR[7] is the MSB of the Auxiliary Control register
265 *        X is the extend bit.
266 *        CRA - 0x08  Set Rx BRG Select Extend Bit   (X=1)
267 *        CRA - 0x09  Clear Rx BRG Select Extend Bit (X=0)
268 *        CRB - 0x0a  Set Tx BRG Select Extend Bit   (X=1)
269 *        CRB - 0x0b  Clear Tx BRG Select Extend Bit (x=1)
270 */
271#define MC68681_BAUD_RATE_MASK_50           0x00   /* ACR[7]=0,X=0 */
272                                                   /* ARC[7]=1,X=1 */
273#define MC68681_BAUD_RATE_MASK_75           0x00   /* ACR[7]=0,X=0 */
274                                                   /* ARC[7]=1,X=1 */
275#define MC68681_BAUD_RATE_MASK_110          0x01
276#define MC68681_BAUD_RATE_MASK_134_5        0x02
277#define MC68681_BAUD_RATE_MASK_150          0x03   /* ACR[7]=0,X=0 */
278                                                   /* ARC[7]=1,X=1 */
279#define MC68681_BAUD_RATE_MASK_200          0x03   /* ACR[7]=0,X=0 */
280                                                   /* ARC[7]=1,X=1 */
281#define MC68681_BAUD_RATE_MASK_300          0x04   /* ACR[7]=0,X=0 */
282                                                   /* ARC[7]=1,X=1 */
283#define MC68681_BAUD_RATE_MASK_600          0x05   /* ACR[7]=0,X=0 */
284                                                   /* ARC[7]=1,X=1 */
285#define MC68681_BAUD_RATE_MASK_1050         0x07   /* ACR[7]=0,X=0 */
286                                                   /* ARC[7]=1,X=1 */
287#define MC68681_BAUD_RATE_MASK_1200         0x06   /* ACR[7]=0,X=0 */
288                                                   /* ARC[7]=1,X=1 */
289#define MC68681_BAUD_RATE_MASK_1800         0x0a   /* ACR[7]=0,X=0 */
290                                                   /* ARC[7]=1,X=1 */
291#define MC68681_BAUD_RATE_MASK_2400         0x08   /* ACR[7]=0,X=0 */
292                                                   /* ARC[7]=1,X=1 */
293#define MC68681_BAUD_RATE_MASK_3600         0x04   /* ACR[7]=0,X=0 */
294                                                   /* ARC[7]=1,X=1 */
295#define MC68681_BAUD_RATE_MASK_4800         0x09
296#define MC68681_BAUD_RATE_MASK_7200         0x0a   /* ACR[7]=0,X=0 */
297                                                   /* ARC[7]=1,X=1 */
298#define MC68681_BAUD_RATE_MASK_9600         0xbb
299
300#define MC68681_BAUD_RATE_MASK_14_4K        0x05   /* ACR[7]=0,X=0 */
301                                                   /* ARC[7]=1,X=1 */
302#define MC68681_BAUD_RATE_MASK_19_2K        0xcc   /* ACR[7]=1,X=0 */
303                                                   /* ARC[7]=0,X=1 */
304#define MC68681_BAUD_RATE_MASK_28_8K        0x06   /* ACR[7]=0,X=0 */
305                                                   /* ARC[7]=1,X=1 */
306#define MC68681_BAUD_RATE_MASK_38_4K        0xcc   /* ACR[7]=0,X=0 */
307                                                   /* ARC[7]=1,X=1 */
308#define MC68681_BAUD_RATE_MASK_57_6K        0x07   /* ACR[7]=0,X=0 */
309                                                   /* ARC[7]=1,X=1 */
310#define MC68681_BAUD_RATE_MASK_115_5K       0x08
311#define MC68681_BAUD_RATE_MASK_TIMER        0xdd
312#define MC68681_BAUD_RATE_MASK_TIMER_16X    0xee
313#define MC68681_BAUD_RATE_MASK_TIMER_1X     0xff
314
315#endif
Note: See TracBrowser for help on using the repository browser.