summaryrefslogtreecommitdiff
path: root/sys/dev/ic/mc68681reg.h
blob: 2b29ede74070e84ba1777e4a0d1ca759c966e529 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
/*	$OpenBSD: mc68681reg.h,v 1.1 2013/06/11 21:03:39 miod Exp $	*/

/*
 * Copyright (c) 2013 Miodrag Vallat.
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

/*
 * MC68HC681 Dual Asynchronous Receiver/Transmitter registers
 */

/*
 * Register Addresses
 */

#define	DART_MRA	0x00	/* Mode Register A (rw) */
#define	DART_SRA	0x01	/* Status Register A (r) */
#define	DART_CSRA	0x01	/* Clock-Select Register A (w) */
#define	DART_CRA	0x02	/* Command Register A (w) */
#define	DART_RBA	0x03	/* Receiver Buffer A (r) */
#define	DART_TBA	0x03	/* Transmitter Buffer A (w) */
#define	DART_IPCR	0x04	/* Input Port Change Register (r) */
#define	DART_ACR	0x04	/* Auxiliary Control Register (w) */
#define	DART_ISR	0x05	/* Interrupt Status Register (r) */
#define	DART_IMR	0x05	/* Interrupt Mask Register (w) */
#define	DART_CUR	0x06	/* Counter Mode Current MSB (r) */
#define	DART_CTUR	0x06	/* Counter/Timer Upper Register (w) */
#define	DART_CLR	0x07	/* Counter Mode Current LSB (r) */
#define	DART_CTLR	0x07	/* Counter/Timer Lower Register (w) */
#define	DART_MRB	0x08	/* Mode Register B (rw) */
#define	DART_SRB	0x09	/* Status Register B (r) */
#define	DART_CSRB	0x09	/* Clock-Select Register B (w) */
#define	DART_CRB	0x0a	/* Command Register B (w) */
#define	DART_RBB	0x0b	/* Receiver Buffer B (r) */
#define	DART_TBB	0x0b	/* Transmitter Buffer B (w) */
#define	DART_IVR	0x0c	/* Interrupt-Vector Register (rw) */
#define	DART_IP		0x0d	/* Input Port (r) */
#define	DART_OPCR	0x0d	/* Output Port Configuration Register (w) */
#define	DART_CTSTART	0x0e	/* Start-Counter Command (r) */
#define	DART_OPRS	0x0e	/* Output Port Bit Set Command (w) */
#define	DART_CTSTOP	0x0f	/* Stop-Counter Command (r) */
#define	DART_OPRR	0x0f	/* Output Port Bit Reset Command (w) */

#define	DART_SIZE	0x10

/*
 * Mode Register 1
 */

#define	DART_MR1_RX_RTR			0x80	/* OP0 set on RX RTR */
#define	DART_MR1_RX_IRQ_FFULL		0x40	/* RX interrupt on FIFO full */
#define	DART_MR1_RX_IRQ_RXRDY		0x00	/* RX interrupt on RxRDY */
#define	DART_MR1_ERROR_BLOCK		0x20	/* whole RX FIFO status */
#define	DART_MR1_ERROR_CHAR		0x00
#define	DART_MR1_PARITY_MASK		0x1c
#define	DART_MR1_PARITY_MULTI		0x18	/* multidrop mode */
#define	DART_MR1_PARITY_NONE		0x10	/* no parity */
#define	DART_MR1_PARITY_FORCED		0x08
#define	DART_MR1_PARITY_ENABLE		0x00
#define	DART_MR1_MULTIDROP_ADDRESS	0x04
#define	DART_MR1_MULTIDROP_DATA		0x00
#define	DART_MR1_PARITY_FORCED_HIGH	0x04
#define	DART_MR1_PARITY_FORCED_LOW	0x00
#define	DART_MR1_PARITY_ENABLE_ODD	0x04
#define	DART_MR1_PARITY_ENABLE_EVEN	0x00
#define	DART_MR1_BPC_MASK		0x03
#define	DART_MR1_BPC_8			0x03
#define	DART_MR1_BPC_7			0x02
#define	DART_MR1_BPC_6			0x01
#define	DART_MR1_BPC_5			0x00

