4 * Copyright 2004, 2005 Develer S.r.l. (http://www.develer.com/)
5 * Copyright 2004 Giovanni Bajo
6 * This file is part of DevLib - See README.devlib for information.
9 * \brief CPU detection through special preprocessor macros
15 *#* Revision 1.6 2007/06/07 14:42:54 batt
16 *#* Merge from project_ks.
18 *#* Revision 1.5 2007/01/27 20:48:36 batt
19 *#* Add support for ATMEGA1281.
21 *#* Revision 1.4 2006/07/19 12:56:25 bernie
22 *#* Convert to new Doxygen style.
24 *#* Revision 1.3 2006/02/10 12:37:37 bernie
25 *#* Add support for ARM on IAR.
27 *#* Revision 1.2 2005/06/14 06:15:10 bernie
28 *#* Add X86_64 support.
30 *#* Revision 1.1 2005/04/11 19:04:13 bernie
31 *#* Move top-level headers to cfg/ subdir.
33 *#* Revision 1.4 2005/02/16 20:33:24 bernie
34 *#* Preliminary PPC support.
36 *#* Revision 1.3 2004/12/31 17:39:26 bernie
37 *#* Use C89 comments only.
39 *#* Revision 1.2 2004/08/25 14:12:08 rasky
40 *#* Aggiornato il comment block dei log RCS
42 *#* Revision 1.1 2004/07/30 17:14:49 rasky
43 *#* File sfuggito al commit precedente (nuova gestione unificata del detect della CPU
45 *#* Revision 1.2 2004/07/30 10:31:07 rasky
46 *#* Aggiunto detect per ATmega128
52 #if defined(__arm__) /* GCC */ \
53 || defined(__ARM4TM__) /* IAR: defined for all cores >= 4tm */
60 #if (defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)) \
61 && !defined(__ARM4TM__) /* IAR: if not ARM assume I196 */
68 #if defined(__i386__) /* GCC */ \
69 || (defined(_M_IX86) && !defined(_WIN64)) /* MSVC */
74 #elif defined(__x86_64__) /* GCC */ \
75 || (defined(_M_IX86) && defined(_WIN64)) /* MSVC */
86 #if defined (_ARCH_PPC) || defined(_ARCH_PPC64)
89 #if defined(_ARCH_PPC)
94 #if defined(_ARCH_PPC64)
105 #if defined(__m56800E__) || defined(__m56800__)
107 #define CPU_ID dsp56k
112 #if defined (__AVR__)
116 #if defined(__AVR_ATmega64__)
117 #define CPU_AVR_ATMEGA64 1
119 #define CPU_AVR_ATMEGA64 0
122 #if defined(__AVR_ATmega103__)
123 #define CPU_AVR_ATMEGA103 1
125 #define CPU_AVR_ATMEGA103 0
128 #if defined(__AVR_ATmega128__)
129 #define CPU_AVR_ATMEGA128 1
131 #define CPU_AVR_ATMEGA128 0
134 #if defined(__AVR_ATmega8__)
135 #define CPU_AVR_ATMEGA8 1
137 #define CPU_AVR_ATMEGA8 0
140 #if defined(__AVR_ATmega168__)
141 #define CPU_AVR_ATMEGA168 1
143 #define CPU_AVR_ATMEGA168 0
146 #if defined(__AVR_ATmega1281__)
147 #define CPU_AVR_ATMEGA1281 1
149 #define CPU_AVR_ATMEGA1281 0
153 #define CPU_AVR_ATMEGA8 0
154 #define CPU_AVR_ATMEGA168 0
155 #define CPU_AVR_ATMEGA64 0
156 #define CPU_AVR_ATMEGA103 0
157 #define CPU_AVR_ATMEGA128 0
158 #define CPU_AVR_ATMEGA1281 0
162 /* Self-check for the detection: only one CPU must be detected */
163 #if CPU_ARM + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR == 0
165 #elif !defined(CPU_ID)
166 #error CPU_ID not defined
167 #elif CPU_ARM + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR != 1
168 #error Internal CPU configuration error
172 #endif /* CPU_DETECT_H */