summaryrefslogtreecommitdiff
path: root/nuttx/arch/avr/src/at91uc3/at91uc3_usart.h
blob: f06eb0b3a1eb4da5f02854434b80c04c57cf474d (plain) (blame)
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
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
/************************************************************************************
 * arch/avr/src/at91uc3/at91uc3_usart.h
 *
 *   Copyright (C) 2010 Gregory Nutt. All rights reserved.
 *   Author: Gregory Nutt <spudmonkey@racsa.co.cr>
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name NuttX nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 ************************************************************************************/

#ifndef __ARCH_AVR_SRC_AT91UC3_AT91UC3_USART_H
#define __ARCH_AVR_SRC_AT91UC3_AT91UC3_USART_H

/************************************************************************************
 * Included Files
 ************************************************************************************/

#include <nuttx/config.h>

/************************************************************************************
 * Pre-processor Definitions
 ************************************************************************************/

/* Register offsets *****************************************************************/

#define AVR32_USART_CR_OFFSET      0x0000 /* Control Register */
#define AVR32_USART_MR_OFFSET      0x0004 /* Mode Register */
#define AVR32_USART_IER_OFFSET     0x0008 /* Interrupt Enable Register */
#define AVR32_USART_IDR_OFFSET     0x000c /* Interrupt Disable Register */
#define AVR32_USART_IMR_OFFSET     0x0010 /* Interrupt Mask Register */
#define AVR32_USART_CSR_OFFSET     0x0014 /* Channel Status Register */
#define AVR32_USART_RHR_OFFSET     0x0018 /* Receiver Holding Register */
#define AVR32_USART_THR_OFFSET     0x001c /* Transmitter Holding Register */
#define AVR32_USART_BRGR_OFFSET    0x0020 /* Baud Rate Generator Register */
#define AVR32_USART_RTOR_OFFSET    0x0024 /* Receiver Time-out Register */
#define AVR32_USART_TTGR_OFFSET    0x0028 /* Transmitter Timeguard Register */
#define AVR32_USART_FIDI_OFFSET    0x0040 /* FI DI Ratio Register */
#define AVR32_USART_NER_OFFSET     0x0044 /* Number of Errors Register */
#define AVR32_USART_IFR_OFFSET     0x004c /* IrDA Filter Register */
#define AVR32_USART_MAN_OFFSET     0x0050 /* Manchester Encoder Decoder Register */
#define AVR32_USART_VERSION_OFFSET 0x00fc /* Version Register */

/* Register Addresses ***************************************************************/

#define AVR32_USART0_CR            (AVR32_USART0_BASE+AVR32_USART_CR_OFFSET)
#define AVR32_USART0_MR            (AVR32_USART0_BASE+AVR32_USART_MR_OFFSET)
#define AVR32_USART0_IER           (AVR32_USART0_BASE+AVR32_USART_IER_OFFSET)
#define AVR32_USART0_IDR           (AVR32_USART0_BASE+AVR32_USART_IDR_OFFSET)
#define AVR32_USART0_IMR           (AVR32_USART0_BASE+AVR32_USART_IMR_OFFSET)
#define AVR32_USART0_CSR           (AVR32_USART0_BASE+AVR32_USART_CSR_OFFSET)
#define AVR32_USART0_RHR           (AVR32_USART0_BASE+AVR32_USART_RHR_OFFSET)
#define AVR32_USART0_THR           (AVR32_USART0_BASE+AVR32_USART_THR_OFFSET)
#define AVR32_USART0_BRGR          (AVR32_USART0_BASE+AVR32_USART_BRGR_OFFSET)
#define AVR32_USART0_RTOR          (AVR32_USART0_BASE+AVR32_USART_RTOR_OFFSET)
#define AVR32_USART0_TTGR          (AVR32_USART0_BASE+AVR32_USART_TTGR_OFFSET)
#define AVR32_USART0_FIDI          (AVR32_USART0_BASE+AVR32_USART_FIDI_OFFSET)
#define AVR32_USART0_NER           (AVR32_USART0_BASE+AVR32_USART_NER_OFFSET)
#define AVR32_USART0_IFR           (AVR32_USART0_BASE+AVR32_USART_IFR_OFFSET)
#define AVR32_USART0_MAN           (AVR32_USART0_BASE+AVR32_USART_MAN_OFFSET)
#define AVR32_USART0_VERSION       (AVR32_USART0_BASE+AVR32_USART_VERSION_OFFSET)