/*
 * Mode Register 2
 */

#define	DART_MR2_MODE_MASK		0xc0
#define	DART_MR2_MODE_REMOTE_LOOPBACK	0xc0
#define	DART_MR2_MODE_LOCAL_LOOPBACK	0x80
#define	DART_MR2_MODE_ECHO		0x40
#define	DART_MR2_MODE_NORMAL		0x00
#define	DART_MR2_TX_RTS			0x20	/* OP0 reset on TX RTS */
#define	DART_MR2_TX_CTS			0x10	/* IP0 controls TX CTS */
#if 0 /* 68681 datasheet values */
#define	DART_MR2_STOP_MASK		0x0c
#define	DART_MR2_STOP_2			0x0c
#define	DART_MR2_STOP_15		0x08	/* 1.5 if async, 2 if sync */
#define	DART_MR2_STOP_1			0x04
#else /* 68692 datasheet values */
#define	DART_MR2_STOP_MASK		0x0f
#define	DART_MR2_STOP_2			0x0f
#define	DART_MR2_STOP_15		0x08	/* 1.5 if async, 2 if sync */
#define	DART_MR2_STOP_1			0x07
#define	DART_MR2_STOP_15_CL5		0x07
#define	DART_MR2_STOP_1_CL5		0x00
#endif

/*
 * Clock-Select Register
 */

#define	DART_CSR_RXCLOCK_MASK		0xf0
#define	DART_CSR_RXCLOCK_SHIFT		4
#define	DART_CSR_TXCLOCK_MASK		0x0f
#define	DART_CSR_TXCLOCK_SHIFT		0

#define	DART_CSR_50		0x00	/* set 1 */
#define	DART_CSR_75		0x00	/* set 2 */
#define	DART_CSR_110		0x01
#define	DART_CSR_134		0x02
#define	DART_CSR_150		0x03	/* set 2 */
#define	DART_CSR_200		0x03	/* set 1 */
#define	DART_CSR_300		0x04
#define	DART_CSR_600		0x05
#define	DART_CSR_1050		0x07	/* set 1 */
#define	DART_CSR_1200		0x06
#define	DART_CSR_1800		0x0a	/* set 2 */
#define	DART_CSR_2000		0x07	/* set 2 */
#define	DART_CSR_2400		0x08
#define	DART_CSR_4800		0x09
#define	DART_CSR_7200		0x0a	/* set 1 */
#define	DART_CSR_9600		0x0b
#define	DART_CSR_19200		0x0c	/* set 2 */
#define	DART_CSR_38400		0x0c	/* set 1 */
#define	DART_CSR_TIMER		0x0d
#define	DART_CSR_IP_16X		0x0e
#define	DART_CSR_IP_1X		0x0f

/* Input Port numbers for DART_CSR_IP_ settings */
#define	DART_IP_TXA	3
#define	DART_IP_RXA	4
#define	DART_IP_TXB	5
#define	DART_IP_RXB	2

/*
 * Command Register
 */

#define	DART_CR_STOP_BREAK		0x70
#define	DART_CR_START_BREAK		0x60
#define	DART_CR_RESET_BREAK		0x50
#define	DART_CR_RESET_ERROR		0x40
#define	DART_CR_RESET_TX		0x30
#define	DART_CR_RESET_RX		0x20
#define	DART_CR_RESET_MR1		0x10

#define	DART_CR_TX_DISABLE		0x08
#define	DART_CR_TX_ENABLE		0x04

#define	DART_CR_RX_DISABLE		0x02
#define	DART_CR_RX_ENABLE		0x01

/*
 * Status Register
 */

#define	DART_SR_BREAK			0x80	/* break received */
#define	DART_SR_FRAME			0x40	/* frame error */
#define	DART_SR_PARITY			0x20	/* parity error */
#define	DART_SR_OVERRUN			0x10
#define	DART_SR_TX_EMPTY		0x08
#define	DART_SR_TX_READY		0x04
#define	DART_SR_RX_FULL			0x02	/* RX FIFO full */
#define	DART_SR_RX_READY		0x01

