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 = |
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 = |
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 = |
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 = |
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 = |
926 | doubleval = sa02adc2Vm(val); |
| 893 | else |
927 | else |
| 894 | doubleval = |
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 = |
939 | doubleval = sa02adc2Vm(val); |
| 906 | else |
940 | else |
| 907 | doubleval = |
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 = |
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 = |
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 = |
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 = |
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; |