#define AVR32_USART1_CR            (AVR32_USART1_BASE+AVR32_USART_CR_OFFSET)
#define AVR32_USART1_MR            (AVR32_USART1_BASE+AVR32_USART_MR_OFFSET)
#define AVR32_USART1_IER           (AVR32_USART1_BASE+AVR32_USART_IER_OFFSET)
#define AVR32_USART1_IDR           (AVR32_USART1_BASE+AVR32_USART_IDR_OFFSET)
#define AVR32_USART1_IMR           (AVR32_USART1_BASE+AVR32_USART_IMR_OFFSET)
#define AVR32_USART1_CSR           (AVR32_USART1_BASE+AVR32_USART_CSR_OFFSET)
#define AVR32_USART1_RHR           (AVR32_USART1_BASE+AVR32_USART_RHR_OFFSET)
#define AVR32_USART1_THR           (AVR32_USART1_BASE+AVR32_USART_THR_OFFSET)
#define AVR32_USART1_BRGR          (AVR32_USART1_BASE+AVR32_USART_BRGR_OFFSET)
#define AVR32_USART1_RTOR          (AVR32_USART1_BASE+AVR32_USART_RTOR_OFFSET)
#define AVR32_USART1_TTGR          (AVR32_USART1_BASE+AVR32_USART_TTGR_OFFSET)
#define AVR32_USART1_FIDI          (AVR32_USART1_BASE+AVR32_USART_FIDI_OFFSET)
#define AVR32_USART1_NER           (AVR32_USART1_BASE+AVR32_USART_NER_OFFSET)
#define AVR32_USART1_IFR           (AVR32_USART1_BASE+AVR32_USART_IFR_OFFSET)
#define AVR32_USART1_MAN           (AVR32_USART1_BASE+AVR32_USART_MAN_OFFSET)
#define AVR32_USART1_VERSION       (AVR32_USART1_BASE+AVR32_USART_VERSION_OFFSET)

#define AVR32_USART2_CR            (AVR32_USART2_BASE+AVR32_USART_CR_OFFSET)
#define AVR32_USART2_MR            (AVR32_USART2_BASE+AVR32_USART_MR_OFFSET)
#define AVR32_USART2_IER           (AVR32_USART2_BASE+AVR32_USART_IER_OFFSET)
#define AVR32_USART2_IDR           (AVR32_USART2_BASE+AVR32_USART_IDR_OFFSET)
#define AVR32_USART2_IMR           (AVR32_USART2_BASE+AVR32_USART_IMR_OFFSET)
#define AVR32_USART2_CSR           (AVR32_USART2_BASE+AVR32_USART_CSR_OFFSET)
#define AVR32_USART2_RHR           (AVR32_USART2_BASE+AVR32_USART_RHR_OFFSET)
#define AVR32_USART2_THR           (AVR32_USART2_BASE+AVR32_USART_THR_OFFSET)
#define AVR32_USART2_BRGR          (AVR32_USART2_BASE+AVR32_USART_BRGR_OFFSET)
#define AVR32_USART2_RTOR          (AVR32_USART2_BASE+AVR32_USART_RTOR_OFFSET)
#define AVR32_USART2_TTGR          (AVR32_USART2_BASE+AVR32_USART_TTGR_OFFSET)
#define AVR32_USART2_FIDI          (AVR32_USART2_BASE+AVR32_USART_FIDI_OFFSET)
#define AVR32_USART2_NER           (AVR32_USART2_BASE+AVR32_USART_NER_OFFSET)
#define AVR32_USART2_IFR           (AVR32_USART2_BASE+AVR32_USART_IFR_OFFSET)
#define AVR32_USART2_MAN           (AVR32_USART2_BASE+AVR32_USART_MAN_OFFSET)
#define AVR32_USART2_VERSION       (AVR32_USART2_BASE+AVR32_USART_VERSION_OFFSET)

/* Register Bit-field Definitions ***************************************************/

/* CR Register Bit-field Definitions */

