| Line 72... |
Line 72... |
| 72 |
void TDC_reset() |
72 |
void TDC_reset() |
| 73 |
{ |
73 |
{ |
| 74 |
output_low(TDC_ENABLE); |
74 |
output_low(TDC_ENABLE); |
| 75 |
spi_xfer(TDC_stream,0x50,8); |
75 |
spi_xfer(TDC_stream,0x50,8); |
| 76 |
output_high(TDC_ENABLE); |
76 |
output_high(TDC_ENABLE); |
| - |
|
77 |
|
| - |
|
78 |
//reset registers settings to default |
| - |
|
79 |
|
| - |
|
80 |
firenum=TDC_FIRENUM_0; |
| - |
|
81 |
div_fire=TDC_DIV_FIRE_2; |
| - |
|
82 |
calresnum=TDC_CALPERIODS_2; |
| - |
|
83 |
clkhsdiv=TDC_CLKHSDIV_1; |
| - |
|
84 |
start_clkhs=TDC_CLKHS_ON; |
| - |
|
85 |
portnum=TDC_TPORTNUM_4; |
| - |
|
86 |
Tcycle=TDC_TCYCLE_SHORT; |
| - |
|
87 |
fakenum=TDC_TFAKENUM_2; |
| - |
|
88 |
selclkT=TDC_TSELCLK_128HS; |
| - |
|
89 |
calibrate=TDC_CALIBRATE_EN; |
| - |
|
90 |
disautocal=TDC_AUTOCAL_EN; |
| - |
|
91 |
MRange=TDC_MRANGE2; |
| - |
|
92 |
neg_stop2=TDC_NEG_STOP2; |
| - |
|
93 |
neg_stop1=TDC_NEG_STOP1; |
| - |
|
94 |
neg_start=TDC_NEG_START; |
| - |
|
95 |
hit2=TDC_MRANGE1_HIT2_NOAC; |
| - |
|
96 |
hit1=TDC_MRANGE1_HIT1_NOAC; |
| - |
|
97 |
fast_init=TDC_FAST_INIT_DIS; |
| - |
|
98 |
hitin2=TDC_HITIN2_0; |
| - |
|
99 |
hitin1=TDC_HITIN1_0; |
| - |
|
100 |
en_int=TDC_INT_ALU; |
| - |
|
101 |
rfedge2=TDC_CH2EDGE_RIS; |
| - |
|
102 |
rfedge1=TDC_CH1EDGE_RIS; |
| - |
|
103 |
en_err_val=TDC_ERRVAL_DIS; |
| - |
|
104 |
tim0_mr2=TDC_TIM0MR2_16384CLKHS; |
| - |
|
105 |
delval1=0; |
| - |
|
106 |
delval2=0; |
| - |
|
107 |
delval3=0; |
| - |
|
108 |
conf_fire=0; |
| - |
|
109 |
en_startnoise=TDC_STARTNOISE_DIS; |
| - |
|
110 |
dis_phasenoise=TDC_PHASENOISE_DIS; |
| - |
|
111 |
repeat_fire=TDC_REPEAT_FIRE_0; |
| - |
|
112 |
phase_fire=0; |
| 77 |
} |
113 |
} |
| 78 |
|
114 |
|
| 79 |
void TDC_start_cycle() |
115 |
void TDC_start_cycle() |
| 80 |
{ |
116 |
{ |
| 81 |
output_low(TDC_ENABLE); |
117 |
output_low(TDC_ENABLE); |
| Line 104... |
Line 140... |
| 104 |
output_high(TDC_ENABLE); |
140 |
output_high(TDC_ENABLE); |
| 105 |
} |
141 |
} |
| 106 |
|
142 |
|
| 107 |
unsigned int32 TDC_get_measurement(int num) |
143 |
unsigned int32 TDC_get_measurement(int num) |
| 108 |
{ |
144 |
{ |
| 109 |
unsigned int32 ret; |
145 |
unsigned int32 ret=0; |
| 110 |
|
146 |
|
| 111 |
output_low(TDC_ENABLE); |
147 |
output_low(TDC_ENABLE); |
| 112 |
spi_xfer(TDC_stream,0xB0 + num - 1, 8); |
148 |
spi_xfer(TDC_stream,0xB0 + num - 1, 8); |
| 113 |
ret=spi_xfer(TDC_stream,0,32); |
149 |
ret=spi_xfer(TDC_stream,0,32); |
| 114 |
output_high(TDC_ENABLE); |
150 |
output_high(TDC_ENABLE); |
| Line 209... |
Line 245... |
| 209 |
spi_xfer(TDC_stream,repeat_fire,3); |
245 |
spi_xfer(TDC_stream,repeat_fire,3); |
| 210 |
spi_xfer(TDC_stream,phase_fire,16); |
246 |
spi_xfer(TDC_stream,phase_fire,16); |
| 211 |
output_high(TDC_ENABLE); |
247 |
output_high(TDC_ENABLE); |
| 212 |
} |
248 |
} |
| 213 |
|
249 |
|
| 214 |
float TDC_mrange2_get_time(unsigned int shot) |
250 |
float TDC_mrange2_get_time(unsigned int shot) // read start to stop time distance of desired shot |
| 215 |
{ |
251 |
{ |
| 216 |
unsigned int32 measurement; |
252 |
unsigned int32 measurement; |
| 217 |
float time; |
253 |
float time; |
| 218 |
|
254 |
|
| 219 |
switch (shot) |
255 |
switch (shot) // determine which shot is desired to compute |
| 220 |
{ |
256 |
{ |
| 221 |
case 1: |
257 |
case 1: |
| 222 |
hit2=TDC_MRANGE2_HIT2_1CH1; |
258 |
hit2=TDC_MRANGE2_HIT2_1CH1; |
| 223 |
break; |
259 |
break; |
| 224 |
|
260 |
|
| Line 228... |
Line 264... |
| 228 |
|
264 |
|
| 229 |
case 3: |
265 |
case 3: |
| 230 |
hit2=TDC_MRANGE2_HIT2_3CH1; |
266 |
hit2=TDC_MRANGE2_HIT2_3CH1; |
| 231 |
break; |
267 |
break; |
| 232 |
} |
268 |
} |
| 233 |
TDC_update_reg1(); // tell to ALU which shot period must be computed |
269 |
TDC_update_reg1(); // tell ALU which shot period must be computed |
| 234 |
|
270 |
|
| 235 |
Delay_ms(50); // wait to computing of result |
271 |
Delay_ms(50); // wait to computing of result |
| 236 |
|
272 |
|
| 237 |
measurement=TDC_get_measurement(7&TDC_get_status()); // read computed value on pointer result register address |
273 |
measurement=TDC_get_measurement(7&TDC_get_status()); // read computed value on pointer result register address |
| 238 |
|
274 |
|
| 239 |
|
275 |
|
| 240 |
switch (clkhsdiv) |
276 |
switch (clkhsdiv) // calibrate measurement data to microseconds from known register setting |
| 241 |
{ |
277 |
{ |
| 242 |
case TDC_CLKHSDIV_1: |
278 |
case TDC_CLKHSDIV_1: |
| 243 |
time=(measurement/65536.0) * 1.0e6/TDC_CLKHS; |
279 |
time=(measurement/65536.0) * 1.0e6/TDC_CLKHS; |
| 244 |
break; |
280 |
break; |
| 245 |
|
281 |
|