attr.h
Go to the documentation of this file.00001
00040 #ifndef CPU_ATTR_H
00041 #define CPU_ATTR_H
00042
00043 #include "detect.h"
00044
00045 #include "cfg/cfg_proc.h"
00046 #include "cfg/cfg_attr.h"
00047
00048
00053 #define CPU_BIG_ENDIAN 0x1234
00054 #define CPU_LITTLE_ENDIAN 0x3412
00055
00056
00058 #define CPU_HEADER(module) PP_STRINGIZE(drv/PP_CAT3(module, _, CPU_ID).h)
00059
00061 #define CPU_CSOURCE(module) PP_STRINGIZE(drv/PP_CAT3(module, _, CPU_ID).c)
00062
00063
00064 #if CPU_I196
00065
00066 #define NOP nop_instruction()
00067
00068 #define CPU_REG_BITS 16
00069 #define CPU_REGS_CNT 16
00070 #define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN
00071 #define CPU_HARVARD 0
00072
00074 #define CPU_RAM_START 0x100
00075
00076 #elif CPU_X86
00077
00078 #define CPU_REGS_CNT 7
00079 #define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN
00080 #define CPU_HARVARD 0
00081
00082 #if CPU_X86_64
00083 #define CPU_REG_BITS 64
00084
00085 #ifdef __WIN64__
00086
00087 #define SIZEOF_LONG 4
00088 #endif
00089 #else
00090 #define CPU_REG_BITS 32
00091 #endif
00092
00094 #define CPU_RAM_START 0x1000
00095
00096 #ifdef __GNUC__
00097 #define NOP asm volatile ("nop")
00098
00099 #define PAUSE asm volatile ("rep; nop" ::: "memory")
00100 #define BREAKPOINT asm volatile ("int3" ::)
00101 #endif
00102
00103 #elif CPU_ARM
00104
00105 #define CPU_REG_BITS 32
00106 #define CPU_REGS_CNT 16
00107 #define CPU_HARVARD 0
00108
00110 #if CPU_ARM_AT91
00111 #define CPU_RAM_START 0x00200000
00112 #elif CPU_ARM_LPC2
00113 #define CPU_RAM_START 0x40000000
00114 #else
00115 #warning Fix CPU_RAM_START address for your ARM, default value set to 0x200
00116 #define CPU_RAM_START 0x200
00117 #endif
00118
00119 #ifdef __IAR_SYSTEMS_ICC__
00120 #warning Check CPU_BYTE_ORDER
00121 #define CPU_BYTE_ORDER (__BIG_ENDIAN__ ? CPU_BIG_ENDIAN : CPU_LITTLE_ENDIAN)
00122
00123 #define NOP __no_operation()
00124
00125 #else
00126
00127 #if defined(__ARMEB__)
00128 #define CPU_BYTE_ORDER CPU_BIG_ENDIAN
00129 #elif defined(__ARMEL__)
00130 #define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN
00131 #else
00132 #error Unable to detect ARM endianness!
00133 #endif
00134
00135 #define NOP asm volatile ("mov r0,r0" ::)
00136 #define BREAKPOINT
00137
00138 #if CONFIG_FAST_MEM
00139
00147 #define FAST_FUNC __attribute__((section(".ramfunc")))
00148
00154 #define FAST_RODATA __attribute__((section(".data")))
00155
00156 #else // !CONFIG_FAST_MEM
00157 #define FAST_RODATA
00158 #define FAST_FUNC
00159 #endif
00160
00161
00162
00163
00164 #define RAM_FUNC __attribute__((section(".ramfunc")))
00165
00166 #endif
00167 #elif CPU_CM3
00168
00169 #define CPU_REG_BITS 32
00170 #define CPU_REGS_CNT 16
00171 #define CPU_HARVARD 0
00172
00174 #if (CPU_CM3_LM3S1968 || CPU_CM3_LM3S8962 || CPU_CM3_STM32 || CPU_CM3_SAM3)
00175 #define CPU_RAM_START 0x20000000
00176 #else
00177 #warning Fix CPU_RAM_START address for your Cortex-M3, default value set to 0x20000000
00178 #define CPU_RAM_START 0x20000000
00179 #endif
00180
00181 #if defined( __ICCARM__)
00182 #if ((defined __LITTLE_ENDIAN__) && (__LITTLE_ENDIAN__ == 0))
00183 #define CPU_BYTE_ORDER CPU_BIG_ENDIAN
00184 #elif ((defined __LITTLE_ENDIAN__) && (__LITTLE_ENDIAN__ == 1))
00185 #define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN
00186 #else
00187 #error Unable to detect Cortex-M3 endianess!
00188 #endif
00189
00190 #define NOP __no_operation()
00191 #else
00192 #if defined(__ARMEB__) // GCC
00193 #define CPU_BYTE_ORDER CPU_BIG_ENDIAN
00194 #elif defined(__ARMEL__) // GCC
00195 #define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN
00196 #else
00197 #error Unable to detect Cortex-M3 endianess!
00198 #endif
00199
00200 #define NOP asm volatile ("nop")
00201 #define PAUSE asm volatile ("wfi" ::: "memory")
00202 #define BREAKPOINT
00203
00204
00205
00206
00207 #define RAM_FUNC __attribute__((section(".ramfunc")))
00208 #endif
00209
00210 #elif CPU_PPC
00211
00212 #define CPU_REG_BITS (CPU_PPC32 ? 32 : 64)
00213 #define CPU_REGS_CNT FIXME
00214 #define CPU_BYTE_ORDER (__BIG_ENDIAN__ ? CPU_BIG_ENDIAN : CPU_LITTLE_ENDIAN)
00215 #define CPU_HARVARD 0
00216
00218 #define CPU_RAM_START 0x1000
00219
00220 #ifdef __GNUC__
00221 #define NOP asm volatile ("nop" ::)
00222 #define BREAKPOINT asm volatile ("twge 2,2" ::)
00223 #endif
00224
00225 #elif CPU_DSP56K
00226
00227 #define CPU_REG_BITS 16
00228 #define CPU_REGS_CNT FIXME
00229 #define CPU_BYTE_ORDER CPU_BIG_ENDIAN
00230 #define CPU_HARVARD 1
00231
00232
00233 #define CPU_BITS_PER_CHAR 16
00234 #define SIZEOF_SHORT 1
00235 #define SIZEOF_INT 1
00236 #define SIZEOF_LONG 2
00237 #define SIZEOF_PTR 1
00238
00240 #define CPU_RAM_START 0x200
00241
00242 #define NOP asm(nop)
00243 #define BREAKPOINT asm(debug)
00244
00245 #elif CPU_AVR
00246
00247 #define NOP asm volatile ("nop" ::)
00248
00249 #define CPU_REG_BITS 8
00250 #define CPU_REGS_CNT 33
00251 #define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN
00252 #define CPU_HARVARD 1
00253
00255 #if CPU_AVR_ATMEGA8 || CPU_AVR_ATMEGA32 || CPU_AVR_ATMEGA103
00256 #define CPU_RAM_START 0x60
00257 #elif CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128 || CPU_AVR_ATMEGA168 || CPU_AVR_ATMEGA328P
00258 #define CPU_RAM_START 0x100
00259 #elif CPU_AVR_ATMEGA1281 || CPU_AVR_ATMEGA1280 || CPU_AVR_ATMEGA2560
00260 #define CPU_RAM_START 0x200
00261 #elif CPU_AVR_XMEGA_D
00262 #define CPU_RAM_START 0x2000
00263 #else
00264 #warning Fix CPU_RAM_START address for your AVR, default value set to 0x100
00265 #define CPU_RAM_START 0x100
00266 #endif
00267
00268 #elif CPU_MSP430
00269
00270 #define CPU_REG_BITS 16
00271 #define CPU_REGS_CNT 12
00272 #define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN
00273 #define CPU_HARVARD 0
00274
00276 #define CPU_RAM_START 0x200
00277
00278 #define NOP __asm__ __volatile__ ("nop")
00279
00280 #else
00281 #error No CPU_... defined.
00282 #endif
00283
00284 #ifndef BREAKPOINT
00285 #define BREAKPOINT
00286 #endif
00287
00288 #ifndef FAST_FUNC
00289
00290 #define FAST_FUNC
00291 #endif
00292
00293 #ifndef FAST_RODATA
00294
00295 #define FAST_RODATA
00296 #endif
00297
00298 #ifndef PAUSE
00299
00300 #define PAUSE do {NOP; MEMORY_BARRIER;} while (0)
00301 #endif
00302
00303 #endif