#define USART_CR_RSTRX             (1 << 2)  /* Bit 2:  Reset Receiver */
#define USART_CR_RSTTX             (1 << 3)  /* Bit 3:  Reset Transmitter */
#define USART_CR_RXEN              (1 << 4)  /* Bit 4:  Receiver Enable */
#define USART_CR_RXDIS             (1 << 5)  /* Bit 5:  Receiver Disable */
#define USART_CR_TXEN              (1 << 6)  /* Bit 6:  Transmitter Enable */
#define USART_CR_TXDIS             (1 << 7)  /* Bit 7:  Transmitter Disable */
#define USART_CR_RSTSTA            (1 << 8)  /* Bit 8:  Reset Status Bits */
#define USART_CR_STTBRK            (1 << 9)  /* Bit 9:  Start Break */
#define USART_CR_STPBRK            (1 << 10) /* Bit 10: Stop Break */
#define USART_CR_STTTO             (1 << 11) /* Bit 11: Start Time-out */
#define USART_CR_SENDA             (1 << 12) /* Bit 12: Send Address */
#define USART_CR_RSTIT             (1 << 13) /* Bit 13: Reset Iterations */
#define USART_CR_RSTNACK           (1 << 14) /* Bit 14: Reset Non Acknowledge */
#define USART_CR_RETTO             (1 << 15) /* Bit 15: Rearm Time-out */
#define USART_CR_DTREN             (1 << 16) /* Bit 16: Data Terminal Ready Enable */
#define USART_CR_DTRDIS            (1 << 17) /* Bit 17: Data Terminal Ready Disable */
#define USART_CR_RTSEN             (1 << 18) /* Bit 18: Request to Send Enable */
#define USART_CR_FCS               (1 << 18) /* Bit 18: Force SPI Chip Select */
#define USART_CR_RTSDIS            (1 << 19) /* Bit 19: Request to Send Disable */
#define USART_CR_RCS               (1 << 19) /* Bit 19: Release SPI Chip Select */

/* MR Register Bit-field Definitions */

