Move also cpu/ to bertos/ :-).
[bertos.git] / bertos / cpu / arm / io / at91sam7.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 2007 Develer S.r.l. (http://www.develer.com/)
30  *
31  * -->
32  *
33  * \version $Id$
34  *
35  * \author Francesco Sacchi <batt@develer.com>
36  * \author Daniele Basile <asterix@develer.com>
37  *
38  * AT91SAM7 register definitions.
39  * This file is based on NUT/OS implementation. See license below.
40  */
41
42 /*
43  * Copyright (C) 2006-2007 by egnite Software GmbH. All rights reserved.
44  *
45  * Redistribution and use in source and binary forms, with or without
46  * modification, are permitted provided that the following conditions
47  * are met:
48  *
49  * 1. Redistributions of source code must retain the above copyright
50  *    notice, this list of conditions and the following disclaimer.
51  * 2. Redistributions in binary form must reproduce the above copyright
52  *    notice, this list of conditions and the following disclaimer in the
53  *    documentation and/or other materials provided with the distribution.
54  * 3. Neither the name of the copyright holders nor the names of
55  *    contributors may be used to endorse or promote products derived
56  *    from this software without specific prior written permission.
57  *
58  * THIS SOFTWARE IS PROVIDED BY EGNITE SOFTWARE GMBH AND CONTRIBUTORS
59  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
60  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
61  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL EGNITE
62  * SOFTWARE GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
63  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
64  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
65  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
66  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
67  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
68  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
69  * SUCH DAMAGE.
70  *
71  * For additional information see http://www.ethernut.de/
72  */
73
74 #ifndef AT91SAM7_H
75 #define AT91SAM7_H
76
77 #include <cfg/compiler.h>
78
79 #if CPU_ARM_AT91SAM7X256 || CPU_ARM_AT91SAM7X128 || CPU_ARM_AT91SAM7S256
80         #define FLASH_BASE      0x100000UL
81         #define RAM_BASE        0x200000UL
82
83         #define TC_BASE         0xFFFA0000      ///< Timer/counter base address.
84         #define UDP_BASE        0xFFFB0000      ///< USB device port base address.
85         #define TWI_BASE        0xFFFB8000      ///< Two-wire interface base address.
86         #define USART0_BASE     0xFFFC0000      ///< USART 0 base address.
87         #define USART1_BASE     0xFFFC4000      ///< USART 1 base address.
88         #define PWMC_BASE       0xFFFCC000      ///< PWM controller base address.
89         #define SSC_BASE        0xFFFD4000      ///< Serial synchronous controller base address.
90         #define ADC_BASE        0xFFFD8000      ///< ADC base address.
91
92         #define AIC_BASE        0xFFFFF000      ///< AIC base address.
93         #define DBGU_BASE       0xFFFFF200      ///< DBGU base address.
94         #define PIOA_BASE       0xFFFFF400      ///< PIO A base address.
95         #define PMC_BASE        0xFFFFFC00      ///< PMC base address.
96         #define RSTC_BASE       0xFFFFFD00      ///< Resect controller register base address.
97         #define RTT_BASE        0xFFFFFD20      ///< Realtime timer base address.
98         #define PIT_BASE        0xFFFFFD30      ///< Periodic interval timer base address.
99         #define WDT_BASE        0xFFFFFD40      ///< Watch Dog register base address.
100         #define VREG_BASE       0xFFFFFD60      ///< Voltage regulator mode controller base address.
101         #define MC_BASE         0xFFFFFF00      ///< Memory controller base.
102
103         #if CPU_ARM_AT91SAM7X256 || CPU_ARM_AT91SAM7X128
104                 #define CAN_BASE        0xFFFD0000      ///< PWM controller base address.
105                 #define EMAC_BASE       0xFFFDC000      ///< Ethernet MAC address.
106                 #define SPI0_BASE       0xFFFE0000      ///< SPI0 base address.
107                 #define SPI1_BASE       0xFFFE4000      ///< SPI1 base address.
108                 #define PIOB_BASE       0xFFFFF600      ///< PIO base address.
109         #endif
110
111         #if CPU_ARM_AT91SAM7S256
112                 #define SPI_BASE        0xFFFE0000      ///< SPI0 base address.
113         #endif
114
115         #define PIO_HAS_MULTIDRIVER        1
116         #define PIO_HAS_PULLUP             1
117         #define PIO_HAS_PERIPHERALSELECT   1
118         #define PIO_HAS_OUTPUTWRITEENABLE  1
119
120         #define DBGU_HAS_PDC               1
121         #define SPI_HAS_PDC                1
122         #define SSC_HAS_PDC                1
123         #define USART_HAS_PDC              1
124
125 #else
126         #error No base addrese register definition for selected ARM CPU
127
128 #endif
129
130 #include "at91_aic.h"
131 #include "at91_pit.h"
132 #include "at91_pmc.h"
133 #include "at91_mc.h"
134 #include "at91_wdt.h"
135 #include "at91_rstc.h"
136 #include "at91_pio.h"
137 #include "at91_us.h"
138 #include "at91_dbgu.h"
139 #include "at91_tc.h"
140 #include "at91_adc.h"
141 #include "at91_pwm.h"
142 #include "at91_spi.h"
143 #include "at91_twi.h"
144 //TODO: add other peripherals
145
146 /**
147  * Peripheral Identifiers and Interrupts
148  *\{
149  */
150 #if CPU_ARM_AT91SAM7X256 || CPU_ARM_AT91SAM7S256 || CPU_ARM_AT91SAM7X128
151         #define FIQ_ID      0       ///< Fast interrupt ID.
152         #define SYSC_ID     1       ///< System controller interrupt.
153         #define US0_ID      6       ///< USART 0 ID.
154         #define US1_ID      7       ///< USART 1 ID.
155         #define SSC_ID      8       ///< Synchronous serial controller ID.
156         #define TWI_ID      9       ///< Two-wire interface ID.
157         #define PWMC_ID     10      ///< PWM controller ID.
158         #define UDP_ID      11      ///< USB device port ID.
159         #define TC0_ID      12      ///< Timer 0 ID.
160         #define TC1_ID      13      ///< Timer 1 ID.
161         #define TC2_ID      14      ///< Timer 2 ID.
162
163         #define IRQ0_ID     30      ///< External interrupt 0 ID.
164         #define IRQ1_ID     31      ///< External interrupt 1 ID.
165
166         #if CPU_ARM_AT91SAM7X256 || CPU_ARM_AT91SAM7X128
167                 #define PIOA_ID     2       ///< Parallel A I/O controller ID.
168                 #define PIOB_ID     3       ///< Parallel B I/O controller ID.
169                 #define SPI0_ID     4       ///< Serial peripheral interface 0 ID.
170                 #define SPI1_ID     5       ///< Serial peripheral interface 1 ID.
171                 #define CAN_ID      15      ///< CAN controller ID.
172                 #define EMAC_ID     16      ///< Ethernet MAC ID.
173                 #define ADC_ID      17      ///< Analog to digital converter ID.
174                 /* 18-29 Reserved */
175
176         #endif
177
178         #if CPU_ARM_AT91SAM7S256
179                 #define PIOA_ID     2       ///< Parallel I/O controller ID.
180                 /* ID 3 is reserved */
181                 #define ADC_ID      4       ///< Analog to digital converter ID.
182                 #define SPI_ID      5       ///< Serial peripheral interface ID.
183                 #define SPI0_ID     SPI_ID  ///< Alias
184         #endif
185
186 #else
187         #error No peripheral ID and interrupts definition for selected ARM CPU
188
189 #endif
190 /*\}*/
191
192 /**
193  * USART & DEBUG pin names
194  *\{
195  */
196 #if CPU_ARM_AT91SAM7S256
197         #define RXD0        5
198         #define TXD0        6
199         #define RXD1       21
200         #define TXD1       22
201         #define DTXD       10
202         #define DRXD        9
203 #elif CPU_ARM_AT91SAM7X256 || CPU_ARM_AT91SAM7X128
204         #define RXD0        0 // PA0
205         #define TXD0        1 // PA1
206         #define RXD1        5 // PA5
207         #define TXD1        6 // PA6
208         #define DTXD       28 // PA28
209         #define DRXD       27 // PA27
210 #else
211         #error No USART & debug pin names definition for selected ARM CPU
212 #endif
213 /*\}*/
214
215 /**
216  * SPI pins name
217  *\{
218  */
219 #if CPU_ARM_AT91SAM7S256
220         #define SPI0_NPCS0      11  // Same as NSS pin.
221         #define SPI0_MISO       12
222         #define SPI0_MOSI       13
223         #define SPI0_SPCK       14
224
225 #elif CPU_ARM_AT91SAM7X256 || CPU_ARM_AT91SAM7X128
226         #define SPI0_NPCS0  12 // Same as NSS pin. PA12
227         #define SPI0_NPCS1  13 // PA13
228         #define SPI0_NPCS2  14 // PA14
229         #define SPI0_NPCS3  15 // PA15
230         #define SPI0_MISO   16 // PA16
231         #define SPI0_MOSI   17 // PA17
232         #define SPI0_SPCK   18 // PA18
233
234         #define SPI1_NPCS0  21 // Same as NSS pin. PA21
235         #define SPI1_NPCS1  25 // PA25
236         #define SPI1_NPCS2  26 // PA26
237         #define SPI1_NPCS3  29 // PA29
238         #define SPI1_MISO   24 // PA24
239         #define SPI1_MOSI   23 // PA23
240         #define SPI1_SPCK   22 // PA22
241
242 #else
243         #error No SPI pins name definition for selected ARM CPU
244
245 #endif
246 /*\}*/
247
248 /**
249  * Timer counter pins definition.
250  *\{
251  */
252 #if CPU_ARM_AT91SAM7X256 || CPU_ARM_AT91SAM7X128
253         #define TIOA0  23 // PB23
254         #define TIOB0  24 // PB24
255         #define TIOA1  25 // PB25
256         #define TIOB1  26 // PB26
257         #define TIOA2  27 // PB27
258         #define TIOB2  28 // PB28
259
260 #elif CPU_ARM_AT91SAM7S256
261         #define TIOA0  0 // PA0
262         #define TIOB0  1 // PA1
263         #define TIOA1  15 // PA15
264         #define TIOB1  16 // PA16
265         #define TIOA2  26 // PA26
266         #define TIOB2  27 // PA27
267
268 #else
269         #error No Timer Conter pins name definition for selected ARM CPU
270
271 #endif
272 /*\}*/
273
274 /**
275  * PWM pins definition.
276  *\{
277  */
278 #define PWM_PIO_FUNCTION_A 1
279
280 #if CPU_ARM_AT91SAM7X256 || CPU_ARM_AT91SAM7X128
281         #if PWM_PIO_FUNCTION_A
282                 #define PWM0  19 // PB19
283                 #define PWM1  20 // PB20
284                 #define PWM2  21 // PB21
285                 #define PWM3  22 // PB22
286         #else
287                 #define PWM0  27 // PB27
288                 #define PWM1  28 // PB28
289                 #define PWM2  29 // PB29
290                 #define PWM3  30 // PB30
291         #endif
292
293
294 #elif CPU_ARM_AT91SAM7S256
295         #define PWM0  11 // PA11
296         #define PWM1  12 // PA12
297         #define PWM2  13 // PA13
298         #define PWM3  14 // PA14
299
300 #else
301         #error No PWM pins name definition for selected ARM CPU
302
303 #endif
304 /*\}*/
305
306 /**
307  * TWI pins definition.
308  *\{
309  */
310 #if CPU_ARM_AT91SAM7X256 || CPU_ARM_AT91SAM7X128
311         #define TWD  10
312         #define TWCK 11
313 #else
314         #error No TWI pin names definition for selected ARM CPU
315 #endif
316
317 /**
318  * ADC pins definition.
319  *\{
320  */
321 #if CPU_ARM_AT91SAM7X256
322         #define ADTRG   18 // PB18
323         #define AD0     23 // PB27
324         #define AD1     24 // PB28
325         #define AD2     25 // PB29
326         #define AD3     26 // PB30
327
328 #elif CPU_ARM_AT91SAM7S256
329         #define ADTRG   18 // PA8
330         #define AD0      0 // PA17
331         #define AD1      1 // PA18
332         #define AD2     15 // PA19
333         #define AD3     16 // PA20
334
335 #else
336         #error No Timer Conter pin names definition for selected ARM CPU
337
338 #endif
339 /*\}*/
340
341 #endif /* AT91SAM7_H */