Subversion Repositories f9daq

Rev

Rev 326 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 326 Rev 357
Line 110... Line 110...
110
    case 3:
110
    case 3:
111
      return 1;
111
      return 1;
112
  }
112
  }
113
  return i;
113
  return i;
114
};
114
};
-
 
115
 
-
 
116
#define ADC_VCC 3.3
-
 
117
#define AMP_IB_min -1.15e-6
-
 
118
#define ADC_IB_min 2355
-
 
119
#define AMP_IB_max 0.2e-6
-
 
120
#define ADC_IB_max 2665
-
 
121
 
-
 
122
double sa02ampIb(int adc) {
-
 
123
  if (adc <= ADC_IB_min) return AMP_IB_min;
-
 
124
  if (adc > ADC_IB_max) return AMP_IB_max;
-
 
125
  return AMP_IB_min + ((AMP_IB_max-AMP_IB_min)/(ADC_IB_max-ADC_IB_min)) * (adc - ADC_IB_min);
-
 
126
}
-
 
127
             
-
 
128
double sa02adc2V(int adc) {
-
 
129
  adc &=0xFFF;
-
 
130
  return ADC_VCC * (double)adc/4096;
-
 
131
}
-
 
132
 
-
 
133
double sa02adc2Vp(int adc) {
-
 
134
  adc &=0xFFF;
-
 
135
  return ADC_VCC * (double)adc/4096 + 1.0e+4 * sa02ampIb(adc);
-
 
136
}
-
 
137
 
-
 
138
double sa02adc2Vm(int adc) {
-
 
139
  adc &=0xFFF;
-
 
140
  return ADC_VCC * (2. * (double)adc/4096. - 1.) + 5.1e+4 * sa02ampIb(adc);
-
 
141
}
-
 
142
 
-
 
143
double sa02adc2V38(int adc) {
-
 
144
  adc &=0xFFF;
-
 
145
  return ADC_VCC * (2. * (double)adc/4096.) + 5.1e+4 * sa02ampIb(adc);
-
 
146
}
-
 
147
 
-
 
148
double sa02adc2Va(int adc) {
-
 
149
  adc &=0xFFF;
-
 
150
  return ADC_VCC * (double)adc/4096. - (ADC_VCC/2. + 0.06);
-
 
151
}
115
 
152
 
116
//-------------------------------------------------------------------------
153
//-------------------------------------------------------------------------
117
 
154
 
118
uint32_t  sa02Write(uint32_t sa02BoardNumber, uint32_t regh, uint32_t regl, uint32_t *response)
155
uint32_t  sa02Write(uint32_t sa02BoardNumber, uint32_t regh, uint32_t regl, uint32_t *response)
119
 
156
 
Line 134... Line 171...
134
}
171
}
135
 
172
 
136
//-------------------------------------------------------------------------
173
//-------------------------------------------------------------------------
137
int Sa02DaqMode (uint32_t mode) {
174
int Sa02DaqMode (uint32_t mode) {
138
  VME_A32D32_W(sa02Address+FEB_DAQMODE,mode);
175
  VME_A32D32_W(sa02Address+FEB_DAQMODE,mode);
139
  return 0;
176
  return 0;
140
}
177
}
141
 
178
 
142
int Sa02SetPtsOutput(uint32_t mask) {
179
int Sa02SetPtsOutput(uint32_t mask) {
143
  VME_A32D32_W(sa02Address+FEB_DEBUGMON,mask);
180
  VME_A32D32_W(sa02Address+FEB_DEBUGMON,mask);
144
  return 0;
181
  return 0;
145
}
182
}
146
 
183
 
147
int Sa02SetNeve (uint32_t neve) {
184
int Sa02SetNeve (uint32_t neve) {
148
 
185
 
149
  VME_A32D32_W(sa02Address+FEB_SETNEVE,neve);
186
  VME_A32D32_W(sa02Address+FEB_SETNEVE,neve);
150
  return 0;
187
  return 0;
151
}
188
}
152
 
189
 
153
uint32_t Sa02GetNeve (uint32_t*inputtriggers) {
190
uint32_t Sa02GetNeve (uint32_t*inputtriggers) {
154
  uint32_t neve=0;
191
  uint32_t neve=0;
155
  VME_A32D32_R(sa02Address+FEB_GETNEVE,&neve);
192
  VME_A32D32_R(sa02Address+FEB_GETNEVE,&neve);
156
  *inputtriggers = (neve >> 16)  &0xFFFF;
193
  *inputtriggers = (neve >> 16)  &0xFFFF;
Line 170... Line 207...
170
  return neve;
207
  return neve;
171
}
208
}
172
 
209
 