#define USART_MR_MODE_SHIFT         (0)
#define USART_MR_MODE_MASK          (15 << USART_MR_MODE_SHIFT)
#  define USART_MR_MODE_NORMAL      (0 << USART_MR_MODE_SHIFT)  /* Normal */
#  define USART_MR_MODE_RS485       (1 << USART_MR_MODE_SHIFT)  /* RS485 */
#  define USART_MR_MODE_HW          (2 << USART_MR_MODE_SHIFT)  /* Hardware Handshaking */
#  define USART_MR_MODE_MODEM       (3 << USART_MR_MODE_SHIFT)  /* Modem */
#  define USART_MR_MODE_T0          (4 << USART_MR_MODE_SHIFT)  /* IS07816 Protocol: T = 0 */
#  define USART_MR_MODE_T1          (6 << USART_MR_MODE_SHIFT)  /* IS07816 Protocol: T = 1 */
#  define USART_MR_MODE_IRDA        (8 << USART_MR_MODE_SHIFT)  /* IrDA */
#  define USART_MR_MODE_MASTER      (14 << USART_MR_MODE_SHIFT) /* SPI Master */
#  define USART_MR_MODE_SLAVE       (15 << USART_MR_MODE_SHIFT) /* SPI Slave */
#define USART_MR_USCLKS_SHIFT       (4)       /* Bits 4-5:  Clock Selection */
#define USART_MR_USCLKS_MASK        (3 << USART_MR_USCLKS_SHIFT)
#  define USART_MR_USCLKS_CLKUSART  (0 << USART_MR_USCLKS_SHIFT) /* CLK_USART */
#  define USART_MR_USCLKS_DIV       (1 << USART_MR_USCLKS_SHIFT) /* CLK_USART/DIV */
#  define USART_MR_USCLKS_CLK       (3 << USART_MR_USCLKS_SHIFT) /* CLK */
#define USART_MR_CHRL_SHIFT         (6)       /* Bit 6-7:  Character Length */
#define USART_MR_CHRL_MASK          (3 << USART_MR_CHRL_SHIFT)
#  define USART_MR_CHRL_BITS(n)     (((n) - 5) << USART_MR_CHRL_SHIFT)
#  define USART_MR_CHRL_5BITS       (0 << USART_MR_CHRL_SHIFT) /* 5 bits */
#  define USART_MR_CHRL_6BITS       (1 << USART_MR_CHRL_SHIFT) /* 6 bits */
#  define USART_MR_CHRL_7BITS       (2 << USART_MR_CHRL_SHIFT) /* 7 bits */
#  define USART_MR_CHRL_8BITS       (3 << USART_MR_CHRL_SHIFT) /* 8 bits */
#define USART_MR_SYNC               (1 << 8)  /* Bit 8:  Synchronous Mode Select */
#define USART_MR_CPHA               (1 << 8)  /* Bit 8:  SPI Clock Phase */
#define USART_MR_PAR_SHIFT          (9)       /* Bits 9-11:  Parity Type */
#define USART_MR_PAR_MASK           (7 << USART_MR_PAR_SHIFT)
#  define USART_MR_PAR_EVEN         (0 << USART_MR_PAR_SHIFT) /* Even parity */
#  define USART_MR_PAR_ODD          (1 << USART_MR_PAR_SHIFT) /* Odd parity */
#  define USART_MR_PAR_SPACE        (2 << USART_MR_PAR_SHIFT) /* Parity forced to 0 (Space) */
#  define USART_MR_PAR_MARK         (3 << USART_MR_PAR_SHIFT) /* Parity forced to 1 (Mark) */
#  define USART_MR_PAR_NONE         (4 << USART_MR_PAR_SHIFT) /* No parity */
#  define USART_MR_PAR_MULTIDROP    (6 << USART_MR_PAR_SHIFT) /* Multidrop mode */
#define USART_MR_NBSTOP_SHIFT       (12)      /* Bits 12-13:  Number of Stop Bits */
#define USART_MR_NBSTOP_MASK        (3 << USART_MR_NBSTOP_SHIFT)
#  define USART_MR_NBSTOP_1         (0 << USART_MR_NBSTOP_SHIFT) /* 1 stop bit */
#  define USART_MR_NBSTOP_1p5       (1 << USART_MR_NBSTOP_SHIFT) /* 1.5 stop bits */
#  define USART_MR_NBSTOP_2         (2 << USART_MR_NBSTOP_SHIFT) /* 2 stop bits */
#define USART_MR_CHMODE_SHIFT       (14)      /* Bits 14-15:  Channel Mode */
#define USART_MR_CHMODE_MASK        (3 << USART_MR_CHMODE_SHIFT)
#  define USART_MR_CHMODE_NORMAL    (0 << USART_MR_CHMODE_SHIFT) /* Normal Mode */
#  define USART_MR_CHMODE_AUTO      (1 << USART_MR_CHMODE_SHIFT) /* Automatic Echo */
#  define USART_MR_CHMODE_LLPBK     (2 << USART_MR_CHMODE_SHIFT) /* Local Loopback */
#  define USART_MR_CHMODE_RLPBK     (3 << USART_MR_CHMODE_SHIFT) /* Remote Loopback */
#define USART_MR_MSBF               (1 << 16) /* Bit 16: Bit Order */
#define USART_MR_CPOL               (1 << 16) /* Bit 16: SPI Clock Polarity */
#define USART_MR_MODE9              (1 << 17) /* Bit 17: 9-bit Character Length */
#define USART_MR_CLKO               (1 << 18) /* Bit 18: Clock Output Select */
#define USART_MR_OVER               (1 << 19) /* Bit 19: Oversampling Mode */
#define USART_MR_INACK              (1 << 20) /* Bit 20: Inhibit Non Acknowledge */
#define USART_MR_DSNACK             (1 << 21) /* Bit 21: Disable Successive NACK */
#define USART_MR_VAR_SYNC           (1 << 22) /* Bit 22: Variable Synchronization */
#define USART_MR_MAXITER_SHIFT      (24)      /* Bits 24-26: Maximum iterations */
#define USART_MR_MAXITER_MASK       (7 << USART_MR_MAXITER_SHIFT)
#define USART_MR_FILTER             (1 << 28) /* Bit 28: Infrared Receive Line Filter */
#define USART_MR_MAN                (1 << 29) /* Bit 29: Manchester Encoder/Decoder Enable */
#define USART_MR_MODSYNC            (1 << 30) /* Bit 30: Manchester Synchronization Mode */
#define USART_MR_ONEBIT             (1 << 31) /* Bit 31: Start Frame Delimiter Selector */

/* IER, IDR, and IMR (and CSR) Register Bit-field Definitions */

