4 * This file is part of BeRTOS.
6 * Bertos is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 * As a special exception, you may use this file as part of a free software
21 * library without restriction. Specifically, if other files instantiate
22 * templates or use macros or inline functions from this file, or you compile
23 * this file and link it with other files to produce an executable, this
24 * file does not by itself cause the resulting executable to be covered by
25 * the GNU General Public License. This exception does not however
26 * invalidate any other reasons why the executable file might be covered by
27 * the GNU General Public License.
29 * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
33 * \brief SAM3 UART hardware.
40 * UART registers base addresses.
44 #define UART0_BASE 0x400E0600
46 #define UART0_BASE 0x400E0600
47 #define UART1_BASE 0x400E0800
49 #define UART0_BASE 0x400E0800
54 * UART register offsets.
57 #define UART_CR_OFF 0x000 //< Control Register
58 #define UART_MR_OFF 0x004 //< Mode Register
59 #define UART_IER_OFF 0x008 //< Interrupt Enable Register
60 #define UART_IDR_OFF 0x00C //< Interrupt Disable Register
61 #define UART_IMR_OFF 0x010 //< Interrupt Mask Register
62 #define UART_SR_OFF 0x014 //< Status Register
63 #define UART_RHR_OFF 0x018 //< Receive Holding Register
64 #define UART_THR_OFF 0x01C //< Transmit Holding Register
65 #define UART_BRGR_OFF 0x020 //< Baud Rate Generator Register
67 #define UART_RPR_OFF 0x100 //< Receive Pointer Register
68 #define UART_RCR_OFF 0x104 //< Receive Counter Register
69 #define UART_TPR_OFF 0x108 //< Transmit Pointer Register
70 #define UART_TCR_OFF 0x10C //< Transmit Counter Register
71 #define UART_RNPR_OFF 0x110 //< Receive Next Pointer Register
72 #define UART_RNCR_OFF 0x114 //< Receive Next Counter Register
73 #define UART_TNPR_OFF 0x118 //< Transmit Next Pointer Register
74 #define UART_TNCR_OFF 0x11C //< Transmit Next Counter Register
75 #define UART_PTCR_OFF 0x120 //< Transfer Control Register
76 #define UART_PTSR_OFF 0x124 //< Transfer Status Register
80 * UART register addresses.
83 #if defined(UART0_BASE)
84 #define UART0_ACCESS(offset) (*((reg32_t *)(UART0_BASE + (offset))))
86 #define UART_CR UART0_ACCESS(UART_CR_OFF) //< Control Register
87 #define UART_MR UART0_ACCESS(UART_MR_OFF) //< Mode Register
88 #define UART_IER UART0_ACCESS(UART_IER_OFF) //< Interrupt Enable Register
89 #define UART_IDR UART0_ACCESS(UART_IDR_OFF) //< Interrupt Disable Register
90 #define UART_IMR UART0_ACCESS(UART_IMR_OFF) //< Interrupt Mask Register
91 #define UART_SR UART0_ACCESS(UART_SR_OFF) //< Status Register
92 #define UART_RHR UART0_ACCESS(UART_RHR_OFF) //< Receive Holding Register
93 #define UART_THR UART0_ACCESS(UART_THR_OFF) //< Transmit Holding Register
94 #define UART_BRGR UART0_ACCESS(UART_BRGR_OFF) //< Baud Rate Generator Register
96 #define UART_RPR UART0_ACCESS(UART_RPR_OFF) //< Receive Pointer Register
97 #define UART_RCR UART0_ACCESS(UART_RCR_OFF) //< Receive Counter Register
98 #define UART_TPR UART0_ACCESS(UART_TPR_OFF) //< Transmit Pointer Register
99 #define UART_TCR UART0_ACCESS(UART_TCR_OFF) //< Transmit Counter Register
100 #define UART_RNPR UART0_ACCESS(UART_RNPR_OFF) //< Receive Next Pointer Register
101 #define UART_RNCR UART0_ACCESS(UART_RNCR_OFF) //< Receive Next Counter Register
102 #define UART_TNPR UART0_ACCESS(UART_TNPR_OFF) //< Transmit Next Pointer Register
103 #define UART_TNCR UART0_ACCESS(UART_TNCR_OFF) //< Transmit Next Counter Register
104 #define UART_PTCR UART0_ACCESS(UART_PTCR_OFF) //< Transfer Control Register
105 #define UART_PTSR UART0_ACCESS(UART_PTSR_OFF) //< Transfer Status Register
106 #endif /* UART0_BASE */
108 #if defined(UART1_BASE)
109 #define UART1_ACCESS(offset) (*((reg32_t *)(UART1_BASE + (offset))))
111 #define UART_CR UART1_ACCESS(UART_CR_OFF) //< Control Register
112 #define UART_MR UART1_ACCESS(UART_MR_OFF) //< Mode Register
113 #define UART_IER UART1_ACCESS(UART_IER_OFF) //< Interrupt Enable Register
114 #define UART_IDR UART1_ACCESS(UART_IDR_OFF) //< Interrupt Disable Register
115 #define UART_IMR UART1_ACCESS(UART_IMR_OFF) //< Interrupt Mask Register
116 #define UART_SR UART1_ACCESS(UART_SR_OFF) //< Status Register
117 #define UART_RHR UART1_ACCESS(UART_RHR_OFF) //< Receive Holding Register
118 #define UART_THR UART1_ACCESS(UART_THR_OFF) //< Transmit Holding Register
119 #define UART_BRGR UART1_ACCESS(UART_BRGR_OFF) //< Baud Rate Generator Register
121 #define UART_RPR UART1_ACCESS(UART_RPR_OFF) //< Receive Pointer Register
122 #define UART_RCR UART1_ACCESS(UART_RCR_OFF) //< Receive Counter Register
123 #define UART_TPR UART1_ACCESS(UART_TPR_OFF) //< Transmit Pointer Register
124 #define UART_TCR UART1_ACCESS(UART_TCR_OFF) //< Transmit Counter Register
125 #define UART_RNPR UART1_ACCESS(UART_RNPR_OFF) //< Receive Next Pointer Register
126 #define UART_RNCR UART1_ACCESS(UART_RNCR_OFF) //< Receive Next Counter Register
127 #define UART_TNPR UART1_ACCESS(UART_TNPR_OFF) //< Transmit Next Pointer Register
128 #define UART_TNCR UART1_ACCESS(UART_TNCR_OFF) //< Transmit Next Counter Register
129 #define UART_PTCR UART1_ACCESS(UART_PTCR_OFF) //< Transfer Control Register
130 #define UART_PTSR UART1_ACCESS(UART_PTSR_OFF) //< Transfer Status Register
131 #endif /* UART0_BASE */
135 * Bit fields in the UART_CR register.
138 #define UART_CR_RSTRX 2 //< Reset Receiver
139 #define UART_CR_RSTTX 3 //< Reset Transmitter
140 #define UART_CR_RXEN 4 //< Receiver Enable
141 #define UART_CR_RXDIS 5 //< Receiver Disable
142 #define UART_CR_TXEN 6 //< Transmitter Enable
143 #define UART_CR_TXDIS 7 //< Transmitter Disable
144 #define UART_CR_RSTSTA 8 //< Reset Status Bits
148 * Bit fields in the UART_MR register.
151 #define UART_MR_PAR_SHIFT 9 //< Parity Type shift
152 #define UART_MR_PAR_MASK (0x7 << UART_MR_PAR_SHIFT) //< Parity Type mask
153 #define UART_MR_PAR_EVEN (0x0 << UART_MR_PAR_SHIFT) //< Even parity
154 #define UART_MR_PAR_ODD (0x1 << UART_MR_PAR_SHIFT) //< Odd parity
155 #define UART_MR_PAR_SPACE (0x2 << UART_MR_PAR_SHIFT) //< Space: parity forced to 0
156 #define UART_MR_PAR_MARK (0x3 << UART_MR_PAR_SHIFT) //< Mark: parity forced to 1
157 #define UART_MR_PAR_NO (0x4 << UART_MR_PAR_SHIFT) //< No parity
158 #define UART_MR_CHMODE_SHIFT 14 //< Channel Mode shift
159 #define UART_MR_CHMODE_MASK (0x3 << UART_MR_CHMODE_SHIFT) //< Channel Mode mask
160 #define UART_MR_CHMODE_NORMAL (0x0 << UART_MR_CHMODE_SHIFT) //< Normal Mode
161 #define UART_MR_CHMODE_AUTOMATIC (0x1 << UART_MR_CHMODE_SHIFT) //< Automatic Echo
162 #define UART_MR_CHMODE_LOCAL_LOOPBACK (0x2 << UART_MR_CHMODE_SHIFT) //< Local Loopback
163 #define UART_MR_CHMODE_REMOTE_LOOPBACK (0x3 << UART_MR_CHMODE_SHIFT) //< Remote Loopback
167 * Bit fields in the UART_IER register.
170 #define UART_IER_RXRDY 0 //< Enable RXRDY Interrupt
171 #define UART_IER_TXRDY 1 //< Enable TXRDY Interrupt
172 #define UART_IER_ENDRX 3 //< Enable End of Receive Transfer Interrupt
173 #define UART_IER_ENDTX 4 //< Enable End of Transmit Interrupt
174 #define UART_IER_OVRE 5 //< Enable Overrun Error Interrupt
175 #define UART_IER_FRAME 6 //< Enable Framing Error Interrupt
176 #define UART_IER_PARE 7 //< Enable Parity Error Interrupt
177 #define UART_IER_TXEMPTY 9 //< Enable TXEMPTY Interrupt
178 #define UART_IER_TXBUFE 11 //< Enable Buffer Empty Interrupt
179 #define UART_IER_RXBUFF 12 //< Enable Buffer Full Interrupt
183 * Bit fields in the UART_IDR register.
186 #define UART_IDR_RXRDY 0 //< Disable RXRDY Interrupt
187 #define UART_IDR_TXRDY 1 //< Disable TXRDY Interrupt
188 #define UART_IDR_ENDRX 3 //< Disable End of Receive Transfer Interrupt
189 #define UART_IDR_ENDTX 4 //< Disable End of Transmit Interrupt
190 #define UART_IDR_OVRE 5 //< Disable Overrun Error Interrupt
191 #define UART_IDR_FRAME 6 //< Disable Framing Error Interrupt
192 #define UART_IDR_PARE 7 //< Disable Parity Error Interrupt
193 #define UART_IDR_TXEMPTY 9 //< Disable TXEMPTY Interrupt
194 #define UART_IDR_TXBUFE 11 //< Disable Buffer Empty Interrupt
195 #define UART_IDR_RXBUFF 12 //< Disable Buffer Full Interrupt
199 * Bit fields in the UART_IMR register.
202 #define UART_IMR_RXRDY 0 //< Mask RXRDY Interrupt
203 #define UART_IMR_TXRDY 1 //< Disable TXRDY Interrupt
204 #define UART_IMR_ENDRX 3 //< Mask End of Receive Transfer Interrupt
205 #define UART_IMR_ENDTX 4 //< Mask End of Transmit Interrupt
206 #define UART_IMR_OVRE 5 //< Mask Overrun Error Interrupt
207 #define UART_IMR_FRAME 6 //< Mask Framing Error Interrupt
208 #define UART_IMR_PARE 7 //< Mask Parity Error Interrupt
209 #define UART_IMR_TXEMPTY 9 //< Mask TXEMPTY Interrupt
210 #define UART_IMR_TXBUFE 11 //< Mask TXBUFE Interrupt
211 #define UART_IMR_RXBUFF 12 //< Mask RXBUFF Interrupt
215 * Bit fields in the UART_SR register.
218 #define UART_SR_RXRDY 0 //< Receiver Ready
219 #define UART_SR_TXRDY 1 //< Transmitter Ready
220 #define UART_SR_ENDRX 3 //< End of Receiver Transfer
221 #define UART_SR_ENDTX 4 //< End of Transmitter Transfer
222 #define UART_SR_OVRE 5 //< Overrun Error
223 #define UART_SR_FRAME 6 //< Framing Error
224 #define UART_SR_PARE 7 //< Parity Error
225 #define UART_SR_TXEMPTY 9 //< Transmitter Empty
226 #define UART_SR_TXBUFE 11 //< Transmission Buffer Empty
227 #define UART_SR_RXBUFF 12 //< Receive Buffer Full
231 * Bit fields in the UART_RHR register.
234 #define UART_RHR_RXCHR_MASK 0xFF //< Received Character mask
235 #define UART_RHR_RXCHR_SHIFT 0 //< Received Character shift
239 * Bit fields in the UART_THR register.
242 #define UART_THR_TXCHR_MASK 0xFF //< Character to be Transmitted mask
243 #define UART_THR_TXCHR_SHIFT 0 //< Character to be Transmitted shift
247 * Bit fields in the UART_BRGR register.
250 #define UART_BRGR_CD_MASK 0xFFFF //< Clock Divisor mask
251 #define UART_BRGR_CD_SHIFT 0 //< Clock Divisor shift
255 * Bit fields in the UART_RPR register.
258 #define UART_RPR_RXPTR_MASK 0xFFFFFFFF //< Receive Pointer Register mask
259 #define UART_RPR_RXPTR_SHIFT 0 //< Receive Pointer Register shift
263 * Bit fields in the UART_RCR register.
266 #define UART_RCR_RXCTR_MASK 0xFFFF //< Receive Counter Register mask
267 #define UART_RCR_RXCTR_SHIFT 0 //< Receive Counter Register shift
271 * Bit fields in the UART_TPR register.
274 #define UART_TPR_TXPTR_MASK 0xFFFFFFFF //< Transmit Counter Register mask
275 #define UART_TPR_TXPTR_SHIFT 0 //< Transmit Counter Register shift
279 * Bit fields in the UART_TCR register.
282 #define UART_TCR_TXCTR_MASK 0xFFFF //< Transmit Counter Register mask
283 #define UART_TCR_TXCTR_SHIFT 0 //< Transmit Counter Register shift
287 * Bit fields in the UART_RNPR register.
290 #define UART_RNPR_RXNPTR_MASK 0xFFFFFFFF //< Receive Next Pointer mask
291 #define UART_RNPR_RXNPTR_SHIFT 0 //< Receive Next Pointer shift
295 * Bit fields in the UART_RNCR register.
298 #define UART_RNCR_RXNCTR_MASK 0xFFFF //< Receive Next Counter mask
299 #define UART_RNCR_RXNCTR_SHIFT 0 //< Receive Next Counter shift
303 * Bit fields in the UART_TNPR register.
306 #define UART_TNPR_TXNPTR_MASK 0xFFFFFFFF //< Transmit Next Pointer mask
307 #define UART_TNPR_TXNPTR_SHIFT 0 //< Transmit Next Pointer shift
311 * Bit fields in the UART_TNCR register.
314 #define UART_TNCR_TXNCTR_MASK 0xFFFF //< Transmit Counter Next mask
315 #define UART_TNCR_TXNCTR_SHIFT 0 //< Transmit Counter Next shift
319 * Bit fields in the UART_PTCR register.
322 #define UART_PTCR_RXTEN 0 //< Receiver Transfer Enable
323 #define UART_PTCR_RXTDIS 1 //< Receiver Transfer Disable
324 #define UART_PTCR_TXTEN 8 //< Transmitter Transfer Enable
325 #define UART_PTCR_TXTDIS 9 //< Transmitter Transfer Disable
329 * Bit fields in the UART_PTSR register.
332 #define UART_PTSR_RXTEN 0 //< Receiver Transfer Enable
333 #define UART_PTSR_TXTEN 8 //< Transmitter Transfer Enable
336 #endif /* SAM3_UART_H */