173
int sa02Reset1( void ) {
210
int sa02Reset1( void ) {
174
  uint32_t rdy=1;
211
  uint32_t rdy=1;
175
 
212
 
176
  VME_A32D32_W(sa02Address+FEB_DATA_RST,rdy);
213
  VME_A32D32_W(sa02Address+FEB_DATA_RST,rdy);
177
 
214
 
178
  return 0;
215
  return 0;
179
}
216
}
180
 
217
 
Line 194... Line 231...
194
  return 0;
231
  return 0;
195
}
232
}
196
 
233
 
197
int Sa02SelectTriggerWithMaskAndLength (uint32_t trg, uint32_t mask, uint32_t len) {
234
int Sa02SelectTriggerWithMaskAndLength (uint32_t trg, uint32_t mask, uint32_t len) {
198
  VME_A32D32_W(sa02Address+FEB_SELTRG, trg | (mask << 4) | (len << 16) );
235
  VME_A32D32_W(sa02Address+FEB_SELTRG, trg | (mask << 4) | (len << 16) );
199
  return 0;
236
  return 0;
200
}
237
}
201
 
-
 
202
 
238
 
203
int Sa02SoftwareTrigger (void ) {
239
int Sa02SoftwareTrigger (void ) {
204
  uint32_t rdy =1;
240
  uint32_t rdy =1;
205
  VME_MWRST();
241
  VME_MWRST();
206
  VME_MW(VME_A32, VME_D32,sa02Address+FEB_SWTRG,rdy);
242
  VME_MW(VME_A32, VME_D32,sa02Address+FEB_SWTRG,rdy);
207
  VME_MWEXEC();
243
  VME_MWEXEC();
208
  return 0;
244
  return 0;
209
}
245
}
210
 
-
 
211
 
-
 
212
 
246
 