#define USART_INT_RXRDY             (1 << 0)  /* Bit 0:  */
#define USART_INT_TXRDY             (1 << 1)  /* Bit 1:  */
#define USART_INT_RXBRK             (1 << 2)  /* Bit 2:  */
#define USART_INT_OVRE              (1 << 5)  /* Bit 5:  */
#define USART_INT_FRAME             (1 << 6)  /* Bit 6:  */
#define USART_INT_PARE              (1 << 7)  /* Bit 7:  */
#define USART_INT_TIMEOUT           (1 << 8)  /* Bit 8:  */
#define USART_INT_TXEMPTY           (1 << 9)  /* Bit 9:  */
#define USART_INT_ITER              (1 << 10) /* Bit 10: */
#define USART_INT_UNRE              (1 << 10) /* Bit 10: */
#define USART_INT_RXBUFF            (1 << 12) /* Bit 12: */
#define USART_INT_NACK              (1 << 13) /* Bit 13: */
#define USART_INT_RIIC              (1 << 16) /* Bit 16: */
#define USART_INT_DSRIC             (1 << 17) /* Bit 17: */
#define USART_INT_DCDIC             (1 << 18) /* Bit 18: */
#define USART_INT_CTSIC             (1 << 19) /* Bit 19: */
#define USART_INT_MANE              (1 << 20) /* Bit 20: */
#define USART_INT_MANEA             (1 << 24) /* Bit 24: */
#define USART_INT_ALL               0x011f37e7

/* CSR Register Bit-field Definitions */

#define USART_CSR_RXRDY             (1 << 0)  /* Bit 0:  */
#define USART_CSR_TXRDY             (1 << 1)  /* Bit 1:  */
#define USART_CSR_RXBRK             (1 << 2)  /* Bit 2:  */
#define USART_CSR_OVRE              (1 << 5)  /* Bit 5:  */
#define USART_CSR_FRAME             (1 << 6)  /* Bit 6:  */
#define USART_CSR_PARE              (1 << 7)  /* Bit 7:  */
#define USART_CSR_TIMEOUT           (1 << 8)  /* Bit 8:  */
#define USART_CSR_TXEMPTY           (1 << 9)  /* Bit 9:  */
#define USART_CSR_ITER              (1 << 10) /* Bit 10: */
#define USART_CSR_UNRE              (1 << 10) /* Bit 10: */
#define USART_CSR_RXBUFF            (1 << 12) /* Bit 12: */
#define USART_CSR_NACK              (1 << 13) /* Bit 13: */
#define USART_CSR_RIIC              (1 << 16) /* Bit 16: */
#define USART_CSR_DSRIC             (1 << 17) /* Bit 17: */
#define USART_CSR_DCDIC             (1 << 18) /* Bit 18: */
#define USART_CSR_CTSIC             (1 << 19) /* Bit 19: */
#define USART_CSR_RI                (1 << 20) /* Bit 20: */
#define USART_CSR_DSR               (1 << 21) /* Bit 21: Image of DSR Input */
#define USART_CSR_DCD               (1 << 22) /* Bit 22: Image of DCD Input*/
#define USART_CSR_CTS               (1 << 23) /* Bit 23: Image of CTS Input */
#define USART_CSR_MANERR            (1 << 24) /* Bit 24: Manchester Error */

/* RHR Register Bit-field Definitions */

#define USART_RHR_RXCHR_SHIFT       (0)       /* Bits 0-8: Received Character */
#define USART_RHR_RXCHR_MASK        (0x1ff << USART_RHR_RXCHR_SHIFT)
#define USART_RHR_RXSYNH            (1 << 15) /* Bit 15: Received Sync */

/* THR Register Bit-field Definitions */

#define USART_THR_TXCHR_SHIFT       (0)       /* Bits 0-8: Character to be Transmitted */
#define USART_THR_TXCHR_MASK        (0x1ff << USART_RHR_RXCHR_SHIFT)
#define USART_THR_TXSYNH            (1 << 15) /* Bit 15: Sync Field to be transmitted */

/* BRGR Register Bit-field Definitions */

#define USART_BRGR_CD_SHIFT         (0)       /* Bits 0-15: Clock Divider */
#define USART_BRGR_CD_MASK          (0xffff << USART_BRGR_CD_SHIFT)
#define USART_BRGR_FP_SHIFT         (16)      /* Bits 16-18: Fractional Part */
#define USART_BRGR_FP_MASK          (7 << USART_BRGR_FP_SHIFT)