/*
 * Output Port Configuration Register
 */

#define	DART_OPCR_TX_READY_B		0x80
#define	DART_OPCR_OP7			0x00
#define	DART_OPCR_TX_READY_A		0x40
#define	DART_OPCR_OP6			0x00
#define	DART_OPCR_RX_B			0x20
#define	DART_OPCR_OP5			0x00
#define	DART_OPCR_RX_A			0x10
#define	DART_OPCR_OP4			0x00

#define	DART_OPCR_RXCB			0x0c
#define	DART_OPCR_TXCB			0x08
#define	DART_OPCR_CT_OUTPUT		0x04
#define	DART_OPCR_OP3			0x00

#define	DART_OPCR_RXCA			0x03
#define	DART_OPCR_TXCA			0x02
#define	DART_OPCR_TXCA_X16		0x01
#define	DART_OPCR_OP2			0x00

/*
 * Auxiliary Control Register
 */

#define	DART_ACR_BRG_SET_MASK		0x80
#define	DART_ACR_BRG_SET_2		0x80
#define	DART_ACR_BRG_SET_1		0x00

#define	DART_ACR_CT_MASK		0x70
#define	DART_ACR_CT_TIMER_BIT		0x40
#define	DART_ACR_CT_TIMER_CLK_16	0x70	/* clock / 16 */
#define	DART_ACR_CT_TIMER_CLK		0x60	/* clock / 1 */
#define	DART_ACR_CT_TIMER_IP2_16	0x50	/* IP2 / 16 */
#define	DART_ACR_CT_TIMER_IP2		0x40	/* IP2 / 1 */
#define	DART_ACR_CT_COUNTER_CLK_16	0x30	/* clock / 16 */
#define	DART_ACR_CT_COUNTER_TXCB	0x20
#define	DART_ACR_CT_COUNTER_TXCA	0x10
#define	DART_ACR_CT_COUNTER_IP2		0x00	/* IP2 / 1 */

#define	DART_ACR_ISR_IP3_CHANGE_ENABLE	0x08
#define	DART_ACR_ISR_IP2_CHANGE_ENABLE	0x04
#define	DART_ACR_ISR_IP1_CHANGE_ENABLE	0x02
#define	DART_ACR_ISR_IP0_CHANGE_ENABLE	0x01

/*
 * Input Port Change Register
 */

#define	DART_IPCR_IP3_CHANGED		0x80
#define	DART_IPCR_IP2_CHANGED		0x40
#define	DART_IPCR_IP1_CHANGED		0x20
#define	DART_IPCR_IP0_CHANGED		0x10
#define	DART_IPCR_IP3_LEVEL		0x08
#define	DART_IPCR_IP2_LEVEL		0x04
#define	DART_IPCR_IP1_LEVEL		0x02
#define	DART_IPCR_IP0_LEVEL		0x01

/*
 * Interrupt Status Register / Interrupt Mask Register
 */

#define	DART_ISR_IP_CHANGE		0x80
#define	DART_ISR_DELTA_BREAK_B		0x40
#define	DART_ISR_RXB			0x20
#define	DART_ISR_TXB			0x10
#define	DART_ISR_CT			0x08
#define	DART_ISR_DELTA_BREAK_A		0x04
#define	DART_ISR_RXA			0x02
#define	DART_ISR_TXA			0x01

/*
 * Input Port
 */

#define	DART_IP_IACK			0x40	/* read only */
#define	DART_IP_IP5			0x20
#define	DART_IP_IP4			0x10	/* external BRG clock */
#define	DART_IP_IP3			0x08
#define	DART_IP_IP2			0x04
#define	DART_IP_IP1			0x02
#define	DART_IP_IP0			0x01

/*
 * Output Port
 */

#define	DART_OP_OP7			0x80
#define	DART_OP_OP6			0x40
#define	DART_OP_OP5			0x20
#define	DART_OP_OP4			0x10
#define	DART_OP_OP3			0x08
#define	DART_OP_OP2			0x04
#define	DART_OP_OP1			0x02
#define	DART_OP_OP0			0x01