Go to the documentation of this file.00001
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #ifndef _COMPILER_H_
00046 #define _COMPILER_H_
00047
00048
00049
00050
00051 #define LITTLE_ENDIAN
00052
00053 #ifndef ASM_INCLUDE // define ASM_INCLUDE in your a51 source code before include of .h file
00054 typedef float Float16;
00055
00056 typedef unsigned char U8 ;
00057 typedef unsigned short U16;
00058 typedef unsigned long U32;
00059 typedef signed char S8 ;
00060 typedef signed short S16;
00061 typedef long S32;
00062 typedef unsigned char Bool;
00063
00064
00065 typedef U8 Status;
00066 typedef Bool Status_bool;
00067 #define bool Bool
00068 #define PASS 0
00069 #define FAIL 1
00070
00071
00072
00073 #if (defined __C51__)
00074 # define _MEM_TYPE_BIT_ bdata // Used for bit accesses
00075 # define _MEM_TYPE_FAST_ data
00076 # define _MEM_TYPE_MEDFAST_ idata
00077 # define _MEM_TYPE_MEDSLOW_ pdata
00078 # define _MEM_TYPE_SLOW_ xdata
00079 #else
00080 # define _MEM_TYPE_BIT_
00081 # define _MEM_TYPE_FAST_
00082 # define _MEM_TYPE_MEDFAST_
00083 # define _MEM_TYPE_MEDSLOW_
00084 # define _MEM_TYPE_SLOW_
00085 #endif
00086
00087 typedef unsigned char Uchar;
00088
00089
00090 typedef unsigned char Uint8;
00091 typedef unsigned int Uint16;
00092 typedef unsigned long int Uint32;
00093
00094 typedef char Int8;
00095 typedef int Int16;
00096 typedef long int Int32;
00097
00098 typedef unsigned char Byte;
00099 typedef unsigned int Word;
00100 typedef unsigned long int DWord;
00101
00102 typedef union
00103 {
00104 Uint32 dw;
00105 Uint16 w[2];
00106 Uint8 b[4];
00107 } Union32;
00108
00109 typedef union
00110 {
00111 Uint16 w;
00112 Uint8 b[2];
00113 } Union16;
00114
00115 #ifdef __IAR_SYSTEMS_ICC__
00116 typedef char bit;
00117 typedef int p_uart_ptchar;
00118 typedef int r_uart_ptchar;
00119 #endif
00120 #ifdef __CODEVISIONAVR__
00121 typedef char bit;
00122 typedef int p_uart_ptchar;
00123 typedef char r_uart_ptchar;
00124 #endif
00125 #if !defined(__IAR_SYSTEMS_ICC__) && !defined(___ICC__)
00126 typedef char p_uart_ptchar;
00127 typedef char r_uart_ptchar;
00128 #endif
00129
00130 #endif
00131
00132
00133
00134
00135 #ifdef __ICC__
00136 #define _ConstType_ lit
00137 #define _MemType_
00138 #define _GenericType_ __generic
00139 #define code lit
00140 #define xdata
00141 #define idata
00142 #define data
00143 #endif
00144
00145
00146
00147 #ifdef __IAR_SYSTEMS_ICC__
00148 #include "inavr.h"
00149 #define _ConstType_ __flash
00150 #define _MemType_
00151 #define _GenericType_ __generic
00152 #define code __flash
00153 #define farcode __flash
00154 #define xdata
00155 #define idata
00156 #define data
00157 #define At(x) @ x
00158 #define pdata
00159 #define bdata
00160
00161 #ifndef _CONST_TYPE_
00162 # define _CONST_TYPE_ code
00163 #endif
00164
00165 #define Enable_interrupt() __enable_interrupt()
00166 #define Disable_interrupt() __disable_interrupt()
00167 #define Get_interrupt_state() (SREG&0x80)
00168
00169 #include <iomacro.h>
00170 #define SFR_W_EXT(a,b) SFR_W_R(b,a)
00171 #endif
00172
00173
00174
00175
00176
00177
00178
00179 #define INTEL_ALIGNMENT LITTLE_ENDIAN
00180 #define MOTOROLA_ALIGNMENT BIG_ENDIAN
00181
00182
00183 #ifdef LITTLE_ENDIAN // => 16bit: (LSB,MSB), 32bit: (LSW,MSW) or (LSB0,LSB1,LSB2,LSB3) or (MSB3,MSB2,MSB1,MSB0)
00184 # define MSB(u16) (((U8* )&u16)[1])
00185 # define LSB(u16) (((U8* )&u16)[0])
00186 # define MSW(u32) (((U16*)&u32)[1])
00187 # define LSW(u32) (((U16*)&u32)[0])
00188 # define MSB0(u32) (((U8* )&u32)[3])
00189 # define MSB1(u32) (((U8* )&u32)[2])
00190 # define MSB2(u32) (((U8* )&u32)[1])
00191 # define MSB3(u32) (((U8* )&u32)[0])
00192 # define LSB0(u32) MSB3(u32)
00193 # define LSB1(u32) MSB2(u32)
00194 # define LSB2(u32) MSB1(u32)
00195 # define LSB3(u32) MSB0(u32)
00196 #else // BIG_ENDIAN => 16bit: (MSB,LSB), 32bit: (MSW,LSW) or (LSB3,LSB2,LSB1,LSB0) or (MSB0,MSB1,MSB2,MSB3)
00197 # define MSB(u16) (((U8* )&u16)[0])
00198 # define LSB(u16) (((U8* )&u16)[1])
00199 # define MSW(u32) (((U16*)&u32)[0])
00200 # define LSW(u32) (((U16*)&u32)[1])
00201 # define MSB0(u32) (((U8* )&u32)[0])
00202 # define MSB1(u32) (((U8* )&u32)[1])
00203 # define MSB2(u32) (((U8* )&u32)[2])
00204 # define MSB3(u32) (((U8* )&u32)[3])
00205 # define LSB0(u32) MSB3(u32)
00206 # define LSB1(u32) MSB2(u32)
00207 # define LSB2(u32) MSB1(u32)
00208 # define LSB3(u32) MSB0(u32)
00209 #endif
00210
00211
00212 #define Le16(b) \
00213 ( ((U16)( (b) & 0xFF) << 8) \
00214 | ( ((U16)(b) & 0xFF00) >> 8) \
00215 )
00216 #define Le32(b) \
00217 ( ((U32)( (b) & 0xFF) << 24) \
00218 | ((U32)((U16)(b) & 0xFF00) << 8) \
00219 | ( ((U32)(b) & 0xFF0000) >> 8) \
00220 | ( ((U32)(b) & 0xFF000000) >> 24) \
00221 )
00222
00223
00224
00225
00226
00227 #ifdef LITTLE_ENDIAN
00228 # define htons(a) Le16(a)
00229 #define ntohs(a) htons(a)
00230 # define htonl(a) Le32(a)
00231 #define ntohl(a) htonl(a)
00232 #else
00233 #define htons(a) (a)
00234 #define ntohs(a) (a)
00235 #define htonl(a) (a)
00236 #define ntohl(a) (a)
00237 #endif
00238
00239
00240
00241 #define ENABLE 1
00242 #define ENABLED 1
00243 #define DISABLED 0
00244 #define DISABLE 0
00245 #define FALSE (0==1)
00246 #define TRUE (1==1)
00247 #define true TRUE
00248 #define false FALSE
00249
00250
00251 #define KO 0
00252 #define OK 1
00253 #define OFF 0
00254 #define ON 1
00255 #ifndef NULL
00256 #define NULL 0
00257 #endif
00258 #ifndef ASM_INCLUDE // define ASM_INCLUDE in your a51 source code before include of .h file
00259 #define CLR 0
00260 #define SET 1
00261 #endif
00262
00263
00264 #define LOW(U16) ((Uchar)U16)
00265 #define HIGH(U16) ((Uchar)(U16>>8))
00266 #define TST_BIT_X(addrx,mask) (*addrx & mask)
00267 #define SET_BIT_X(addrx,mask) (*addrx = (*addrx | mask))
00268 #define CLR_BIT_X(addrx,mask) (*addrx = (*addrx & ~mask))
00269 #define OUT_X(addrx,value) (*addrx = value)
00270 #define IN_X(addrx) (*addrx)
00271
00272 # define Max(a, b) ( (a)>(b) ? (a) : (b) ) // Take the max between a and b
00273 # define Min(a, b) ( (a)<(b) ? (a) : (b) ) // Take the min between a and b
00274
00275
00276
00277
00278
00279
00280
00281
00282 # define Upper(val, n) ( ((val)+(n)) & ~((n)-1) )
00283
00284
00285
00286
00287
00288
00289
00290
00291 # define Align_up(val, n) ( ((val)+(n)-1) & ~((n)-1) )
00292
00293
00294
00295
00296
00297
00298
00299
00300 # define Align_down(val, n) ( (val) & ~((n)-1) )
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317 #define Long_call(addr) ((*(void (_ConstType_*)(void))(addr))())
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329 #define SET_SFR_BIT(sfr_reg, bit_pos, bit_val) { sfr_reg &= ~(1<<(bit_pos)); sfr_reg |= ((bit_val)<<(bit_pos));}
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339 #define bit_is_clear(PORT,POSITION) ((PORT & (1<<POSITION)) == 0 )
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349 #define bit_is_set(PORT,POSITION) ((PORT & (1<<POSITION)) != 0 )
00350
00351
00352
00353
00354
00355 #define TID_GUARD(proc) ((__TID__ & 0x7FF0) != ((90 << 8) | ((proc) << 4)))
00356
00357
00358
00359
00360
00361
00362 #ifdef __GNUC__
00363 #define _CONST_TYPE_
00364 #define _ConstType_ __flash
00365 #define _MemType_
00366 #define _GenericType_ __generic
00367 #define code PROGMEM
00368 #define xdata
00369 #define idata
00370 #define data
00371 #define At(x) @ x
00372 #define pdata
00373 #define bdata
00374 #define bit U8
00375 #include <avr/interrupt.h>
00376 #include <avr/pgmspace.h>
00377 #define Enable_interrupt() sei()
00378 #define Disable_interrupt() cli()
00379 #define Get_interrupt_state() (SREG&0x80)
00380
00381 #endif
00382 #endif
00383