00001
00002
00003
00004
00005
00006
00007 #ifndef UTILITIES
00008 #define UTILITIES
00009
00010 #include "processor.h"
00011
00012
00013 #ifdef CCS2
00014 #if ( (defined(I_AM_MASTER_DSP))||((defined(REV_B))||(defined(REV_C))) )
00015 #define delta_t(t0_) ((TIMER_getCount(timer1) - (t0_)) / 4)
00016
00017 #define delay(x) { \
00018 UINT32 delay_t0; \
00019 delay_t0 = TIMER_getCount(timer1); \
00020 while( ((TIMER_getCount(timer1) - delay_t0) / 4) < (x)); \
00021 }
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #elif (defined(REV_E))
00033
00034 static inline UINT32 delta_t(UINT32 t0);
00035 static inline void delay(UINT32 x);
00036
00037 static inline UINT32 delta_t(UINT32 t0) {
00038 UINT32 t1, p1;
00039 t1= *((UINT32 *) 0x01980008);
00040 p1= *((UINT32 *) 0x01980004);
00041
00042 if (t1 < t0) return ((t1 -t0 +p1)/5);
00043 else return ((t1 -t0)/5);
00044 }
00045
00046
00047 static inline void delay(UINT32 x) {
00048 UINT32 t0, t1, delta, p1;
00049 t0= *((UINT32 *) 0x01980008);
00050 p1= *((UINT32 *) 0x01980004);
00051
00052 do {
00053 t1= *((UINT32 *) 0x01980008);
00054 if (t1 < t0) delta= ((t1 -t0 +p1)/5);
00055 else delta= ((t1 -t0)/5);
00056 } while (delta < x);
00057 }
00058
00059 #endif
00060
00061
00062
00063 #else
00064 #define delta_t(t0_) ((TIMER_GetCount(timer1) - (t0_)) / 4)
00065
00066
00067
00068 #define delay(x) { \
00069 UINT32 delay_t0; \
00070 delay_t0 = TIMER_GetCount(timer1); \
00071 while( ((TIMER_GetCount(timer1) - delay_t0) / 4) < (x)); \
00072 }
00073 #endif
00074
00075
00076 #if defined(I_AM_MASTER_DSP)
00077 #define yellowLed_on (*((UINT32 *) 0x018c0024)|= 1);
00078 #define greenLed_on (*((UINT32 *) 0x01900024)|= 1);
00079 #define redLed_on (*((UINT32 *) 0x018c0024)|= 4);
00080
00081 #define yellowLed_off (*((UINT32 *) 0x018c0024)&= ~1);
00082 #define greenLed_off (*((UINT32 *) 0x01900024)&= ~1);
00083 #define redLed_off (*((UINT32 *) 0x018c0024)&= ~4);
00084
00085 #define yellowLed_toggle (*((UINT32 *) 0x018c0024)^= 1);
00086 #define greenLed_toggle (*((UINT32 *) 0x01900024)^= 1);
00087 #define redLed_toggle (*((UINT32 *) 0x018c0024)^= 4);
00088
00089 #elif defined(I_AM_SLAVE_DSP)
00090 #define fsrp0_on (*((UINT32 *) 0x018c0024)|= 4);
00091 #define fsxp0_on (*((UINT32 *) 0x018c0024)|= 8);
00092
00093 #define fsrp0_off (*((UINT32 *) 0x018c0024)&= ~4);
00094 #define fsxp0_off (*((UINT32 *) 0x018c0024)&= ~8);
00095
00096 #define fsrp0_toggle (*((UINT32 *) 0x018c0024)^= 4);
00097 #define fsxp0_toggle (*((UINT32 *) 0x018c0024)^= 8);
00098
00099
00100
00101
00102 #if (defined(REV_B)||defined(REV_C)||defined(SIM))
00103 #define yellowLed_on (*((UINT32 *) 0x01900024)&= ~2);
00104 #define yellowLed_off (*((UINT32 *) 0x01900024)|= 2);
00105 #define yellowLed_toggle (*((UINT32 *) 0x01900024)^= 2);
00106 #elif (defined(REV_E))
00107 #define yellowLed_on (*((UINT32 *) 0x01b00008)&= ~0x80);
00108 #define yellowLed_off (*((UINT32 *) 0x01b00008)|= 0x80);
00109 #define yellowLed_toggle (*((UINT32 *) 0x01b00008)^= 0x80);
00110 #endif
00111 #endif
00112
00113
00114 #define BYTE_W 8
00115 #define HWORD_W 16
00116 #define WORD_W 32
00117
00118
00119 #define DEFAULT (0xFFFFFFFF)
00120
00121
00122 #define MINI(x,y,z) z=((x)<(y))?(x):(y);
00123
00124
00125 #define N_BIT_MASK(wid) (~(0xFFFFFFFF<<(wid)))
00126 #define FIELD_MASK(bit,wid) (N_BIT_MASK(wid) << (bit))
00127 #define FIELD_OFF(bit,wid) (~(FIELD_MASK(bit,wid)))
00128 #define FIELD_VAL(bit,wid,val) ((val&(N_BIT_MASK(wid))) << bit)
00129
00130 #define SET_VBIT(var,bit) (var |= (1 << bit))
00131 #define RST_VBIT(var,bit) (var &= ~(1 << bit))
00132 #define ASGN_VBIT(var,bit,val) (var = ((RST_VBIT(var,bit)) | (val<<bit)))
00133 #define GET_VBIT(var,bit) ((var >> bit) & 1)
00134 #define RST_VFLD(var,bit,wid) (var &= (FIELD_OFF(bit,wid)))
00135 #define ASGN_VFLD(var,bit,wid,val) \
00136 (var = (RST_VFLD(var,bit,wid)) | (FIELD_VAL(bit,wid,val)))
00137 #define GET_VFLD(var,bit,wid) ((FIELD_MASK(bit,wid) & var) >> bit)
00138
00139
00140
00141
00142
00143 #define CONTENTS(adr) (*((volatile UINT32 *)(adr)))
00144
00145 #define READ_REG(adr) (CONTENTS(adr))
00146 #define WRITE_REG(adr,val) (CONTENTS(adr) = (val))
00147 #define SET_RBIT(adr,bit) (CONTENTS(adr) |= (1 << (bit)))
00148 #define RST_RBIT(adr,bit) (CONTENTS(adr) &= (~(1 << (bit))))
00149 #define ASGN_RBIT(adr,bit,val) (CONTENTS(adr) = (RST_RBIT(adr,bit)) | (val<<bit))
00150 #define GET_RBIT(adr,bit) ((CONTENTS(adr) >> bit) & 1)
00151 #define RST_RFLD(adr,bit,wid) (CONTENTS(adr) &= (FIELD_OFF(bit,wid)))
00152 #define GET_RFLD(adr,bit,wid) ((CONTENTS(adr) & FIELD_MASK(bit,wid)) >> bit)
00153 #define ASGN_RFLD(adr,bit,wid,val) (CONTENTS(adr) = \
00154 (RST_RFLD(adr,bit,wid)) | (FIELD_VAL(bit,wid,val)))
00155
00156
00157 #define CONTEXT_NULL 0
00158 #define CONTEXT_TASK 1
00159 #define CONTEXT_PRIM 2
00160 #define CONTEXT_ALL 3
00161
00162
00163
00164
00165
00166
00167
00168
00169 #endif