sam3: new cpu SAM3X8, add I/O base addresses, and update interrupt list
[bertos.git] / bertos / cpu / cortex-m3 / io / sam3_uart.h
1 /**
2  * \file
3  * <!--
4  * This file is part of BeRTOS.
5  *
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.
10  *
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.
15  *
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
19  *
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.
28  *
29  * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
30  *
31  * -->
32  *
33  * \brief SAM3 UART hardware.
34  */
35
36 #ifndef SAM3_UART_H
37 #define SAM3_UART_H
38
39 /**
40  * UART registers base addresses.
41  */
42 /*\{*/
43 #if CPU_CM3_SAM3N
44         #define UART0_BASE  0x400E0600
45 #elif CPU_CM3_SAM3U
46         #define UART0_BASE  0x400E0600
47         #define UART1_BASE  0x400E0800
48 #elif CPU_CM3_SAM3X
49         #define UART0_BASE  0x400E0800
50 #endif
51 /*\}*/
52
53 /**
54  * UART register offsets.
55  */
56 /*\{*/
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
66
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
77 /*\}*/
78
79 /**
80  * UART register addresses.
81  */
82 /*\{*/
83 #if defined(UART0_BASE)
84         #define UART0_ACCESS(offset) (*((reg32_t *)(UART0_BASE + (offset))))
85
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
95
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 */
107
108 #if defined(UART1_BASE)
109         #define UART1_ACCESS(offset) (*((reg32_t *)(UART1_BASE + (offset))))
110
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
120
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 */
132 /*\}*/
133
134 /**
135  * Bit fields in the UART_CR register.
136  */
137 /*\{*/
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
145 /*\}*/
146
147 /**
148  * Bit fields in the UART_MR register.
149  */
150 /*\{*/
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
164 /*\}*/
165
166 /**
167  * Bit fields in the UART_IER register.
168  */
169 /*\{*/
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
180 /*\}*/
181
182 /**
183  * Bit fields in the UART_IDR register.
184  */
185 /*\{*/
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
196 /*\}*/
197
198 /**
199  * Bit fields in the UART_IMR register.
200  */
201 /*\{*/
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
212 /*\}*/
213
214 /**
215  * Bit fields in the UART_SR register.
216  */
217 /*\{*/
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
228 /*\}*/
229
230 /**
231  * Bit fields in the UART_RHR register.
232  */
233 /*\{*/
234 #define UART_RHR_RXCHR_MASK   0xFF  //< Received Character mask
235 #define UART_RHR_RXCHR_SHIFT  0     //< Received Character shift
236 /*\}*/
237
238 /**
239  * Bit fields in the UART_THR register.
240  */
241 /*\{*/
242 #define UART_THR_TXCHR_MASK   0xFF  //< Character to be Transmitted mask
243 #define UART_THR_TXCHR_SHIFT  0     //< Character to be Transmitted shift
244 /*\}*/
245
246 /**
247  * Bit fields in the UART_BRGR register.
248  */
249 /*\{*/
250 #define UART_BRGR_CD_MASK   0xFFFF  //< Clock Divisor mask
251 #define UART_BRGR_CD_SHIFT  0       //< Clock Divisor shift
252 /*\}*/
253
254 /**
255  * Bit fields in the UART_RPR register.
256  */
257 /*\{*/
258 #define UART_RPR_RXPTR_MASK  0xFFFFFFFF  //< Receive Pointer Register mask
259 #define UART_RPR_RXPTR_SHIFT 0           //< Receive Pointer Register shift
260 /*\}*/
261
262 /**
263  * Bit fields in the UART_RCR register.
264  */
265 /*\{*/
266 #define UART_RCR_RXCTR_MASK  0xFFFF  //< Receive Counter Register mask
267 #define UART_RCR_RXCTR_SHIFT 0       //< Receive Counter Register shift
268 /*\}*/
269
270 /**
271  * Bit fields in the UART_TPR register.
272  */
273 /*\{*/
274 #define UART_TPR_TXPTR_MASK  0xFFFFFFFF  //< Transmit Counter Register mask
275 #define UART_TPR_TXPTR_SHIFT 0           //< Transmit Counter Register shift
276 /*\}*/
277
278 /**
279  * Bit fields in the UART_TCR register.
280  */
281 /*\{*/
282 #define UART_TCR_TXCTR_MASK  0xFFFF  //< Transmit Counter Register mask
283 #define UART_TCR_TXCTR_SHIFT 0       //< Transmit Counter Register shift
284 /*\}*/
285
286 /**
287  * Bit fields in the UART_RNPR register.
288  */
289 /*\{*/
290 #define UART_RNPR_RXNPTR_MASK  0xFFFFFFFF  //< Receive Next Pointer mask
291 #define UART_RNPR_RXNPTR_SHIFT 0           //< Receive Next Pointer shift
292 /*\}*/
293
294 /**
295  * Bit fields in the UART_RNCR register.
296  */
297 /*\{*/
298 #define UART_RNCR_RXNCTR_MASK  0xFFFF  //< Receive Next Counter mask
299 #define UART_RNCR_RXNCTR_SHIFT 0       //< Receive Next Counter shift
300 /*\}*/
301
302 /**
303  * Bit fields in the UART_TNPR register.
304  */
305 /*\{*/
306 #define UART_TNPR_TXNPTR_MASK  0xFFFFFFFF  //< Transmit Next Pointer mask
307 #define UART_TNPR_TXNPTR_SHIFT 0           //< Transmit Next Pointer shift
308 /*\}*/
309
310 /**
311  * Bit fields in the UART_TNCR register.
312  */
313 /*\{*/
314 #define UART_TNCR_TXNCTR_MASK  0xFFFF  //< Transmit Counter Next mask
315 #define UART_TNCR_TXNCTR_SHIFT 0       //< Transmit Counter Next shift
316 /*\}*/
317
318 /**
319  * Bit fields in the UART_PTCR register.
320  */
321 /*\{*/
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
326 /*\}*/
327
328 /**
329  * Bit fields in the UART_PTSR register.
330  */
331 /*\{*/
332 #define UART_PTSR_RXTEN   0  //< Receiver Transfer Enable
333 #define UART_PTSR_TXTEN   8  //< Transmitter Transfer Enable
334 /*\}*/
335
336 #endif /* SAM3_UART_H */