213
int Sa02TestPulseEnable (uint32_t board, uint32_t enable ) {
247
int Sa02TestPulseEnable (uint32_t board, uint32_t enable ) {
214
 
248
 
215
  uint32_t response[2]= {0,0};
249
  uint32_t response[2]= {0,0};
216
  return sa02Cmd(board,FEB_TP, enable, 0, 0 ,1,response);
250
  return sa02Cmd(board,FEB_TP, enable, 0, 0 ,1,response);
Line 845... Line 879...
845
  data=0x10;
879
  data=0x10;
846
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
880
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
847
  Delay(0.01);
881
  Delay(0.01);
848
  cmd=FEB_ADC_READ;
882
  cmd=FEB_ADC_READ;
849
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
883
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
850
  doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
884
  doubleval = sa02adc2Vp(val);
851
  sa02Printf("VDD   = %6.3f V\n",doubleval);
885
  sa02Printf("VDD   = %6.3f V\n",doubleval);
852
  sdata[i++]=doubleval;
886
  sdata[i++]=doubleval;
853
 
887
 
854
  cmd=FEB_MUX;
888
  cmd=FEB_MUX;
855
  data=0x11;
889
  data=0x11;
856
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
890
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
857
  Delay(0.01);
891
  Delay(0.01);
858
  cmd=FEB_ADC_READ;
892
  cmd=FEB_ADC_READ;
859
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
893
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
860
  doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
894
  doubleval = sa02adc2Vp(val);
861
  sa02Printf("V+2   = %6.3f V\n",doubleval);
895
  sa02Printf("V+2   = %6.3f V\n",doubleval);
862
  sdata[i++]=doubleval;
896
  sdata[i++]=doubleval;
863
 
897
 
864
  cmd=FEB_MUX;
898
  cmd=FEB_MUX;
865
  data=0x12;
899
  data=0x12;
866
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
900
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
867
  Delay(0.01);
901
  Delay(0.01);
868
  cmd=FEB_ADC_READ;
902
  cmd=FEB_ADC_READ;
869
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
903
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
870
  doubleval = (2*((val & 0xFFF) + 0.5)/0x1000 - 1.) * 3.3;
904
  doubleval = sa02adc2Vm(val);
871
  sa02Printf("V-2   = %6.3f V\n",doubleval);
905
  sa02Printf("V-2   = %6.3f V\n",doubleval);
872
  sdata[i++]=doubleval;
906
  sdata[i++]=doubleval;
873
 
907
 
874
 
908
 
875
  cmd=FEB_MUX;
909
  cmd=FEB_MUX;
876
  data=0x13;
910
  data=0x13;
877
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
911
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
878
  Delay(0.01);
912
  Delay(0.01);
879
  cmd=FEB_ADC_READ;
913
  cmd=FEB_ADC_READ;
880
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
914
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
881
  doubleval = (2*((val & 0xFFF) + 0.5)/0x1000 - 1.) * 3.3;
915
  doubleval = sa02adc2Vm(val);
882
  sa02Printf("VSS   = %6.3f V\n",doubleval);
916
  sa02Printf("VSS   = %6.3f V\n",doubleval);
883
  sdata[i++]=doubleval;
917
  sdata[i++]=doubleval;
884
 
918
 
885
  cmd=FEB_MUX;
919
  cmd=FEB_MUX;
886
  data=0x20;
920
  data=0x20;
887
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
921
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
888
  Delay(0.01);
922
  Delay(0.01);
889
  cmd=FEB_ADC_READ;
923
  cmd=FEB_ADC_READ;
890
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
924
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
891
  if (sa02BoardType>2)
925
  if (sa02BoardType>2)
892
    doubleval = (2*((val & 0xFFF) + 0.5)/0x1000 - 1.) * 3.3;
926
    doubleval = sa02adc2Vm(val);
893
  else
927
  else
894
    doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
928
    doubleval = sa02adc2V(val);
895
  sa02Printf("VTH1  = %6.3f V\n",doubleval);
929
  sa02Printf("VTH1  = %6.3f V\n",doubleval);
896
  sdata[i++]=doubleval;
930
  sdata[i++]=doubleval;
897
 
931
 
898
  cmd=FEB_MUX;
932
  cmd=FEB_MUX;
899
  data=0x30;
933
  data=0x30;
900
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
934
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
901
  Delay(0.01);
935
  Delay(0.01);
902
  cmd=FEB_ADC_READ;
936
  cmd=FEB_ADC_READ;
903
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
937
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
904
  if (sa02BoardType>2)
938
  if (sa02BoardType>2)
905
    doubleval = (2*((val & 0xFFF) + 0.5)/0x1000 - 1.) * 3.3;
939
    doubleval = sa02adc2Vm(val);
906
  else
940
  else
907
    doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
941
    doubleval = sa02adc2V(val);
908
  sa02Printf("VTH2  = %6.3f V\n",doubleval);
942
  sa02Printf("VTH2  = %6.3f V\n",doubleval);
909
  sdata[i++]=doubleval;
943
  sdata[i++]=doubleval;
910
 
944
 
911
  cmd=FEB_MUX;
945
  cmd=FEB_MUX;
912
  data=0x40;
946
  data=0x40;
913
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
947
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
914
  Delay(0.01);
948
  Delay(0.01);
915
  cmd=FEB_ADC_READ;
949
  cmd=FEB_ADC_READ;
916
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
950
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
917
  doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
951
  doubleval = sa02adc2Vp(val);
918
  sa02Printf("VCC12 = %6.3f V\n",doubleval);
952
  sa02Printf("VCC12 = %6.3f V\n",doubleval);
919
  sdata[i++]=doubleval;
953
  sdata[i++]=doubleval;
920
 
954
 
921
  cmd=FEB_MUX;
955
  cmd=FEB_MUX;
922
  data=0x50;
956
  data=0x50;
923
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
957
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
924
  Delay(0.01);
958
  Delay(0.01);
925
  cmd=FEB_ADC_READ;
959
  cmd=FEB_ADC_READ;
926
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
960
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
927
  doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
961
  doubleval = sa02adc2Vp(val);
928
  sa02Printf("VCC15 = %6.3f V\n",doubleval);
962
  sa02Printf("VCC15 = %6.3f V\n",doubleval);
929
  sdata[i++]=doubleval;
963
  sdata[i++]=doubleval;
930
 
964
 
931
  cmd=FEB_MUX;
965
  cmd=FEB_MUX;
932
  data=0x60;
966
  data=0x60;
933
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
967
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
934
  Delay(0.01);
968
  Delay(0.01);
935
  cmd=FEB_ADC_READ;
969
  cmd=FEB_ADC_READ;
936
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
970
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
937
  doubleval = ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
971
  doubleval = sa02adc2Vp(val);
938
  sa02Printf("VCC25 = %6.3f V\n",doubleval);
972
  sa02Printf("VCC25 = %6.3f V\n",doubleval);
939
  sdata[i++]=doubleval;
973
  sdata[i++]=doubleval;
940
 
974
 
941
  cmd=FEB_MUX;
975
  cmd=FEB_MUX;
942
  data=0x70;
976
  data=0x70;
943
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
977
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
944
  Delay(0.01);
978
  Delay(0.01);
945
  cmd=FEB_ADC_READ;
979
  cmd=FEB_ADC_READ;
946
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
980
  val=sa02Cmd(board, cmd, data, chip, channel ,1,response);
947
  doubleval = 2 * ((val & 0xFFF) + 0.5)/0x1000 * 3.3;
981
  doubleval = sa02adc2V38(val);
948
  sa02Printf("V+3.8 = %6.3f V\n",doubleval);
982
  sa02Printf("V+3.8 = %6.3f V\n",doubleval);
949
  sdata[i++]=doubleval;
983
  sdata[i++]=doubleval;
950
 
984
 
951
  cmd=FEB_MUX;
985
  cmd=FEB_MUX;
952
  data=0x00;
986
  data=0x00;