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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide 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 kusanagi 1.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