fdhwlib
2.0.25
|
00001 /*************************************************************************** 00002 baseregister.h - description 00003 00004 begin : Thu Jun 29 2000 00005 copyright : (C) 2000 by Andreas Kopmann 00006 email : kopmann@hpe.fzk.de 00007 ***************************************************************************/ 00008 00009 00010 #ifndef _HW4_BASEREGISTER_H_INCLUDED 00011 #define _HW4_BASEREGISTER_H_INCLUDED 00012 00013 00014 #include <Pbus/Pbus.h> 00015 00016 #include <hw4/baseregisteritem.h> 00017 00018 namespace hw4 { 00019 00148 class BaseRegister : public Pbus { 00149 public: 00156 BaseRegister(const char * name, int slotID, unsigned int regID, int r, int w, 00157 int len = 1, int addrShift = 0, int blockLen = 1, bool useCache = true); 00158 00161 virtual ~BaseRegister(); 00162 00165 virtual unsigned long read(); 00166 00169 virtual unsigned long read(int elem); 00170 00174 virtual unsigned long read(int elem, int line); // TODO: Lesen mit Line= 0? 00175 00177 virtual int getActiveBits(int elem = 0, unsigned long mask = 0xffffffff); 00178 00180 virtual void readBlock(unsigned long * data); 00181 00183 virtual void readBlock(unsigned long * data, unsigned long blockLen); 00184 00186 virtual void readBlock(unsigned long * data, unsigned long start, unsigned long blockLen); 00187 00189 virtual void readBlock(int elem, unsigned long * data); 00190 00192 virtual void readBlock(int elem, unsigned long * data, unsigned long blockLen); 00193 00195 virtual void readBlock(int elem, unsigned long * data, unsigned long start, unsigned long blockLen); 00196 00198 virtual void readElements(int elem0, int elem1, unsigned long * data); 00199 00201 virtual void readElements(unsigned long * data = 0); 00202 00203 00208 virtual void write(unsigned long data); 00209 00214 virtual void write(int elem, unsigned long data); 00215 00220 virtual void write(int elem, int line, unsigned long data); 00221 00226 virtual void write(unsigned long *data); 00227 00228 virtual void writeBits(unsigned long data, unsigned long mask, int shift); 00229 00230 virtual void writeBits(int elem, unsigned long data, unsigned long mask, int shift); 00231 00232 virtual void writeBits(int elem, int line, unsigned long data, unsigned long mask, int shift); 00233 00234 virtual void setBitsToHigh(unsigned long mask); 00235 00236 virtual void setBitsToHigh(int elem, unsigned long mask); 00237 00238 virtual void setBitsToLow(unsigned long mask); 00239 00240 virtual void setBitsToLow(int elem, unsigned long mask); 00241 00246 unsigned long getCache(int elem = 0, int line = 0); 00247 00248 void getCache(unsigned long *data); 00249 00251 void setCache(unsigned long data); 00252 00253 void setCache(int elem, unsigned long data); 00254 00255 //void setCache(unsigned long *data); 00256 00257 00259 virtual void setCacheBits(unsigned long data, unsigned long mask, int shift); 00260 00261 virtual void setCacheBits(int elem, unsigned long data, unsigned long mask, int shift); 00262 00264 virtual void writeCache(); 00265 00267 virtual void writeCache(int elem); 00268 00270 virtual void writeCache(int elem , int line); 00271 00272 00280 virtual int writeBitsByName(char *name, unsigned long data); 00281 00283 //TODO: HJ proposed a better way to handle the itemList (advantage: the number of items itemN 00284 //TODO: will always be correct because it is computed during creation of item list; and 00285 //TODO: itemList[.] is still available). -tb- 00286 //TODO: std::vector<hw4:BaseRegisterItem*> itemList; 00287 //TODO: example of creating register items: 00288 //TODO: itemList.push_back( triggerEnable = new BaseRegisterItem(this, "TriggerEnable", 0, 6) ); 00289 //TODO: .. and replace itemN by unsigned int getNItems() { return itemList.size(); } 00290 BaseRegisterItem **itemList; 00291 00293 int itemN; 00294 00295 const char * getName(); 00296 00297 bool isReadable(); 00298 00299 bool isWriteable(); 00300 00302 unsigned long getAddr(); 00303 00304 virtual int getLength(); 00305 00306 int getBlockLength(); 00307 00308 unsigned long getAddrShift(); 00309 00314 bool isCacheEnabled(); 00315 00316 //private: 00317 protected: 00318 unsigned long addr; 00319 00320 unsigned long addrShift; 00321 00322 int len; 00323 00324 int blockLen; 00325 00326 const char * name; 00327 00328 bool readable; 00329 00330 bool writeable; 00331 00332 bool useCache; 00333 00334 bool hasCBWOBits; //TODO: this will be needed in the future to implement handling of CBWO (cleared by writing 1) bits -tb- 00335 00336 bool isMemory; 00337 00343 unsigned long *cache; 00344 }; 00345 00346 } // namespace hw4 00347 00348 #endif // _HW4_BASEREGISTER_H_INCLUDED 00349