summaryrefslogtreecommitdiffstats
path: root/nuttx/arch/arm/src/dm320/dm320_uart.h
blob: f92a5ccdd67a979bf31641deac84a30ea93a8988 (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
/************************************************************************************
 * dm320/dm320_uart.h
 *
 *   Copyright (C) 2007, 2009 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 __DM320_UART_H
#define __DM320_UART_H

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

#ifndef __ASSEMBLY__
# include <stdint.h>
#endif

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

/* UART definitions *****************************************************************/

/* UART Registers (offsets from the register base) */

#define UART_DTRR              0    /* Data Transmission/Reception Register */
#define UART_BRSR              2    /* Bit Rate Set Register */
#define UART_MSR               4    /* Mode Set Register */
#define UART_RFCR              6    /* Reception FIFO Control Register */
#define UART_TFCR              8    /* Transmission FIFO Control Register */
#define UART_LCR              10    /* Line Control Register */
#define UART_SR               12    /* Status Register */

/* UART DTRR register bit definitions */

#define UART_DTRR_RVF         0x1000 /* Receive word valid flag */
#define UART_DTRR_BF          0x0800 /* Break flag */
#define UART_DTRR_FE          0x0400 /* Framing error */
#define UART_DTRR_ORF         0x0200 /* Overrun flag */
#define UART_DTRR_PEF         0x0100 /* Parity error */
#define UART_DTRR_DTR_MASK    0x00ff /* Data transmit/receive */

/* UART BRSR register bit definitions */
/* The UART module is clocked by either the AHB clock or PLLIN / 16 */

#ifdef CONFIG_DM320_UARTPPLIN
#  define UART_REFCLK (27000000 / 16)
#else
#  define UART_REFCLK (DM320_AHB_CLOCK / 16)
#endif

/* And baud = UART_REFCLK / (brsr+1) */

#define UART_BAUD_2400        ((uint16_t)((UART_REFCLK / 2400  ) - 1))
#define UART_BAUD_4800        ((uint16_t)((UART_REFCLK / 4800  ) - 1))
#define UART_BAUD_9600        ((uint16_t)((UART_REFCLK / 9600  ) - 1))
#define UART_BAUD_14400       ((uint16_t)((UART_REFCLK / 14400 ) - 1))
#define UART_BAUD_19200       ((uint16_t)((UART_REFCLK / 19200 ) - 1))
#define UART_BAUD_28800       ((uint16_t)((UART_REFCLK / 28800 ) - 1))
#define UART_BAUD_38400       ((uint16_t)((UART_REFCLK / 38400 ) - 1))
#define UART_BAUD_57600       ((uint16_t)((UART_REFCLK / 57600 ) - 1))
#define UART_BAUD_115200      ((uint16_t)((UART_REFCLK / 115200) - 1))
#define UART_BAUD_230400      ((uint16_t)((UART_REFCLK / 230400) - 1))
#define UART_BAUD_460800      ((uint16_t)((UART_REFCLK / 460800) - 1))
#define UART_BAUD_921600      ((uint16_t)((UART_REFCLK / 921600) - 1))

/* UART MSR register bit definitions */

#define UART_MSR_MODE_BITS    0x001f /* Aata length, stop, & parity */
#define UART_MSR_CLS          0x0001 /* Char length (1=7bit, 0=8bit) */
#define UART_DATABIT_7        0x0001 /*  Data bit = 7bit */
#define UART_DATABIT_8        0x0000 /*  Data bit = 8bit */
#define UART_MSR_SBLS         0x0004 /* Stop bit length selection */
#define UART_STOPBIT_1        0x0000 /*  Stop bit = 1bit */
#define UART_STOPBIT_2        0x0004 /*  Stop bit = 2bit */
#define UART_MSR_PSB          0x0008 /* Parity selection bit */
#define UART_MSR_PEB          0x0010 /* Parity enable bit */
#define UART_NOPARITY         0x0000 /*   No-parity */
#define UART_ODDPARITY        0x0018 /*   Odd parity */
#define UART_EVENPARITY       0x0010 /*   Even parity */
#define UART_MSR_RTSC         0x0020 /* RTS receive FIFO control */
#define UART_MSR_CSTC         0x0040 /* CTS send control */
#define UART_MSR_TOIC_MASK    0x0c00 /* Timeout interrupt control */
#define UART_MSR_TOIC_DIS     0x0000 /*   Disabled */
#define UART_MSR_TOIC_3       0x0400 /*   3 bytes */
#define UART_MSR_TOIC_7       0x0800 /*   7 bytes */
#define UART_MSR_TOIC_15      0x0c00 /*  15 bytes */
#define UART_MSR_ALLIE        0xfc00 /* All interrupt bits */
#define UART_MSR_LSIE         0x1000 /*  Line status change int. enable */
#define UART_MSR_REIE         0x2000 /*  Receive error interrupt enable */
#define UART_MSR_TFTIE        0x4000 /*  Transmit FIFO trigger int. enable */
#define UART_MSR_RFTIE        0x8000 /*  Receive FIFO trigger int. enable */

#define  UART_MSR_INIT (UART_NOPARITY | UART_STOPBIT_1 | UART_DATABIT_8)

/* UART RFCR register bit definitions */

#define UART_RFCR_RWC_MASK    0x003f /* Receive byte count */
#define UART_RFCR_RTL_MASK    0x0700 /* Receive trigger level */
#define UART_RFCR_RTL_1       0x0000 /*   1 byte */
#define UART_RFCR_RTL_4       0x0100 /*   4 bytes */
#define UART_RFCR_RTL_8       0x0200 /*   8 bytes */
#define UART_RFCR_RTL_16      0x0300 /*  16 bytes */
#define UART_RFCR_RTL_24      0x0400 /*  24 bytes */
#define UART_RFCR_RTL_32      0x0500 /*  32 bytes */
#define UART_RFCR_RDEF        0x4000 /* Receive data error flag */
#define UART_RFCR_RFCB        0x8000 /* Receive FIFO clear bit */

/* UART TFCR register bit definitions */

#define UART_TFCR_TWC_MASK    0x003f /* Transmit byte count */
#define UART_TFCR_TTL_MASK    0x0700 /* Transmit trigger level */
#define UART_TFCR_TTL_1       0x0000 /*   1 byte */
#define UART_TFCR_TTL_4       0x0100 /*   4 bytes */
#define UART_TFCR_TTL_8       0x0200 /*   8 bytes */
#define UART_TFCR_TTL_16      0x0300 /*  16 bytes */
#define UART_TFCR_TTL_24      0x0400 /*  24 bytes */
#define UART_TFCR_TTL_32      0x0500 /*  32 bytes */
#define UART_TFCR_TFCB        0x8000 /* Transmit FIFO clear bit */

/* UART LCR register bit definitions */

#define UART_LCR_RTS          0x0004 /* Current RTS value */
#define UART_LCR_CTS          0x0010 /* Current CTS value */
#define UART_LCR_DSR          0x0080 /* Current DSR value */
#define UART_LCR_BOC          0x0100 /* Break output control */
#define UART_LCR_UTST         0x4000 /* Test mode setting */

#define UART_LCR_INIT         0x0000

/* UART SR register bit definitions */

#define UART_SR_TREF          0x0001 /* Transmit register empty flag */
#define UART_SR_TFEF          0x0002 /* Transmit FIFO empty flag */
#define UART_SR_RFNEF         0x0004 /* Receive FIFO not empty flag */
#define UART_SR_TOIF          0x0100 /* Timeout Interrupt flag */
#define UART_SR_RFER          0x0200 /* Receive data error flag */
#define UART_SR_TFTI          0x0400 /* Transmit FIFO trigger level */
#define UART_SR_RFTI          0x0800 /* Receive FIFO trigger level */
#define UART_SR_CTSS          0x1000 /* CTS status */
#define UART_SR_DSRS          0x8000 /* DSR status */

/************************************************************************************
 * Inline Functions
 ************************************************************************************/

#endif  /* __DM320_UART_H */