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
00047
00048
00049
00050
00051 #include "DSP2833x_Device.h"
00052 #include "IQConstants.h"
00053
00054
00055
00056
00057
00058
00059 typedef _iq data[2];
00060 typedef _iq data3[3];
00061
00062
00063 struct sqddata {_iq q,d;};
00064 struct qddata { data q,d;};
00065 struct qddata3 { data3 q,d;};
00066
00067
00068
00069
00071 #define INIT_QD(z) z.q=_IQ(0.0); z.d=_IQ(0.0)
00072
00073 #define INIT_DATA(z) z[N]=0.0; z[N1]=0.0
00074
00075 #define INIT_DATA3(z) z[N]=0.0; z[N1]=0.0; z[N2]=0.0
00076
00077 #define INIT_QDDATA(z) INIT_DATA(z.q); INIT_DATA(z.d)
00078
00079 #define INIT_QDDATA3(z) INIT_DATA3(z.q); INIT_DATA3(z.d)
00080
00081 #define UPDATE_STATE(v) v[N1]=v[N]
00082
00083 #define UPDATE_STATE3(v) v[N2]=v[N1]; v[N1]=v[N]
00084
00085 #define UPDATEQD_STATE(vqd) UPDATE_STATE(vqd.q);UPDATE_STATE(vqd.d)
00086
00087 #define UPDATEQD_STATE3(vqd) UPDATE_STATE3(vqd.q);UPDATE_STATE3(vqd.d)
00088
00089
00091 #define XINTF_SIZE 0x01F400// 0x00FC00 // 0x20000 (128K)
00092
00094 #define ROM_SIZE 0x3ff80
00095
00096 typedef enum {
00097 OVERWRITE,
00098 NOVERWRITE
00099 } STORAGEMODE;
00100
00101
00102
00103 #ifdef USE_XINTF
00104 #undef USE_FLASH
00105 #define BUFSIZE XINTF_SIZE
00106 #define MEM_STORAGE_DEFINED
00107 #endif
00108
00109
00110 #ifdef USE_FLASH
00111 #undef USE_XINTF
00112 #define BUFSIZE ROM_SIZE
00113 #define MEM_STORAGE_DEFINED
00114 #endif
00115
00116 #ifndef MEM_STORAGE_DEFINED
00117 #error MEM_STORAGE_DEFINED is not defined in DataStorage.h
00118 #endif
00119
00121 extern Uint16 dataStorageBuffer[BUFSIZE];
00122 extern Uint16* dataPtr;
00123 extern Uint16* begin;
00124 extern Uint16* end;
00125 extern Uint32* actualPos;
00126
00127 extern Uint16 clearDataStorage;
00128 extern STORAGEMODE storageMode;
00129
00130
00131
00132
00133
00134
00139
00140 extern void InitDataStorageBuffer(STORAGEMODE mode);
00141
00142
00143
00146
00147 static inline void WriteData(volatile Uint16 *data);
00148
00149
00152
00153 static inline void WriteIQData(volatile _iq *data);
00154
00155
00159
00160 static inline void ReadData(Uint16* data,Uint32 pos);
00161
00162
00164
00165 static inline void ReinitDataStorageBuffer(void);
00166
00167
00170
00171 static inline void WriteFloatData(volatile float *data);
00172
00173
00174
00175 static inline void WriteFloatData(volatile float *data)
00176 {
00177
00178 Uint32 NumFinal = 0;
00179 Uint16 *ptr = (Uint16 *)data;
00180
00181 NumFinal=NumFinal|((Uint32)(*(ptr+1))&0xFFFF)<<16;
00182 NumFinal=NumFinal|((Uint32)(*(ptr))&0xFFFF);
00183
00184
00185 if(dataPtr>=end-2 && storageMode == NOVERWRITE)
00186 return;
00187 if(dataPtr>=end-2 && storageMode == OVERWRITE)
00188 dataPtr=begin;
00189
00190 *dataPtr++ = (Uint16) (((NumFinal) & 0xFFFF0000) >> 16);
00191 *dataPtr++ = (Uint16) ((NumFinal) & 0x0000FFFF);
00192
00193
00194 if(storageMode == OVERWRITE)
00195 *actualPos = (Uint32)dataPtr;
00196 }
00197
00198
00199
00200 static inline void WriteData(volatile Uint16 *data)
00201 {
00202
00203 if(dataPtr>=end && storageMode == NOVERWRITE)
00204 return;
00205 if(dataPtr>=end && storageMode == OVERWRITE)
00206 dataPtr=begin;
00207 *dataPtr++= *data;
00208 if(storageMode == OVERWRITE){
00209 *actualPos = (Uint32)dataPtr;
00210 }
00211
00212 }
00213
00214
00215
00216
00217 static inline void WriteIQData(volatile _iq *data)
00218 {
00219 if(dataPtr>=end-2 && storageMode == NOVERWRITE)
00220 return;
00221 if(dataPtr>=end-2 && storageMode == OVERWRITE)
00222 dataPtr=begin;
00223 *dataPtr++ = (Uint16) (((long)(*data) & 0xFFFF0000) >> 16);
00224 *dataPtr++ = (Uint16) ((long)(*data) & 0x0000FFFF);
00225
00226 if(storageMode == OVERWRITE){
00227 *actualPos = (Uint32)dataPtr;
00228 }
00229 }
00230
00231
00232
00233 static inline void ReadData(Uint16* data,Uint32 pos)
00234 {
00235 if(pos<BUFSIZE)
00236 *data=dataStorageBuffer[pos];
00237 }
00238
00239
00240
00241 static inline void ReinitDataStorageBuffer(void)
00242 {
00243 begin=dataStorageBuffer;
00244 end=dataStorageBuffer+BUFSIZE-1;
00245 dataPtr=begin;
00246 clearDataStorage=0;
00247 }
00248
00249
00250
00251 #endif
00252
00253
00254
00255
00256