/* RTOR Register Bit-field Definitions */

#define USART_RTOR_SHIFT            (0)       /* Bits0-15: Time-out Value */
#define USART_RTOR_MASK             (0xffff << USART_RTOR_SHIFT)

/* TTGR Register Bit-field Definitions */

#define USART_TTGR_SHIFT            (0)       /* Bits 0-7: Timeguard Value */
#define USART_TTGR_MASK             (0xff << USART_TTGR_SHIFT)

/* FIDI Register Bit-field Definitions */

#define USART_FIDI_SHIFT            (0)       /* Bits 0-10: FI Over DI Ratio Value */
#define USART_FIDI_MASK             (0x7ff<< USART_FIDI_SHIFT)

/* NER Register Bit-field Definitions */

#define USART_NER_SHIFT             (0)       /* Bits 0-7: Number of Errors */
#define USART_NER_MASK              (0xff << USART_NER_SHIFT)

/* IFR Register Bit-field Definitions */

#define USART_IFR_SHIFT             (0)       /* Bits 0-7: IrDA Filter */
#define USART_IFR_MASK              (0xff << USART_IFR_SHIFT)

/* MAN Register Bit-field Definitions */

#define USART_MAN_TXPL_SHIFT        (0)       /* Bits 0-3: Transmitter Preamble Length */
#define USART_MAN_TXPL_MASK         (15 << USART_MAN_TXPL_SHIFT)
#define USART_MAN_TXPP_SHIFT        (8)       /* Bits 8-9: Transmitter Preamble Pattern */
#define USART_MAN_TXPP_MASK         (3 << USART_MAN_TXPP_SHIFT)
#  define USART_MAN_TXPP_ALLONE     (0 << USART_MAN_TXPP_SHIFT) /* ALL_ONE */
#  define USART_MAN_TXPP_ALLZERO    (1 << USART_MAN_TXPP_SHIFT) /* ALL_ZERO */
#  define USART_MAN_TXPP_ZER0ONE    (2 << USART_MAN_TXPP_SHIFT) /* ZERO_ONE */
#  define USART_MAN_TXPP_ONEZERO    (3 << USART_MAN_TXPP_SHIFT) /* ONE_ZERO */
#define USART_MAN_TXMPOL            (1 << 12) /* Bit 12: Transmitter Manchester Polarity */
#define USART_MAN_RXPL_SHIFT        (16)      /* Bits 16-19: Receiver Preamble Length */
#define USART_MAN_RXPL_MASK         (15 << USART_MAN_RXPL_SHIFT)
#define USART_MAN_RXPP_SHIFT        (24)      /* Bits 24-25: Receiver Preamble Pattern detected */
#define USART_MAN_RXPP_MASK         (3 << USART_MAN_RXPP_SHIFT)
#  define USART_MAN_RXPP_ALLONE     (0 << USART_MAN_TXPP_SHIFT) /* ALL_ONE */
#  define USART_MAN_RXPP_ALLZERO    (1 << USART_MAN_TXPP_SHIFT) /* ALL_ZERO */
#  define USART_MAN_RXPP_ZER0ONE    (2 << USART_MAN_TXPP_SHIFT) /* ZERO_ONE */
#  define USART_MAN_RXPP_ONEZERO    (3 << USART_MAN_TXPP_SHIFT) /* ONE_ZERO */
#define USART_MAN_RXMPOL            (1 << 28) /* Bit 28: Receiver Manchester Polarity */
#define USART_MAN_DRIFT             (1 << 30) /* Bit 30: Drift compensation */

/* VERSION Register Bit-field Definitions */

#define USART_VERSION_SHIFT         (0)       /* Bits 0-12: Version of the module */
#define USART_VERSION_MASK          (0xfff << USART_VERSION_SHIFT)
#define USART_VARIANT_SHIFT         (16)      /* Bits 16-19: (Reserved) */
#define USART_VARIANT_MASK          (15 << USART_VARIANT_SHIFT)

/************************************************************************************
 * Public Types
 ************************************************************************************/

/************************************************************************************
 * Public Data
 ************************************************************************************/

/************************************************************************************
 * Public Functions
 ************************************************************************************/

#endif /* __ARCH_AVR_SRC_AT91UC3_AT91UC3_USART_H */