BeRTOS
|
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 */