00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00031
00032
00033
00034
00035 #ifndef DATASTORAGE_H
00036 #define DATASTORAGE_H
00037
00038 #define N 0
00039 #define N1 1
00040 #define N2 2
00041
00042 #define DECLARE_DATA(varName) volatile data varName = {0,0}
00043 #define DECLARE_DATA3(varName) volatile data3 varName = {0,0,0}
00044 #define DECLARE_SQDDATA(varName) volatile struct sqddata varName = {0,0}
00045 #define DECLARE_QDDATA(varName) volatile struct qddata varName = {0,0,0,0}
00046 #define DECLARE_QDDATA3(varName) volatile struct qddata3 varName = {0,0,0,0,0,0}
00047
00048
00049
00050
00051
00052 #include "DSP2833x_Device.h"
00053 #include "IQConstants.h"
00054
00055
00056
00057
00058
00059
00060 typedef _iq data[2];
00061 typedef _iq data3[3];
00062
00063
00064 struct sqddata {_iq q,d;};
00065 struct qddata { data q,d;};
00066 struct qddata3 { data3 q,d;};
00067
00068
00069
00070
00072 #define INIT_QD(z) z.q=_IQ(0.0); z.d=_IQ(0.0)
00073
00074 #define INIT_DATA(z) z[N]=0.0; z[N1]=0.0
00075
00076 #define INIT_DATA3(z) z[N]=0.0; z[N1]=0.0; z[N2]=0.0
00077
00078 #define INIT_QDDATA(z) INIT_DATA(z.q); INIT_DATA(z.d)
00079
00080 #define INIT_QDDATA3(z) INIT_DATA3(z.q); INIT_DATA3(z.d)
00081
00082 #define UPDATE_STATE(v) v[N1]=v[N]
00083
00084 #define UPDATE_STATE3(v) v[N2]=v[N1]; v[N1]=v[N]
00085
00086 #define UPDATEQD_STATE(vqd) UPDATE_STATE(vqd.q);UPDATE_STATE(vqd.d)
00087
00088 #define UPDATEQD_STATE3(vqd) UPDATE_STATE3(vqd.q);UPDATE_STATE3(vqd.d)
00089
00090
00092 #define XINTF_SIZE 0x01F400// 0x00FC00 // 0x20000 (128K)
00093
00095 #define ROM_SIZE 0x3ff80
00096
00097 typedef enum {
00098 OVERWRITE,
00099 NOVERWRITE
00100 } STORAGEMODE;
00101
00102 #undef MEM_STORAGE_DEFINED
00103
00104
00105 #ifdef USE_XINTF
00106 #undef USE_FLASH
00107 #define BUFSIZE XINTF_SIZE
00108 #define MEM_STORAGE_DEFINED
00109 #endif
00110
00111
00112 #ifdef USE_FLASH
00113 #undef USE_XINTF
00114 #define BUFSIZE ROM_SIZE
00115 #define MEM_STORAGE_DEFINED
00116 #endif
00117
00118
00119
00120
00121
00122 #ifdef MEM_STORAGE_DEFINED
00123
00124 extern Uint16 dataStorageBuffer[BUFSIZE];
00125 extern Uint16* dataPtr;
00126 extern Uint16* begin;
00127 extern Uint16* end;
00128 extern Uint32* actualPos;
00129
00130 extern Uint16 clearDataStorage;
00131 extern STORAGEMODE storageMode;
00132
00133
00134
00135
00136
00137
00142
00143 extern void InitDataStorageBuffer(STORAGEMODE mode);
00144
00145
00146
00149
00150 static inline void WriteData(volatile Uint16 *data);
00151
00152
00155
00156 static inline void WriteIQData(volatile _iq *data);
00157
00158
00162
00163 static inline void ReadData(Uint16* data,Uint32 pos);
00164
00165
00167
00168 static inline void ReinitDataStorageBuffer(void);
00169
00170
00173
00174 static inline void WriteFloatData(volatile float *data);
00175
00176
00177
00178 static inline void WriteFloatData(volatile float *data)
00179 {
00180
00181 Uint32 NumFinal = 0;
00182 Uint16 *ptr = (Uint16 *)data;
00183
00184 NumFinal=NumFinal|((Uint32)(*(ptr+1))&0xFFFF)<<16;
00185 NumFinal=NumFinal|((Uint32)(*(ptr))&0xFFFF);
00186
00187
00188 if(dataPtr>=end-2 && storageMode == NOVERWRITE)
00189 return;
00190 if(dataPtr>=end-2 && storageMode == OVERWRITE)
00191 dataPtr=begin;
00192
00193 *dataPtr++ = (Uint16) (((NumFinal) & 0xFFFF0000) >> 16);
00194 *dataPtr++ = (Uint16) ((NumFinal) & 0x0000FFFF);
00195
00196
00197 if(storageMode == OVERWRITE)
00198 *actualPos = (Uint32)dataPtr;
00199 }
00200
00201
00202
00203 static inline void WriteData(volatile Uint16 *data)
00204 {
00205
00206 if(dataPtr>=end && storageMode == NOVERWRITE)
00207 return;
00208 if(dataPtr>=end && storageMode == OVERWRITE)
00209 dataPtr=begin;
00210 *dataPtr++= *data;
00211 if(storageMode == OVERWRITE){
00212 *actualPos = (Uint32)dataPtr;
00213 }
00214
00215 }
00216
00217
00218
00219
00220 static inline void WriteIQData(volatile _iq *data)
00221 {
00222 if(dataPtr>=end-2 && storageMode == NOVERWRITE)
00223 return;
00224 if(dataPtr>=end-2 && storageMode == OVERWRITE)
00225 dataPtr=begin;
00226 *dataPtr++ = (Uint16) (((long)(*data) & 0xFFFF0000) >> 16);
00227 *dataPtr++ = (Uint16) ((long)(*data) & 0x0000FFFF);
00228
00229 if(storageMode == OVERWRITE){
00230 *actualPos = (Uint32)dataPtr;
00231 }
00232 }
00233
00234
00235
00236 static inline void ReadData(Uint16* data,Uint32 pos)
00237 {
00238 if(pos<BUFSIZE)
00239 *data=dataStorageBuffer[pos];
00240 }
00241
00242
00243
00244 static inline void ReinitDataStorageBuffer(void)
00245 {
00246 begin=dataStorageBuffer;
00247 end=dataStorageBuffer+BUFSIZE-1;
00248 dataPtr=begin;
00249 clearDataStorage=0;
00250 }
00251
00252
00253
00254 #endif // #ifndef NO_DATA_STORAGE
00255
00256 #endif
00257
00258
00259
00260
00261