/[PAMELA software]/quicklook/dataToXML/Data/compilationInfo/src/INFN/CAL_Calorimeter_INFN.c
ViewVC logotype

Contents of /quicklook/dataToXML/Data/compilationInfo/src/INFN/CAL_Calorimeter_INFN.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (download) (vendor branch)
Tue Apr 25 09:00:20 2006 UTC (19 years, 2 months ago) by kusanagi
Branch: MAIN
CVS Tags: dataToXML1_02/01, dataToXML1_02/00, dataToXML1_03/00, dataToXML1_03/01, dataToXML1_00/00, firstRelease, dataToXML1_01/00, dataToXML1_03_02, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
These program extract in an XML format the info contained into the ROOT files generated by YODA from the PAMELA data. To visualize the XML files in a more human readable format a collection of XSL files are given in the Data subfolder.

1 /*============================= Include File ================================*/
2
3
4 #include <src/INFN/LU_SourceFileID_INFN.h>
5 #define __FILEID__ _CAL_Calorimeter_INFN__c
6
7 #include <src/INFN/PRH_ParamHandler_INFN.h>
8 #include <src/INFN/LU_LogUtility_INFN.h>
9 #include <src/INFN/PRH_ParamHandler_INFN_auto.h>
10 LU_DECL_MASK();
11
12 #include <src/INFN/DAQ_IDAQ_INFN.h>
13 #include <src/INFN/CM_Common_INFN.h>
14 #include <src/INFN/CH_CommandHandler_INFN.h>
15 #include <src/INFN/CAL_Calorimeter_INFN.h>
16 #include <src/INFN/KHB_Driver_INFN.h>
17 #include <src/INFN/PM_PamManager_INFN.h>
18 #include <src/INFN/TRG_Trigger_INFN.h>
19 #include <src/INFN/HK_Manager_INFN.h>
20 #include <src/INFN/ALM_Alarm_INFN.h>
21
22 /*============================ Global define ================================*/
23
24
25 /*============================== global types ==============================*/
26
27
28
29
30
31 /*=========================== Structure define ==============================*/
32
33
34 /*============================ Enumerate define =============================*/
35
36
37 /*============================== global variables ==============================*/
38
39 DAQ_DECLBUF(CAL_TempPif0,CAL_MAXTEMPBUFFER);
40 DAQ_DECLBUF(CAL_TempPif1,CAL_MAXTEMPBUFFER);
41 DAQ_DECLBUF(CAL_TempPif2,CAL_MAXTEMPBUFFER);
42 DAQ_DECLBUF(CAL_TempPif3,CAL_MAXTEMPBUFFER);
43
44 extern BOOL RM_Init_Before_Calib;
45
46 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I211;
47
48 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I221;
49
50 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I231;
51
52 static DAQ_CMD_BUF CAL_WRITE_DSP_MEM_I41;
53
54 static DAQ_CMD_BUF CAL_WRITE_DSP_MEM_I42;
55
56 static DAQ_CMD_BUF CAL_WRITE_DSP_MEM_I43;
57
58 static DAQ_CMD_BUF CAL_READ_DSP_MEM_C31;
59
60 static DAQ_CMD_BUF CAL_READ_DSP_MEM_C32;
61
62 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_OFF;
63
64 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I241[4+1];
65
66 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I251[4+1];
67
68 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I261[4+1];
69
70 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I260[4+1];
71
72 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I311[4+1];
73
74 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I310[4+1];
75
76 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I321;
77
78 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I331[4+1];
79
80 static DAQ_CMD_BUF CAL_WRITE_FPGA_REG_I341[4+1];
81
82 DAQ_DECLBUF(daq_reply,128*1024);
83 DAQ_DECLBUF(daq_temp,128*1024);
84 DAQ_DECLBUF(daq_command,1024);
85 DAQ_DECLBUF(daq_calo,1024);
86
87 #define CAL_CAL_TRIGGER_DELAY 10
88
89 PRH_VAR_TYPE CAL_DSP_MASK;
90 PRH_VAR_TYPE CAL_FE_MASK;
91
92 #define CAL_STRIP_SKIP_LEN 66*16
93 #define CAL_SKIP_HEADER SM_PKTHEADER_LEN
94
95 static UINT32 STRIP_SKIP[CAL_STRIP_SKIP_LEN];
96 static UINT16 CAL_CRC[4][4]={
97 {0x635a,0x6700,0x6bee,0x6fb4},
98 {0xba7c,0xbe26,0xb2c8,0xb692},
99 {0x723d,0x7667,0x7a89,0x7ed3},
100 {0xab1b,0xaf41,0xa3af,0xa7f5}
101 };
102
103 status_code CAL_Init_ETOATO()
104 {
105 int i;
106
107 CH_SetAtoEto(CH_CAL_RESET_FE,1,2);
108 CH_SetAtoEto(CH_CAL_READ_ALARM,1,2);
109
110 for(i=0; i < 7; i++)
111 CH_SetAtoEto(CAL_CAL_READ_FPGA_REG_BASE_ID+i,1,1);
112
113
114 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_OFF,1,2);
115 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I211,1,2);
116 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I221,1,2);
117 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I231,1,2);
118
119 for(i=1; i < 5; i++)
120 {
121 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I241[i],1,2);
122 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I251[i],1,2);
123 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I261[i],1,2);
124 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I260[i],1,2);
125 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I311[i],1,2);
126 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I310[i],1,2);
127 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I331[i],1,2);
128 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_FPGA_REG_I341[i],1,2);
129 }
130
131 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_DSP_MEM_I41,1,7);
132 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_DSP_MEM_I42,1,7);
133 CH_PARAMBUF_SET_ATO_ETO(CAL_WRITE_DSP_MEM_I43,1,2);
134 CH_PARAMBUF_SET_ATO_ETO(CAL_READ_DSP_MEM_C31,1,8);
135 CH_PARAMBUF_SET_ATO_ETO(CAL_READ_DSP_MEM_C32,1,8);
136
137 CH_SetAtoEto(CH_CAL_READ_HK,1,7);
138 CH_SetAtoEto(CH_CAL_READ_EVENT_DATA,1,7);
139 CH_SetAtoEto(CH_CAL_FULL,1,2);
140 CH_SetAtoEto(CH_CAL_COMPRESS,1,2);
141
142 return CM_RC_SUCCESSFUL;
143 }
144
145 void CAL_Init_ParamBuffers() {
146 DAQ_INIT_BUF_FROM_PARAMBUF(CAL_WRITE_FPGA_REG_I211);
147 DAQ_INIT_BUF_FROM_PARAMBUF(CAL_WRITE_FPGA_REG_I221);
148 DAQ_INIT_BUF_FROM_PARAMBUF(CAL_WRITE_FPGA_REG_I231);
149
150 DAQ_INIT_BUF_FROM_PARAMBUF(CAL_WRITE_DSP_MEM_I41);
151 DAQ_INIT_BUF_FROM_PARAMBUF(CAL_WRITE_DSP_MEM_I42);
152 DAQ_INIT_BUF_FROM_PARAMBUF(CAL_WRITE_DSP_MEM_I43);
153
154 DAQ_INIT_BUF_FROM_PARAMBUF(CAL_READ_DSP_MEM_C31);
155 DAQ_INIT_BUF_FROM_PARAMBUF(CAL_READ_DSP_MEM_C32);
156
157 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I241,1);
158 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I241,2);
159 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I241,3);
160 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I241,4);
161
162 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I251,1);
163 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I251,2);
164 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I251,3);
165 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I251,4);
166
167 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I261,1);
168 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I261,2);
169 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I261,3);
170 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I261,4);
171
172 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I260,1);
173 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I260,2);
174 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I260,3);
175 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I260,4);
176
177 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I311,1);
178 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I311,2);
179 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I311,3);
180 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I311,4);
181
182 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I310,1);
183 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I310,2);
184 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I310,3);
185 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I310,4);
186
187 DAQ_INIT_BUF_FROM_PARAMBUF(CAL_WRITE_FPGA_REG_I321);
188 DAQ_INIT_BUF_FROM_PARAMBUF(CAL_WRITE_FPGA_REG_OFF);
189
190 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I331,1);
191 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I331,2);
192 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I331,3);
193 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I331,4);
194
195 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I341,1);
196 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I341,2);
197 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I341,3);
198 DAQ_INIT_BUF_FROM_PARAMBUF_AS_ARR(CAL_WRITE_FPGA_REG_I341,4);
199
200 }
201
202 status_code CAL_Init()
203 {
204 DAQ_BUFFER_INIT(daq_reply);
205 DAQ_BUFFER_INIT(daq_temp);
206 DAQ_BUFFER_INIT(daq_command);
207 DAQ_BUFFER_INIT(daq_calo);
208 DAQ_BUFFER_INIT(CAL_TempPif0);
209 DAQ_BUFFER_INIT(CAL_TempPif1);
210 DAQ_BUFFER_INIT(CAL_TempPif2);
211 DAQ_BUFFER_INIT(CAL_TempPif3);
212
213 CAL_DSP_MASK=PRH_VAR_CAL_UPLOAD_CAL_DSP_MASK;
214 CAL_FE_MASK =PRH_VAR_CAL_UPLOAD_CAL_FE_MASK;
215
216 CAL_Init_ParamBuffers();
217 CAL_Init_ETOATO();
218 return CM_RC_SUCCESSFUL;
219 }
220
221 status_code CAL_SwitchDCDC_On()
222 {
223 return CM_RC_SUCCESSFUL;
224 }
225
226
227 status_code CAL_SendTrigger(SM_PAGEID page,UINT16 n) {
228 int i;
229 status_code status;
230 for (i=0; i < n; i++)
231 {
232 status = DAQ_SendCmdQueue2CMDIF(page);
233 LU_EXIT_IFERROR(status);
234 status = RM_TaskSuspendUnlessSINT(CAL_CAL_TRIGGER_DELAY);
235 LU_EXIT_IFERROR(status);
236 }
237 }
238
239
240 status_code CAL_Initialization()
241 {
242 DAQ_FE idaqfe;
243 BYTE cal_loop1,cal_loop2,*ptr,dummy;
244 UINT16 temp,temp1,i,fe,alarm_reg,j;
245 RM_ACQ_SETTING sector;
246 status_code status=CM_RC_SUCCESSFUL;
247 DAQ_CMD_BUF* auto_buf;
248 static int debug_cal=0;
249
250 DAQ_ResetPIF(DAQ_DEFAULT_ETO_TICS,DAQ_MAX_DTO_TICS,SM_DAQSETUP,HB_PKTTYPE_CAL_INIT);
251
252 CAL_FE_MASK = PRH_VAR_CAL_UPLOAD_CAL_FE_MASK;
253 CAL_DSP_MASK = PRH_VAR_CAL_UPLOAD_CAL_DSP_MASK;
254
255 for(idaqfe=DAQ_FE_CAL_1,fe = 0x0001,i=0; idaqfe <= DAQ_FE_CAL_4; idaqfe++ , fe <<=1,i++)
256 {
257 if(fe & CAL_FE_MASK)
258 {
259 cal_loop1=cal_loop2=0;
260
261 START_ACQ:
262
263 DAQ_Format_CMD_Empty(&daq_temp);
264 DAQ_Format_CMD_Empty(&CAL_TempPif0);
265 DAQ_Format_CMD_Empty(&CAL_TempPif1);
266 DAQ_Format_CMD_Empty(&CAL_TempPif2);
267 DAQ_Format_CMD_Empty(&CAL_TempPif3);
268
269 CH_GetBuf(CH_CAL_READ_ALARM,&auto_buf);
270 /* ZULLO 06 Jul 2004 Fe2Daq --> Fe2Ram */
271 /* DAQ_Format_Fe2Daq(&CAL_TempPif1,auto_buf,idaqfe);
272 DAQ_Format_Fe2Ram(&CAL_TempPif0,auto_buf,idaqfe);
273 */
274
275 if(debug_cal)
276 DAQ_Format_Fe2Daq(&CAL_TempPif0,auto_buf,idaqfe);
277 else
278 DAQ_Format_Cmd2Fe(&CAL_TempPif0,auto_buf,idaqfe);
279
280 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP0,&CAL_TempPif0);
281 LU_EXIT_IFERROR(status);
282
283 if(debug_cal)
284 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP0,TRUE,&daq_reply,TRUE);
285 else
286 status = DAQ_SendCmdQueue2CMDIF(SM_CALEXP0);
287
288
289 LU_EXIT_IFERROR(status);
290
291 status = RM_TaskSuspendUnlessSINT(1);
292 LU_EXIT_IFERROR(status);
293
294 CH_GetBuf(CH_CAL_RESET_FE,&auto_buf);
295 DAQ_Format_Fe2Daq(&CAL_TempPif1,auto_buf,idaqfe);
296
297 if (RM_Init_Before_Calib)
298 DAQ_Format_Fe2Daq(&CAL_TempPif1,&CAL_WRITE_FPGA_REG_I211,idaqfe);
299 else
300 {
301 CH_GetBuf(CH_CAL_WRITE_FPGA_REG_RAW,&auto_buf);
302 DAQ_Format_Fe2Daq(&CAL_TempPif1,auto_buf,idaqfe);
303 }
304
305 DAQ_Format_Fe2Daq(&CAL_TempPif1,&CAL_WRITE_FPGA_REG_I221,idaqfe);
306 DAQ_Format_Fe2Daq(&CAL_TempPif1,&CAL_WRITE_FPGA_REG_I231,idaqfe);
307 DAQ_Format_Fe2Daq(&CAL_TempPif1,&CAL_WRITE_FPGA_REG_I241[i+1],idaqfe);
308 DAQ_Format_Fe2Daq(&CAL_TempPif1,&CAL_WRITE_FPGA_REG_I251[i+1],idaqfe);
309
310 if (RM_Init_Before_Calib)
311 DAQ_Format_Fe2Daq(&CAL_TempPif1,&CAL_WRITE_FPGA_REG_I261[i+1],idaqfe);
312 else
313 DAQ_Format_Fe2Daq(&CAL_TempPif1,&CAL_WRITE_FPGA_REG_I260[i+1],idaqfe);
314
315 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP1,&CAL_TempPif1);
316 LU_EXIT_IFERROR(status);
317 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP1,TRUE,&daq_reply,TRUE);
318 LU_EXIT_IFERROR(status);
319
320 status = RM_TaskSuspendUnlessSINT(100);
321 LU_EXIT_IFERROR(status);
322
323 DAQ_Format_AppendBuffer_offset(&daq_temp,&daq_reply,CAL_SKIP_HEADER);
324
325
326 if (RM_Init_Before_Calib)
327 {
328 DAQ_Format_Fe2Daq(&CAL_TempPif2,&CAL_WRITE_FPGA_REG_I311[i+1],idaqfe);
329 DAQ_Format_Fe2Daq(&CAL_TempPif2,&CAL_WRITE_FPGA_REG_I321,idaqfe);
330 }
331 else
332 {
333 DAQ_Format_Fe2Daq(&CAL_TempPif2,&CAL_WRITE_FPGA_REG_I310[i+1],idaqfe);
334 CH_GetBuf(CH_CAL_WRITE_FPGA_REG_RAW,&auto_buf);
335 DAQ_Format_Fe2Daq(&CAL_TempPif2,auto_buf,idaqfe);
336 }
337
338 DAQ_Format_Fe2Daq(&CAL_TempPif2,&CAL_WRITE_FPGA_REG_I331[i+1],idaqfe);
339
340 DAQ_Format_Fe2Daq(&CAL_TempPif2,&CAL_WRITE_FPGA_REG_I341[i+1],idaqfe);
341
342 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP2,&CAL_TempPif2);
343 LU_EXIT_IFERROR(status);
344 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP2,TRUE,&daq_reply,TRUE);
345 LU_EXIT_IFERROR(status);
346
347 DAQ_Format_AppendBuffer_offset(&daq_temp,&daq_reply,CAL_SKIP_HEADER);
348
349 DAQ_Format_CMD_Empty(&CAL_TempPif2);
350
351 if (RM_Init_Before_Calib)
352 {
353 if(fe & CAL_DSP_MASK)
354 {
355 DAQ_Format_CMD_Empty(&CAL_TempPif2);
356 DAQ_Format_Fe2Daq(&CAL_TempPif2,&CAL_WRITE_DSP_MEM_I41,idaqfe);
357 DAQ_Format_Fe2Daq(&CAL_TempPif2,&CAL_WRITE_DSP_MEM_I42,idaqfe);
358 DAQ_Format_Fe2Daq(&CAL_TempPif2,&CAL_WRITE_DSP_MEM_I43,idaqfe);
359 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP3,&CAL_TempPif2);
360 LU_EXIT_IFERROR(status);
361 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP3,TRUE,&daq_reply,TRUE);
362 LU_EXIT_IFERROR(status);
363 DAQ_Format_AppendBuffer_offset(&daq_temp,&daq_reply,CAL_SKIP_HEADER);
364 }
365 }
366 else
367 CAL_DSP_MASK &=~fe;
368
369 if (daq_temp.len < 2); // go to reset
370
371 for (j=1; j <=10; j++)
372 {
373 ptr = (BYTE*)&daq_temp.buf[j*2];
374 CM_READ_BE_UINT16(ptr,temp,dummy);
375 if ((temp & 0x4007) != 0x4000)
376 goto INC_LOOP1;
377 }
378
379 if (fe & CAL_DSP_MASK)
380 {
381 for (j=11; j <= 13 ; j++)
382 {
383 ptr = (BYTE*)&daq_temp.buf[j*2];
384 CM_READ_BE_UINT16(ptr,temp,dummy);
385 if ((temp & 0x8007) != 0x8000)
386 goto INC_LOOP2;
387 }
388 }
389
390 continue;
391
392 INC_LOOP2:
393 if (++cal_loop2 < PRH_ARR_CAL_COUNT[1])
394 goto START_ACQ;
395
396 DAQ_Format_CMD_Empty(&CAL_TempPif3);
397 CH_GetBuf(CH_CAL_RESET_FE,&auto_buf);
398 DAQ_Format_Fe2Daq(&CAL_TempPif3,auto_buf,idaqfe);
399 CH_GetBuf(CH_CAL_WRITE_FPGA_REG_RAW,&auto_buf);
400 DAQ_Format_Fe2Daq(&CAL_TempPif3,auto_buf,idaqfe);
401
402 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP3,&CAL_TempPif3);
403 LU_EXIT_IFERROR(status);
404 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP3,TRUE,&daq_reply,FALSE);
405 LU_EXIT_IFERROR(status);
406
407 CAL_DSP_MASK&=~fe;
408 continue;
409
410 INC_LOOP1:
411 if (++cal_loop1 < PRH_ARR_CAL_COUNT[0])
412 goto START_ACQ;
413
414 CAL_FE_MASK&=~fe;
415 }
416
417 CAL_DSP_MASK&=~fe;
418 }
419
420 return status;
421 }
422
423 BOOL CAL_CheckCRC(int i,int val)
424 {
425 int j;
426
427 for (j=0; j < 4; j++)
428 if (val == CAL_CRC[i][j])
429 return(TRUE);
430
431 return(FALSE);
432 }
433
434
435 int CAL_GetWriteFPGARegChannel(int x)
436 {
437 int i=1;
438
439 if (x == 0)
440 return(CH_CAL_WRITE_FPGA_REG_0000);
441
442 if (x < 0x8005)
443 while (x = (x >> 1)) i++;
444 else
445 {
446 switch(x)
447 {
448 case 0x8005: i = 17;
449 break;
450 case 0x8015: i = 18;
451 break;
452 case 0xc2: i = 19;
453 }
454 }
455 return(i+CH_CAL_WRITE_FPGA_REG_0000);
456 }
457
458 status_code CAL_Pulse(int cal_dsp_mask,int channel,int cal_vcal)
459 {
460 UINT16 fe,i;
461 DAQ_FE idaqfe;
462 status_code status;
463 DAQ_CMD_BUF* auto_buf;
464
465 for(idaqfe=DAQ_FE_CAL_1,fe=0x0001; idaqfe <= DAQ_FE_CAL_4; idaqfe++ , fe <<=1)
466 {
467 if (fe & cal_dsp_mask)
468 {
469 DAQ_Format_CMD_Empty(&CAL_TempPif1);
470
471 CH_GetBuf(CH_CAL_RESET_FE,&auto_buf);
472 DAQ_Format_Fe2Daq(&CAL_TempPif1,auto_buf,idaqfe);
473 CH_GetBuf(CAL_GetWriteFPGARegChannel(channel),&auto_buf);
474 DAQ_Format_Fe2Daq(&CAL_TempPif1,auto_buf,idaqfe);
475 CH_GetBuf(CAL_GetWriteFPGARegChannel(cal_vcal),&auto_buf);
476 DAQ_Format_Fe2Daq(&CAL_TempPif1,auto_buf,idaqfe);
477
478 DAQ_StoreCmdQueue2PIF(SM_CALEXP1,&CAL_TempPif1);
479 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP1,TRUE,&daq_reply,FALSE);
480 LU_EXIT_IFERROR(status);
481 }
482 }
483
484 // status = DAQ_StoreCmdQueue2PIF(SM_CALEXP0,&CAL_TempPif0);
485 // LU_EXIT_IFERROR(status);
486 status = CAL_SendTrigger(SM_CALEXP0,130);
487 LU_EXIT_IFERROR(status);
488
489 return(CM_RC_SUCCESSFUL);
490 }
491
492
493 status_code CAL_ReadPulseData(UINT16 fe_mask)
494 {
495 DAQ_FE idaqfe;
496 DAQ_CMD_BUF *auto_buf;
497 status_code status = CM_RC_SUCCESSFUL;
498 UINT16 fe;
499
500 for(idaqfe=DAQ_FE_CAL_1,fe = 0x0001; idaqfe <= DAQ_FE_CAL_4; idaqfe++ , fe <<=1)
501 {
502 if (fe & fe_mask)
503 {
504 DAQ_Format_CMD_Empty(&CAL_TempPif2);
505 CH_GetBuf(CH_CAL_READ_EVENT_DATA,&auto_buf);
506 DAQ_Format_Fe2Daq(&CAL_TempPif2,auto_buf,idaqfe);
507 DAQ_Format_Fe2Daq(&CAL_TempPif2,&CAL_READ_DSP_MEM_C32,idaqfe);
508 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP2,&CAL_TempPif2);
509 LU_EXIT_IFERROR(status);
510 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP2,TRUE,&daq_reply,FALSE);
511 LU_EXIT_IFERROR(status);
512 }
513 }
514
515 return status;
516 }
517
518 BOOL CAL_Pack(DAQ_CMD_BUF *buffer)
519 {
520 int i;
521 UINT16 temp,dummy;
522 long int chped,chped2,chthr2,chthr;
523 BYTE *ptr;
524 UINT32 w1,w2;
525
526 chped2 = 0; chthr2 =0;
527 temp = 0;
528
529 ptr = &buffer->buf[CAL_SKIP_HEADER+6*2];
530
531 for(i=0; i < 1056; i++)
532 {
533 CM_READ_BE_UINT16(ptr,temp,dummy);
534 ptr += 2;
535 chped2+=(short int)temp;
536 }
537
538 CM_READ_BE_UINT16(ptr,w1,dummy); ptr += 2;
539 CM_READ_BE_UINT16(ptr,w2,dummy); ptr += 2;
540
541 chped = (w1 & 0x0000ffff) | (w2 << 16);
542
543 for (i=0; i < 66; i++)
544 {
545 CM_READ_BE_UINT16(ptr,temp,dummy);
546 ptr += 2;
547 chthr2+=(short int)temp;
548 }
549
550 CM_READ_BE_UINT16(ptr,w1,dummy); ptr += 2;
551 CM_READ_BE_UINT16(ptr,w2,dummy);
552
553 chthr = (w1 & 0xffff) | (w2 << 16);
554
555 return((chped == chped2) && (chthr2 == chthr));
556 }
557
558
559
560 status_code CAL_Calibration()
561 {
562 DAQ_FE idaqfe;
563 UINT16 fe_mask,cal_raw_mask,cal_loop3,cal_loop4,repeat_fe,fe,data[6],dummy,alarm_reg;
564 BYTE *ptr;
565 int i,j;
566 status_code status;
567 DAQ_CMD_BUF* auto_buf;
568
569 DAQ_ResetPIF(DAQ_DEFAULT_ETO_TICS,DAQ_MAX_DTO_TICS,SM_DAQSETUP,HB_PKTTYPE_RSV_CAL_CALIB);
570
571 fe_mask = CAL_DSP_MASK;
572 cal_raw_mask = cal_loop3 = repeat_fe = 0;
573
574 REDO_CALIB:
575 cal_loop4 = 0;
576 DAQ_Format_CMD_Empty(&daq_temp);
577 DAQ_Format_CMD_Empty(&CAL_TempPif3);
578 PM_pi_SetPktType(HB_PKTTYPE_CALIB_CAL);
579
580 for(fe = 1,idaqfe=DAQ_FE_CAL_1; idaqfe <= DAQ_FE_CAL_4; idaqfe++ , fe <<=1 )
581 {
582 if (fe & fe_mask)
583 {
584 DAQ_Format_CMD_Empty(&CAL_TempPif1);
585 CH_GetBuf(CH_CAL_RESET_FE,&auto_buf);
586 DAQ_Format_Fe2Daq(&CAL_TempPif1,auto_buf,idaqfe);
587 DAQ_Format_Fe2Daq(&CAL_TempPif1,&CAL_WRITE_DSP_MEM_I41,idaqfe);
588 CH_GetBuf(CH_CAL_WRITE_FPGA_REG_C2,&auto_buf);
589 DAQ_Format_Fe2Daq(&CAL_TempPif1,auto_buf,idaqfe);
590
591 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP1,&CAL_TempPif1);
592 LU_EXIT_IFERROR(status);
593 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP1,DAQ_STORE_MM,&daq_reply,DAQ_NO_STORE_RAM);
594 LU_EXIT_IFERROR(status);
595 }
596 }
597
598 DAQ_Format_CMD_Empty(&CAL_TempPif0);
599 CH_GetBuf(CH_TB_GIVE_ME_TRIGGER,&auto_buf );
600 DAQ_Format_Cmd2Fe(&CAL_TempPif0,auto_buf,DAQ_SELECT_TRIG(PRH_VAR_TB_LINK));
601
602 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP0,&CAL_TempPif0);
603 LU_EXIT_IFERROR(status);
604
605
606 status = CAL_SendTrigger(SM_CALEXP0,1850);
607 LU_EXIT_IFERROR(status);
608
609 fe = 0x0001;
610
611 for(idaqfe=DAQ_FE_CAL_1, j=0; idaqfe <= DAQ_FE_CAL_4; idaqfe++ , fe <<=1, j++ )
612 {
613 if (fe & fe_mask)
614 {
615 CH_GetBuf(CH_CAL_READ_EVENT_DATA,&auto_buf);
616 DAQ_Format_CMD_Empty(&CAL_TempPif2);
617 DAQ_Format_Fe2Daq(&CAL_TempPif2,auto_buf,idaqfe);
618 DAQ_Format_Fe2Daq(&CAL_TempPif2,&CAL_READ_DSP_MEM_C31,idaqfe);
619
620 PM_pi_SetPktType(HB_PKTTYPE_CALIB_CAL_PED);
621 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP2,&CAL_TempPif2);
622 LU_EXIT_IFERROR(status);
623 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP2,DAQ_STORE_MM,&daq_reply,DAQ_STORE_RAM);
624 LU_EXIT_IFERROR(status);
625
626 for (i = 0, ptr = &daq_reply.buf[CAL_SKIP_HEADER]; i < 6; i++)
627 CM_READ_BE_UINT16(ptr,data[i],dummy);
628
629 if (!(
630 ((data[0] & 0xe047) == 0xe000) &&
631 (data[1]==2) &&
632 (data[2]==0) &&
633 (CAL_CheckCRC(j,data[3])) &&
634 ((data[4] & 0xe047)==0xa000) &&
635 (data[5]==0x1215) &&
636 CAL_Pack(&daq_reply)
637 ))
638 {
639 repeat_fe+=fe;
640 cal_loop4 = 1;
641 }
642 }
643 }
644
645 if (cal_loop4)
646 {
647 if (cal_loop3 == PRH_ARR_CAL_COUNT[2])
648 {
649 for(idaqfe=DAQ_FE_CAL_1, fe = 1; idaqfe <= DAQ_FE_CAL_4; idaqfe++ , fe <<=1)
650 {
651 if (fe & repeat_fe)
652 {
653 CH_GetBuf(CH_CAL_RESET_FE,&auto_buf);
654 DAQ_Format_CMD_Empty(&CAL_TempPif3);
655 DAQ_Format_Fe2Daq(&CAL_TempPif3,auto_buf,idaqfe);
656 CH_GetBuf(CH_CAL_WRITE_FPGA_REG_RAW,&auto_buf);
657 DAQ_Format_Fe2Daq(&CAL_TempPif3,auto_buf,idaqfe);
658 CAL_DSP_MASK &=~fe;
659 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP3,&CAL_TempPif3);
660 LU_EXIT_IFERROR(status);
661 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP3,DAQ_STORE_MM,&daq_reply,DAQ_NO_STORE_RAM);
662 LU_EXIT_IFERROR(status);
663 }
664 }
665 }
666 else
667 {
668 cal_loop3++;
669 fe_mask = repeat_fe;
670 repeat_fe=0;
671 goto REDO_CALIB;
672 }
673 }
674
675 PM_pi_SetPktType(HB_PKTTYPE_CALIB_CAL_PULSE1);
676
677 status = CAL_Pulse(CAL_DSP_MASK,0,PRH_VAR_CAL_VCAL);
678 LU_EXIT_IFERROR(status);
679
680 status = CAL_ReadPulseData(CAL_DSP_MASK);
681 LU_EXIT_IFERROR(status);
682
683 PM_pi_SetPktType(HB_PKTTYPE_CALIB_CAL_PULSE2);
684
685 status = CAL_Pulse(CAL_DSP_MASK,PRH_VAR_CAL_CH,PRH_VAR_CAL_VCAL);
686 LU_EXIT_IFERROR(status);
687 status = CAL_ReadPulseData(CAL_DSP_MASK);
688 LU_EXIT_IFERROR(status);
689
690 if (PRH_VAR_CAL_CH == 0x8000)
691 {
692 PRH_VAR_CAL_CH = 0x0001;
693
694 if (PRH_VAR_CAL_VCAL == 0x8005)
695 PRH_VAR_CAL_VCAL = 0x8015;
696 else
697 PRH_VAR_CAL_VCAL = 0x8005;
698 }
699 else
700 PRH_VAR_CAL_CH*=2;
701
702 return status;
703 }
704
705 status_code CAL_Error_Handler()
706 {
707 DAQ_FE idaqfe;
708 int i,bit_count;
709 BYTE *ptr,dummy;
710 UINT16 idaq_status,fe,data[4];
711 UINT32 alarm_reg;
712 UINT32 cal_count=0;
713 status_code status = CM_RC_SUCCESSFUL;
714 DAQ_CMD_BUF* auto_buf;
715 BOOL check_ok;
716
717 DAQ_ResetPIF(DAQ_DEFAULT_ETO_TICS,DAQ_DEFAULT_DTO_TICS,SM_DAQSETUP,HB_PKTTYPE_CAL_ALARM);
718
719 status = HK_ReadKHBAlarmRegister(&alarm_reg);
720 LU_EXIT_IFERROR(status);
721
722 alarm_reg&=(KHB_ALARM_CALO_1 | KHB_ALARM_CALO_2 | KHB_ALARM_CALO_3 | KHB_ALARM_CALO_4);
723
724 alarm_reg>>=4;
725
726
727 for(idaqfe=DAQ_FE_CAL_1,fe=0x0001; idaqfe <= DAQ_FE_CAL_4; idaqfe++, fe <<=1)
728 {
729 if (fe & alarm_reg)
730 {
731 DAQ_Format_CMD_Empty(&CAL_TempPif0);
732 CH_GetBuf(CH_CAL_READ_ALARM,&auto_buf);
733 DAQ_Format_Fe2Daq(&CAL_TempPif0,auto_buf,idaqfe);
734
735 for(i=0; i < 7; i++)
736 {
737 CH_GetBuf(CAL_CAL_READ_FPGA_REG_BASE_ID+i,&auto_buf);
738 DAQ_Format_Fe2Daq(&CAL_TempPif0,auto_buf,idaqfe);
739 }
740
741 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP0,&CAL_TempPif0);
742 if (status)
743 {
744 status = CM_RC_DO_RESET_IF_ALM;
745 LU_EXIT_IFERROR(status);
746 }
747
748 cal_count = 0; check_ok = FALSE;
749
750 while ((cal_count < PRH_ARR_CAL_COUNT[3]) && (status == CM_RC_SUCCESSFUL) && !check_ok)
751 {
752 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP0,TRUE,&daq_reply,DAQ_STORE_RAM);
753
754 if (status == CM_RC_SUCCESSFUL)
755 {
756 if (daq_reply.len < 2 + CAL_SKIP_HEADER)
757 status = CM_RC_DO_RESET_IF_ALM;
758 else
759 {
760 ptr = &daq_reply.buf[CAL_SKIP_HEADER];
761 CM_READ_BE_UINT16(ptr,data[0],dummy);
762 CM_READ_BE_UINT16(ptr,data[1],dummy);
763 CM_READ_BE_UINT16(ptr,data[2],dummy);
764 CM_READ_BE_UINT16(ptr,data[3],dummy);
765
766 if (((data[0] & 0xE007) == 0x2000) && (data[1] == 3))
767 check_ok = TRUE;
768 }
769
770 cal_count++;
771 }
772 else
773 status = CM_RC_DO_RESET_IF_ALM;
774 }
775
776 LU_EXIT_IFERROR(status);
777
778 if (check_ok)
779 {
780 if ((data[0] & 0x0020) == 0x0020)
781 {
782 bit_count = 0;
783
784 for(i=0; i < 11; i++)
785 {
786 if (data[3] & 1)
787 bit_count++;
788
789 data[3]>>=1;
790 }
791
792 if (bit_count > PRH_VAR_CAL_TEMP)
793 {
794 DAQ_Format_CMD_Empty(&CAL_TempPif0);
795
796 CH_GetBuf(CH_CAL_RESET_FE,&auto_buf);
797 DAQ_Format_Fe2Daq(&CAL_TempPif0,auto_buf,idaqfe);
798
799 DAQ_Format_Fe2Daq(&CAL_TempPif0,&CAL_WRITE_FPGA_REG_OFF,idaqfe);
800
801 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP0,&CAL_TempPif0);
802 if (status)
803 {
804 status = CM_RC_DO_RESET_IF_ALM;
805 LU_EXIT_IFERROR(status);
806 }
807
808 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP0,TRUE,&daq_reply,TRUE);
809 if (status)
810 {
811 status = CM_RC_DO_RESET_IF_ALM;
812 LU_EXIT_IFERROR(status);
813 }
814
815 status = RM_TaskSuspendUnlessSINT(100);
816 if (status)
817 {
818 status = CM_RC_DO_RESET_IF_ALM;
819 LU_EXIT_IFERROR(status);
820 }
821
822 DAQ_Format_CMD_Empty(&CAL_TempPif0);
823 CH_GetBuf(CH_CAL_READ_ALARM,&auto_buf);
824 DAQ_Format_Fe2Daq(&CAL_TempPif0,auto_buf,idaqfe);
825
826 status = DAQ_StoreCmdQueue2PIF(SM_CALEXP0,&CAL_TempPif0);
827 if (status)
828 {
829 status = CM_RC_DO_RESET_IF_ALM;
830 LU_EXIT_IFERROR(status);
831 }
832
833 status = DAQ_SendCmd2PIFWaitDAQReply(SM_CALEXP0,TRUE,&daq_reply,TRUE);
834 if (status)
835 {
836 status = CM_RC_DO_RESET_IF_ALM;
837 LU_EXIT_IFERROR(status);
838 }
839 CAL_FE_MASK &=~fe;
840 CAL_DSP_MASK &=~fe;
841 }
842 }
843 }
844 else
845 // CAL_FE_MASK&=~fe;
846 ;
847 }
848 }
849
850 status = DAQ_ReadStatusWord(&idaq_status);
851 if (status)
852 status = CM_RC_DO_RESET_IF_ALM;
853
854 return status;
855 }

  ViewVC Help
Powered by ViewVC 1.1.23