BeRTOS
detect.h
Go to the documentation of this file.
00001 
00036 #ifndef CPU_DETECT_H
00037 #define CPU_DETECT_H
00038 
00039 #if defined(__ARM_ARCH_4T__) /* GCC */ \
00040     || (defined(__ICCARM__) && (__CORE__== __ARM4TM__)) /* IAR: defined for all cores == 4tm */
00041     #define CPU_ARM 1
00042     #define CPU_ID  arm
00043     #define CPU_CORE_NAME        "ARM7TDMI"
00044 
00045     // AT91SAM7S products serie
00046     #if defined(__ARM_AT91SAM7S32__)
00047         #define CPU_ARM_AT91         1
00048         #define CPU_ARM_AT91SAM7S32  1
00049         #define CPU_NAME             "AT91SAM7S32"
00050     #else
00051         #define CPU_ARM_AT91SAM7S32  0
00052     #endif
00053 
00054     #if defined(__ARM_AT91SAM7S64__)
00055         #define CPU_ARM_AT91         1
00056         #define CPU_ARM_SAM7S_LARGE  1
00057         #define CPU_ARM_AT91SAM7S64  1
00058         #define CPU_NAME             "AT91SAM7S64"
00059     #else
00060         #define CPU_ARM_AT91SAM7S64  0
00061     #endif
00062 
00063     #if defined(__ARM_AT91SAM7S128__)
00064         #define CPU_ARM_AT91         1
00065         #define CPU_ARM_SAM7S_LARGE  1
00066         #define CPU_ARM_AT91SAM7S128 1
00067         #define CPU_NAME             "AT91SAM7S128"
00068     #else
00069         #define CPU_ARM_AT91SAM7S128 0
00070     #endif
00071 
00072     #if defined(__ARM_AT91SAM7S256__)
00073         #define CPU_ARM_AT91         1
00074         #define CPU_ARM_SAM7S_LARGE  1
00075         #define CPU_ARM_AT91SAM7S256 1
00076         #define CPU_NAME             "AT91SAM7S256"
00077     #else
00078         #define CPU_ARM_AT91SAM7S256 0
00079     #endif
00080 
00081     #if defined(__ARM_AT91SAM7S512__)
00082         #define CPU_ARM_AT91         1
00083         #define CPU_ARM_SAM7S_LARGE  1
00084         #define CPU_ARM_AT91SAM7S512 1
00085         #define CPU_NAME             "AT91SAM7S512"
00086     #else
00087         #define CPU_ARM_AT91SAM7S512 0
00088     #endif
00089 
00090     // AT91SAM7X products serie
00091     #if defined(__ARM_AT91SAM7X128__)
00092         #define CPU_ARM_AT91         1
00093         #define CPU_ARM_SAM7X        1
00094         #define CPU_ARM_AT91SAM7X128 1
00095         #define CPU_NAME             "AT91SAM7X128"
00096     #else
00097         #define CPU_ARM_AT91SAM7X128 0
00098     #endif
00099 
00100     #if defined(__ARM_AT91SAM7X256__)
00101         #define CPU_ARM_AT91         1
00102         #define CPU_ARM_SAM7X        1
00103         #define CPU_ARM_AT91SAM7X256 1
00104         #define CPU_NAME             "AT91SAM7X256"
00105     #else
00106         #define CPU_ARM_AT91SAM7X256 0
00107     #endif
00108 
00109 
00110     #if defined(__ARM_AT91SAM7X512__)
00111         #define CPU_ARM_AT91         1
00112         #define CPU_ARM_SAM7X        1
00113         #define CPU_ARM_AT91SAM7X512 1
00114         #define CPU_NAME             "AT91SAM7X512"
00115     #else
00116         #define CPU_ARM_AT91SAM7X512 0
00117     #endif
00118 
00119     #if defined(__ARM_LPC2378__)
00120         #define CPU_ARM_LPC2        1
00121         #define CPU_ARM_LPC2378     1
00122         #define CPU_NAME             "LPC2378"
00123     #else
00124         #define CPU_ARM_LPC2378     0
00125     #endif
00126 
00127     #if !defined(CPU_ARM_SAM7S_LARGE)
00128         #define CPU_ARM_SAM7S_LARGE 0
00129     #endif
00130 
00131     #if !defined(CPU_ARM_SAM7X)
00132         #define CPU_ARM_SAM7X 0
00133     #endif
00134 
00135 
00136     #if defined(CPU_ARM_AT91)
00137         #if CPU_ARM_AT91SAM7S32 + CPU_ARM_AT91SAM7S64 \
00138         + CPU_ARM_AT91SAM7S128 + CPU_ARM_AT91SAM7S256 \
00139         + CPU_ARM_AT91SAM7S512 \
00140         + CPU_ARM_AT91SAM7X128 + CPU_ARM_AT91SAM7X256 \
00141         + CPU_ARM_AT91SAM7X512 != 1
00142             #error ARM CPU configuration error
00143         #endif
00144         #define CPU_ARM_LPC2        0
00145 
00146     #elif defined (CPU_ARM_LPC2)
00147 
00148         #if CPU_ARM_LPC2378 + 0 != 1
00149             #error NXP LPC2xxx ARM CPU configuration error
00150         #endif
00151         #define CPU_ARM_AT91        0
00152     /* #elif Add other ARM families here */
00153     #else
00154         #define CPU_ARM_AT91        0
00155         #define CPU_ARM_LPC2        0
00156     #endif
00157 
00158 
00159     #if CPU_ARM_AT91 + CPU_ARM_LPC2 + 0 /* Add other ARM families here */ != 1
00160         #error ARM CPU configuration error
00161     #endif
00162 #else
00163     #define CPU_ARM                 0
00164 
00165     /* ARM Families */
00166     #define CPU_ARM_AT91            0
00167     #define CPU_ARM_LPC2            0
00168 
00169     /* SAM7 sub-families */
00170     #define CPU_ARM_SAM7S_LARGE     0
00171     #define CPU_ARM_SAM7X           0
00172 
00173     /* ARM CPUs */
00174     #define CPU_ARM_AT91SAM7S32     0
00175     #define CPU_ARM_AT91SAM7S64     0
00176     #define CPU_ARM_AT91SAM7S128    0
00177     #define CPU_ARM_AT91SAM7S256    0
00178     #define CPU_ARM_AT91SAM7S512    0
00179     #define CPU_ARM_AT91SAM7X128    0
00180     #define CPU_ARM_AT91SAM7X256    0
00181     #define CPU_ARM_AT91SAM7X512    0
00182 
00183     #define CPU_ARM_LPC2378         0
00184 #endif
00185 
00186 #if defined(__ARM_ARCH_7M__) /* GCC */ \
00187     || (defined(__ICCARM__) && (__CORE__== __ARM7M__)) /* IAR: defined for all cores v7M */
00188     /* Cortex-M3 */
00189     #define CPU_CM3 1
00190     #define CPU_ID  cm3
00191     #define CPU_CORE_NAME "Cortex-M3"
00192 
00193     #if defined (__ARM_LM3S1968__)
00194         #define CPU_CM3_LM3S        1
00195         #define CPU_CM3_LM3S1968    1
00196         #define CPU_NAME            "LM3S1968"
00197     #else
00198         #define CPU_CM3_LM3S1968    0
00199     #endif
00200 
00201     #if defined (__ARM_LM3S8962__)
00202         #define CPU_CM3_LM3S        1
00203         #define CPU_CM3_LM3S8962    1
00204         #define CPU_NAME            "LM3S8962"
00205     #else
00206         #define CPU_CM3_LM3S8962    0
00207     #endif
00208 
00209     #if defined (__ARM_STM32F101C4__)
00210         #define CPU_CM3_STM32       1
00211         #define CPU_CM3_STM32F101C4 1
00212         #define CPU_NAME            "STM32F101C4"
00213     #else
00214         #define CPU_CM3_STM32F101C4 0
00215     #endif
00216 
00217     #if defined (__ARM_STM32F103RB__)
00218         #define CPU_CM3_STM32       1
00219         #define CPU_CM3_STM32F103RB 1
00220         #define CPU_NAME            "STM32F103RB"
00221     #else
00222         #define CPU_CM3_STM32F103RB 0
00223     #endif
00224 
00225     #if defined (__ARM_STM32F103RE__)
00226         #define CPU_CM3_STM32       1
00227         #define CPU_CM3_STM32F103RE 1
00228         #define CPU_NAME            "STM32F103RE"
00229     #else
00230         #define CPU_CM3_STM32F103RE 0
00231     #endif
00232 
00233     // AT91SAM3N products serie
00234     #if defined (__ARM_SAM3N4__)
00235         #define CPU_CM3_SAM3    1
00236         #define CPU_CM3_SAM3N   1
00237         #define CPU_CM3_SAM3N4  1
00238         #define CPU_NAME        "SAM3N4"
00239 
00240         #define CPU_CM3_SAM3S   0
00241         #define CPU_CM3_SAM3U   0
00242         #define CPU_CM3_SAM3N2  0
00243         #define CPU_CM3_SAM3N1  0
00244         #define CPU_CM3_SAM3X   0
00245     #else
00246         #define CPU_CM3_SAM3N4  0
00247     #endif
00248 
00249     // AT91SAM3S products serie
00250     #if defined (__ARM_SAM3S4__)
00251         #define CPU_CM3_SAM3    1
00252         #define CPU_CM3_SAM3S   1
00253         #define CPU_CM3_SAM3S4  1
00254         #define CPU_NAME        "SAM3S4"
00255 
00256         #define CPU_CM3_SAM3N   0
00257         #define CPU_CM3_SAM3U   0
00258         #define CPU_CM3_SAM3X   0
00259     #else
00260         #define CPU_CM3_SAM3S4  0
00261     #endif
00262 
00263     // AT91SAM3U products serie
00264     #if defined (__ARM_SAM3U4__)
00265         #define CPU_CM3_SAM3    1
00266         #define CPU_CM3_SAM3U   1
00267         #define CPU_CM3_SAM3U4  1
00268         #define CPU_NAME        "SAM3U4"
00269 
00270         #define CPU_CM3_SAM3N   0
00271         #define CPU_CM3_SAM3S   0
00272         #define CPU_CM3_SAM3X   0
00273     #else
00274         #define CPU_CM3_SAM3U4  0
00275     #endif
00276 
00277     // AT91SAM3X products serie
00278     #if defined (__ARM_SAM3X8__)
00279         #define CPU_CM3_SAM3    1
00280         #define CPU_CM3_SAM3X   1
00281         #define CPU_CM3_SAM3X8  1
00282         #define CPU_NAME        "SAM3X8"
00283 
00284         #define CPU_CM3_SAM3N   0
00285         #define CPU_CM3_SAM3S   0
00286         #define CPU_CM3_SAM3U   0
00287     #else
00288         #define CPU_CM3_SAM3X8  0
00289     #endif
00290 
00291     #if defined (CPU_CM3_LM3S)
00292         #if CPU_CM3_LM3S1968 + CPU_CM3_LM3S8962 + 0 != 1
00293             #error Luminary Cortex-M3 CPU configuration error
00294         #endif
00295         #define CPU_CM3_STM32       0
00296         #define CPU_CM3_SAM3        0
00297     #elif defined (CPU_CM3_STM32)
00298         #if CPU_CM3_STM32F101C4 + CPU_CM3_STM32F103RB + CPU_CM3_STM32F103RE + 0 != 1
00299             #error STM32 Cortex-M3 CPU configuration error
00300         #endif
00301         #define CPU_CM3_LM3S        0
00302         #define CPU_CM3_SAM3        0
00303     #elif defined (CPU_CM3_SAM3)
00304         #if CPU_CM3_SAM3N + CPU_CM3_SAM3U + CPU_CM3_SAM3S + CPU_CM3_SAM3X + 0 != 1
00305             #error SAM3 Cortex-M3 CPU configuration error
00306         #endif
00307         #if CPU_CM3_SAM3N4 + CPU_CM3_SAM3S4 + CPU_CM3_SAM3U4 + CPU_CM3_SAM3X8 + 0 != 1
00308             #error SAM3 Cortex-M3 CPU configuration error
00309         #endif
00310         #define CPU_CM3_LM3S        0
00311         #define CPU_CM3_STM32       0
00312     /* #elif Add other Cortex-M3 families here */
00313     #else
00314         #define CPU_CM3_LM3S        0
00315         #define CPU_CM3_STM32       0
00316         #define CPU_CM3_SAM3        0
00317     #endif
00318 
00319 
00320     #if CPU_CM3_LM3S + CPU_CM3_STM32 + CPU_CM3_SAM3 + 0 /* Add other Cortex-M3 families here */ != 1
00321         #error Cortex-M3 CPU configuration error
00322     #endif
00323 
00324 #else
00325     #define CPU_CM3 0
00326     #define CPU_CM3_LM3S 0
00327     #define CPU_CM3_LM3S1968 0
00328     #define CPU_CM3_LM3S8962 0
00329 
00330     #define CPU_CM3_STM32 0
00331     #define CPU_CM3_STM32F103RB 0
00332     #define CPU_CM3_STM32F101C4 0
00333     #define CPU_CM3_STM32F103RE 0
00334 
00335     #define CPU_CM3_SAM3 0
00336     #define CPU_CM3_SAM3N 0
00337     #define CPU_CM3_SAM3N4 0
00338     #define CPU_CM3_SAM3X 0
00339     #define CPU_CM3_SAM3X8 0
00340 #endif
00341 
00342 #if (defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)) \
00343     && !defined(__ICCARM__) /* IAR: if not ARM assume I196 */
00344     #warning Assuming CPU is I196
00345     #define CPU_I196        1
00346     #define CPU_ID                  i196
00347 #else
00348     #define CPU_I196                0
00349 #endif
00350 
00351 #if defined(__i386__) /* GCC */ \
00352     || (defined(_M_IX86) && !defined(_WIN64)) /* MSVC */
00353     #define CPU_X86                 1
00354     #define CPU_X86_32              1
00355     #define CPU_X86_64              0
00356     #define CPU_ID                  x86
00357     #define CPU_CORE_NAME           "x86"
00358     #define CPU_NAME                "generic"
00359 #elif defined(__x86_64__) /* GCC */ \
00360     || (defined(_M_IX86) && defined(_WIN64)) /* MSVC */
00361     #define CPU_X86                 1
00362     #define CPU_X86_32              0
00363     #define CPU_X86_64              1
00364     #define CPU_ID                  x86
00365     #define CPU_CORE_NAME           "x86_64"
00366     #define CPU_NAME                "generic"
00367 #else
00368     #define CPU_X86                 0
00369     #define CPU_I386                0
00370     #define CPU_X86_64              0
00371 #endif
00372 
00373 #if defined (_ARCH_PPC) || defined(_ARCH_PPC64)
00374     #define CPU_PPC                 1
00375     #define CPU_ID                  ppc
00376     #if defined(_ARCH_PPC)
00377         #define CPU_PPC32       1
00378     #else
00379             #define CPU_PPC32       0
00380     #endif
00381     #if defined(_ARCH_PPC64)
00382         #define CPU_PPC64       1
00383     #else
00384             #define CPU_PPC64       0
00385     #endif
00386 #else
00387     #define CPU_PPC                 0
00388     #define CPU_PPC32               0
00389     #define CPU_PPC64               0
00390 #endif
00391 
00392 #if defined(__m56800E__) || defined(__m56800__)
00393     #define CPU_DSP56K              1
00394     #define CPU_ID                  dsp56k
00395 #else
00396     #define CPU_DSP56K              0
00397 #endif
00398 
00399 #if defined (__AVR__)
00400     #define CPU_AVR                 1
00401     #define CPU_ID                  avr
00402     #define CPU_CORE_NAME           "AVR"
00403 
00404     #if defined(__AVR_ATmega32__)
00405         #define CPU_AVR_MEGA        1
00406         #define CPU_AVR_ATMEGA32    1
00407         #define CPU_NAME            "ATmega32"
00408     #else
00409         #define CPU_AVR_ATMEGA32    0
00410     #endif
00411 
00412     #if defined(__AVR_ATmega64__)
00413         #define CPU_AVR_MEGA        1
00414         #define CPU_AVR_ATMEGA64    1
00415         #define CPU_NAME            "ATmega64"
00416     #else
00417         #define CPU_AVR_ATMEGA64    0
00418     #endif
00419 
00420     #if defined(__AVR_ATmega103__)
00421         #define CPU_AVR_MEGA        1
00422         #define CPU_AVR_ATMEGA103   1
00423         #define CPU_NAME            "ATmega103"
00424     #else
00425         #define CPU_AVR_ATMEGA103   0
00426     #endif
00427 
00428     #if defined(__AVR_ATmega128__)
00429         #define CPU_AVR_MEGA        1
00430         #define CPU_AVR_ATMEGA128   1
00431         #define CPU_NAME            "ATmega128"
00432     #else
00433         #define CPU_AVR_ATMEGA128   0
00434     #endif
00435 
00436     #if defined(__AVR_ATmega8__)
00437         #define CPU_AVR_MEGA        1
00438         #define CPU_AVR_ATMEGA8     1
00439         #define CPU_NAME            "ATmega8"
00440     #else
00441         #define CPU_AVR_ATMEGA8     0
00442     #endif
00443 
00444     #if defined(__AVR_ATmega168__)
00445         #define CPU_AVR_MEGA        1
00446         #define CPU_AVR_ATMEGA168   1
00447         #define CPU_NAME            "ATmega168"
00448     #else
00449         #define CPU_AVR_ATMEGA168   0
00450     #endif
00451 
00452     #if defined(__AVR_ATmega328P__)
00453         #define CPU_AVR_MEGA        1
00454         #define CPU_AVR_ATMEGA328P   1
00455         #define CPU_NAME            "ATmega328P"
00456     #else
00457         #define CPU_AVR_ATMEGA328P   0
00458     #endif
00459 
00460     #if defined(__AVR_ATmega1281__)
00461         #define CPU_AVR_MEGA        1
00462         #define CPU_AVR_ATMEGA1281  1
00463         #define CPU_NAME            "ATmega1281"
00464     #else
00465         #define CPU_AVR_ATMEGA1281  0
00466     #endif
00467 
00468     #if defined(__AVR_ATmega1280__)
00469         #define CPU_AVR_MEGA        1
00470         #define CPU_AVR_ATMEGA1280  1
00471         #define CPU_NAME            "ATmega1280"
00472     #else
00473         #define CPU_AVR_ATMEGA1280  0
00474     #endif
00475 
00476     #if defined(__AVR_ATmega2560__)
00477         #define CPU_AVR_MEGA        1
00478         #define CPU_AVR_ATMEGA2560  1
00479         #define CPU_NAME            "ATmega2560"
00480     #else
00481         #define CPU_AVR_ATMEGA2560  0
00482     #endif
00483 
00484     #if defined(__AVR_ATxmega32D4__)
00485         #define CPU_AVR_XMEGA       1
00486         #define CPU_AVR_XMEGA_D     1
00487         #define CPU_AVR_ATXMEGA32D4 1
00488         #define CPU_NAME            "ATxmega32d4"
00489     #else
00490         #define CPU_AVR_ATXMEGA32D4 0
00491     #endif
00492 
00493     #if CPU_AVR_ATMEGA32 + CPU_AVR_ATMEGA64 + CPU_AVR_ATMEGA103 + CPU_AVR_ATMEGA128 \
00494       + CPU_AVR_ATMEGA8 + CPU_AVR_ATMEGA168 + CPU_AVR_ATMEGA328P + CPU_AVR_ATMEGA1281 \
00495       + CPU_AVR_ATMEGA1280 + CPU_AVR_ATMEGA2560 + CPU_AVR_ATXMEGA32D4 != 1
00496         #error AVR CPU configuration error
00497     #endif
00498 
00499     #if defined(CPU_AVR_XMEGA) && defined(CPU_AVR_MEGA)
00500         #error CPU cannot be MEGA and XMEGA
00501     #elif defined(CPU_AVR_MEGA)
00502         #define CPU_AVR_XMEGA       0
00503     #elif defined(CPU_AVR_XMEGA)
00504         #define CPU_AVR_MEGA        0
00505     #endif
00506 
00507     #if CPU_AVR_MEGA + CPU_AVR_XMEGA != 1
00508         #error AVR CPU configuration error
00509     #endif
00510 
00511 #else
00512     #define CPU_AVR                 0
00513     #define CPU_AVR_MEGA            0
00514     #define CPU_AVR_ATMEGA8         0
00515     #define CPU_AVR_ATMEGA168       0
00516     #define CPU_AVR_ATMEGA328P      0
00517     #define CPU_AVR_ATMEGA32        0
00518     #define CPU_AVR_ATMEGA64        0
00519     #define CPU_AVR_ATMEGA103       0
00520     #define CPU_AVR_ATMEGA128       0
00521     #define CPU_AVR_ATMEGA1281      0
00522     #define CPU_AVR_ATMEGA1280      0
00523     #define CPU_AVR_ATMEGA2560      0
00524     #define CPU_AVR_XMEGA           0
00525     #define CPU_AVR_XMEGA_D         0
00526 #endif
00527 
00528 #if defined (__MSP430__)
00529     #define CPU_MSP430              1
00530     #define CPU_ID                  msp430
00531     #define CPU_CORE_NAME           "MSP430"
00532 
00533     #if defined(__MSP430F2274__)
00534         #define CPU_MSP430F2274     1
00535         #define CPU_NAME            "MSP430F2274"
00536     #else
00537         #define CPU_MSP430F2274     0
00538     #endif
00539 
00540     #if defined(__MSP430G2231__)
00541         #define CPU_MSP430G2231     1
00542         #define CPU_NAME            "MSP430G2231"
00543     #else
00544         #define CPU_MSP430G2231     0
00545     #endif
00546 
00547     #if CPU_MSP430F2274 + CPU_MSP430G2231 != 1
00548         #error MSP430 CPU configuration error
00549     #endif
00550 #else
00551     #define CPU_MSP430                  0
00552     #define CPU_MSP430F2274             0
00553     #define CPU_MSP430G2231             0
00554 #endif
00555 
00556 
00557 /* Self-check for the detection: only one CPU must be detected */
00558 #if CPU_ARM + CPU_CM3 + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR + CPU_MSP430 == 0
00559     #error Unknown CPU
00560 #elif !defined(CPU_ID)
00561     #error CPU_ID not defined
00562 #elif CPU_ARM + CPU_CM3 + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR + CPU_MSP430 != 1
00563     #error Internal CPU configuration error
00564 #endif
00565 
00566 
00567 #endif /* CPU_DETECT_H */