00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <stdio.h>
00027
00028 #if defined( _MSC_VER )
00029 #define INLINE __inline
00030 #elif defined(__GNUC__)
00031 #define INLINE __inline__
00032 #else
00033 #define INLINE
00034 #endif
00035
00036 #define EXTERNAL extern
00037
00038 #ifndef MIDAS_TYPE_DEFINED
00039 #define MIDAS_TYPE_DEFINED
00040
00041 typedef short int INT;
00042 typedef unsigned short int WORD;
00043
00044 #ifdef __alpha
00045 typedef unsigned int DWORD;
00046 #else
00047 typedef unsigned long int DWORD;
00048 #endif
00049
00050 #endif
00051
00052 #ifdef PPCxxx
00053 #define A32D24_1190 0xfa000000
00054 #else
00055 #define A32D24_1190 0xf0000000
00056 #endif
00057
00058
00059
00060 #define LRS1190_ENABLE(_vmebase){\
00061 {\
00062 volatile DWORD _ll, _local;\
00063 _ll = _vmebase;\
00064 _local = ((_ll) | 0x8002) | A32D24_1190;\
00065 *(WORD *)_local = 0x1;\
00066 }\
00067 }
00068
00069
00070 #define LRS1190_DISABLE(_vmebase){\
00071 {\
00072 volatile DWORD _ll, _local;\
00073 _ll = _vmebase;\
00074 _local = ((_ll) | 0x8002) | A32D24_1190;\
00075 *(WORD *)_local = 0x0;\
00076 }\
00077 }
00078
00079
00080 #define LRS1190_RESET(_vmebase){\
00081 {\
00082 volatile DWORD _ll, _dummy, _local;\
00083 _ll = _vmebase;\
00084 _local = (_ll) | A32D24_1190;\
00085 _dummy = *(WORD *) _local;\
00086 }\
00087 }
00088
00089
00090 #define LRS1190_COUNT(_vmebase, _d){\
00091 {\
00092 volatile DWORD _ll, *_pcount;\
00093 _ll = _vmebase;\
00094 _pcount = (DWORD *) (((_ll) | 0x8000) | A32D24_1190);\
00095 *((WORD *) _d) = *(WORD *) _pcount;\
00096 }\
00097 }
00098
00099
00100
00101 #define LRS1190_READI4(_vmebase,_d,_r){\
00102 {\
00103 volatile DWORD _ll, *_local, __r, _count;\
00104 DWORD *_pcount;\
00105 __r = _r;\
00106 _ll = _vmebase;\
00107 _pcount = (DWORD *) (((_ll) | 0x8000) | A32D24_1190);\
00108 _count = *(WORD *) _pcount;\
00109 if (_count <= __r)\
00110 __r = _count;\
00111 _local = (DWORD *)((_ll) | A32D24_1190);\
00112 while (__r > 0) {\
00113 *_d++ = *_local++;\
00114 __r--;}\
00115 }\
00116 }
00117
00118
00119 #define LRS1190_READL2(_vmebase,_d,_r){\
00120 {\
00121 volatile DWORD _ll, *_pcount, *_local, __r, _count;\
00122 __r = _r;\
00123 _ll = _vmebase;\
00124 _pcount = (DWORD *) (((_ll) | 0x8000) | A32D24_1190);\
00125 _count = *(WORD *) _pcount;\
00126 if (_count <= __r)\
00127 __r = _count;\
00128 _local = (DWORD *)((_ll) | A32D24_1190);\
00129 while (__r > 0) {\
00130 *(WORD *) _d = *(WORD *)_local;\
00131 ((WORD *)_d)++;\
00132 (_local)++;\
00133 __r--;}\
00134 }\
00135 }
00136
00137
00138 #define LRS1190_READH2(_vmebase,_d,_r){\
00139 {\
00140 volatile DWORD _ll, *_pcount, *_local, _count, __r;\
00141 __r = _r;\
00142 _ll = _vmebase;\
00143 _pcount = (DWORD *) (((_ll) | 0x8000) | A32D24_1190);\
00144 _count = *(WORD *) _pcount;\
00145 if (_count <= __r)\
00146 __r = _count;\
00147 _local = (DWORD *)((_ll) | A32D24_1190);\
00148 while (__r > 0) {\
00149 *(WORD *) _d = *(++((WORD *)_local));\
00150 ((WORD *)_d)++;\
00151 ((WORD *)_local)++;\
00152 __r--;}\
00153 }\
00154 }
00155
00156
00157 #define LRS_1190_READL2_TONY(_vmebase,_d,_r){\
00158 {\
00159 volatile DWORD _ll, *_pcount, *_local, __r, _count;\
00160 __r = _r;\
00161 _ll = _vmebase;\
00162 _pcount = (DWORD *) (((_ll) | 0x8000) | A32D24_1190);\
00163 _count = *(WORD *) _pcount;\
00164 if (_count <= __r)\
00165 __r = _count;\
00166 _local = (DWORD *)((_ll) | A32D24_1190);\
00167 *(WORD *) _d = __r;\
00168 ((WORD *)_d)++;\
00169 while (__r > 0) {\
00170 *(WORD *) _d = *(WORD *)_local;\
00171 ((WORD *)_d)++;\
00172 (_local)++;\
00173 __r--;}\
00174 }\
00175 }
00176
00177
00178
00179 INLINE void lrs1190_enable(DWORD vmeBase)
00180 {
00181 volatile DWORD local;
00182
00183 local = ((vmeBase) | 0x8002) | A32D24_1190;
00184 *(WORD *) local = 0x1;
00185 }
00186
00187
00188 INLINE void lrs1190_disable(DWORD vmeBase)
00189 {
00190 volatile DWORD local;
00191
00192 local = ((vmeBase) | 0x8002) | A32D24_1190;
00193 *(WORD *) local = 0x0;
00194 }
00195
00196
00197 INLINE void lrs1190_reset(DWORD vmeBase)
00198 {
00199 volatile DWORD local, dummy;
00200
00201 local = vmeBase | A32D24_1190;
00202 dummy = *(WORD *) local;
00203 }
00204
00205
00206 INLINE void lrs1190_count(DWORD vmeBase, INT * count)
00207 {
00208 volatile DWORD local;
00209
00210 local = (vmeBase | 0x8000 | A32D24_1190);
00211 *count = *(WORD *) local;
00212 }
00213
00214
00215 INLINE void lrs1190_readi4(DWORD vmeBase, DWORD ** d, INT r)
00216 {
00217 volatile DWORD local, count;
00218
00219 local = (vmeBase | 0x8000 | A32D24_1190);
00220 count = *(WORD *) local;
00221 if ((int) count <= r)
00222 r = count;
00223 local = vmeBase | A32D24_1190;
00224 while (r > 0) {
00225 *((*d)++) = *((DWORD *) local);
00226 ((DWORD *) local)++;
00227 r--;
00228 }
00229 }
00230
00231
00232 INLINE void lrs1190_readl2(DWORD vmeBase, WORD ** d, INT r)
00233 {
00234 volatile DWORD local, count;
00235
00236 local = (vmeBase | 0x8000 | A32D24_1190);
00237 count = *(WORD *) local;
00238 if ((int) count <= r)
00239 r = count;
00240 local = vmeBase | A32D24_1190;
00241 while (r > 0) {
00242 *((*d)++) = *((WORD *) local);
00243 ((DWORD *) local)++;
00244 r--;
00245 }
00246 }
00247
00248
00249 INLINE void lrs1190_readh2(DWORD vmeBase, WORD ** d, INT r)
00250 {
00251 volatile DWORD local, count;
00252
00253 local = (vmeBase | 0x8000 | A32D24_1190);
00254 count = *(WORD *) local;
00255 if ((int) count <= r)
00256 r = count;
00257 local = vmeBase | A32D24_1190;
00258 while (r > 0) {
00259 *((*d)++) = *(++((WORD *) local));
00260 ((WORD *) local)++;
00261 r--;
00262 }
00263 }
00264
00265
00266 INLINE void lrs1190_readl2z(DWORD vmeBase, WORD ** d, INT r)
00267 {
00268 volatile DWORD *local, count;
00269
00270 local = (DWORD *) (vmeBase | 0x8000 | A32D24_1190);
00271 count = *(WORD *) local;
00272 if ((int) count <= r)
00273 r = count;
00274 local = (DWORD *) (vmeBase | A32D24_1190);
00275
00276 *((*d)++) = r;
00277 while (r > 0) {
00278 *((*d)++) = *((WORD *) local);
00279 (local)++;
00280 r--;
00281 }
00282 }
00283
00284
00285 void lrs1190(void)
00286 {
00287 printf("\n---> LRS 1190 Dual port memory buffer (lrs1190.c) <---\n");
00288 printf("Macro : LRS1190_ENABLE (DWORD vmeBase);\n");
00289 printf("Macro : LRS1190_DISABLE (DWORD vmeBase);\n");
00290 printf("Macro : LRS1190_CLEAR (DWORD vmeBase);\n");
00291 printf("Macro : LRS1190_COUNT (DWORD vmeBase, int * count);\n");
00292 printf("Macro : LRS1190_READI4 (DWORD vmeBase, DWORD *d , int repeat);\n");
00293 printf("Macro : LRS1190_READL2 (DWORD vmeBase, WORD *d , int repeat);\n");
00294 printf("Macro : LRS1190_READH2 (DWORD vmeBase, WORD *d , int repeat);\n");
00295 printf("Macro : LRS1190_READL2_TONY (DWORD vmeBase, DWORD *d , int repeat);\n");
00296 printf("Inline : lrs1190_enable (DWORD vmeBase);\n");
00297 printf("Inline : lrs1190_disable (DWORD vmeBase);\n");
00298 printf("Inline : lrs1190_clear (DWORD vmeBase);\n");
00299 printf("Inline : lrs1190_count (DWORD vmeBase, int * count);\n");
00300 printf("Inline : lrs1190_readi4 (DWORD vmeBase, DWORD *d , int repeat);\n");
00301 printf("Inline : lrs1190_readl2 (DWORD vmeBase, DWORD *d , int repeat);\n");
00302 printf("Inline : lrs1190_readh2 (DWORD vmeBase, DWORD *d , int repeat);\n");
00303 printf("Inline : lrs1190_readl2_tony (DWORD vmeBase, DWORD *d , int repeat);\n");
00304 printf("Test : ena1190 (0x7f0000) <--- enable VME buffer\n");
00305 printf("Test : dis1190 (0x7f0000) <--- disable VME buffer\n");
00306 printf("Test : res1190 (0x7f0000) <--- reset VME buffer\n");
00307 printf("Test : cn1190 (0x7f0000) <--- read WORD count register\n");
00308 printf("Test : rd1190 (0x7f0000) <--- read VME buffer\n");
00309 printf("Test : rd1190l (0x7f0000) <--- read low WORD VME buffer\n");
00310 printf("Test : rd1190h (0x7f0000) <--- read high WORD VME buffer\n");
00311 }
00312
00313 void ena1190(DWORD vmeBase)
00314 {
00315 lrs1190_enable(vmeBase);
00316 }
00317
00318 void dis1190(DWORD vmeBase)
00319 {
00320 lrs1190_disable(vmeBase);
00321 }
00322
00323 void res1190(DWORD vmeBase)
00324 {
00325 lrs1190_reset(vmeBase);
00326 }
00327
00328 void cn1190(DWORD vmeBase)
00329 {
00330 INT count;
00331 lrs1190_count(vmeBase, &count);
00332 printf("Inline counter %i\n", count);
00333 LRS1190_COUNT(vmeBase, &count);
00334 printf("Macro counter %i\n", count);
00335 }
00336
00337 void rd1190l(DWORD vmeBase, DWORD r)
00338 {
00339 DWORD dd[1024], *pdd;
00340 INT i, buf_counter;
00341
00342 for (i = 0; i < 1024; i++)
00343 dd[i] = 0;
00344 pdd = &dd[0];
00345 lrs1190_disable(vmeBase);
00346 lrs1190_count(vmeBase, &buf_counter);
00347 printf("counter %i\n", buf_counter);
00348 lrs1190_readl2(vmeBase, (WORD **) & pdd, r);
00349 lrs1190_enable(vmeBase);
00350 for (i = 0; i < buf_counter; i++)
00351 printf("%i-> %8.8x\n", i, dd[i]);
00352 }
00353
00354 void rd1190h(DWORD vmeBase, DWORD r)
00355 {
00356 DWORD dd[1024], *pdd;
00357 INT i, buf_counter;
00358
00359 for (i = 0; i < 1024; i++)
00360 dd[i] = 0;
00361 pdd = &dd[0];
00362 lrs1190_disable(vmeBase);
00363 lrs1190_count(vmeBase, &buf_counter);
00364 printf("counter %i\n", buf_counter);
00365 lrs1190_readh2(vmeBase, (WORD **) & pdd, r);
00366 lrs1190_enable(vmeBase);
00367 for (i = 0; i < buf_counter; i++)
00368 printf("%i-> %8.8x\n", i, dd[i]);
00369 }
00370
00371 void rd1190(DWORD vmeBase, DWORD r)
00372 {
00373 DWORD dd[1024], *pdd;
00374 INT i, buf_counter;
00375
00376 for (i = 0; i < 1024; i++)
00377 dd[i] = 0;
00378 pdd = &dd[0];
00379 lrs1190_disable(vmeBase);
00380 lrs1190_count(vmeBase, &buf_counter);
00381 printf("counter %i\n", buf_counter);
00382 lrs1190_readi4(vmeBase, &pdd, r);
00383 lrs1190_enable(vmeBase);
00384 for (i = 0; i < buf_counter; i++)
00385 printf("%i-> %8.8x\n", i, dd[i]);
00386 }