DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
WIB_CDS.cpp
Go to the documentation of this file.
1#include "wibmod/WIB1/WIB.hh"
2#include <unistd.h> // usleep
3
5
6#define COURSE_DATARATE_SIZE 232
8 5.3745e+06, 5.3741e+06, 5.4793e+06, 5.5912e+06, 5.7111e+06, 5.8391e+06, 5.9760e+06, 6.1215e+06, 6.2780e+06,
9 6.4565e+06, 6.6391e+06, 6.8372e+06, 7.0520e+06, 7.2868e+06, 7.5424e+06, 7.8220e+06, 7.6663e+06, 7.6659e+06,
10 7.8217e+06, 7.9880e+06, 8.1667e+06, 8.3570e+06, 8.5616e+06, 8.7805e+06, 9.0166e+06, 9.2849e+06, 9.5608e+06,
11 9.8591e+06, 1.0183e+07, 1.0535e+07, 1.0918e+07, 1.1332e+07, 1.0749e+07, 1.0748e+07, 1.0959e+07, 1.1182e+07,
12 1.1422e+07, 1.1678e+07, 1.1952e+07, 1.2243e+07, 1.2556e+07, 1.2913e+07, 1.3278e+07, 1.3674e+07, 1.4104e+07,
13 1.4574e+07, 1.5085e+07, 1.5644e+07, 1.5333e+07, 1.5332e+07, 1.5643e+07, 1.5976e+07, 1.6333e+07, 1.6714e+07,
14 1.7123e+07, 1.7561e+07, 1.8033e+07, 1.8570e+07, 1.9122e+07, 1.9718e+07, 2.0367e+07, 2.1070e+07, 2.1835e+07,
15 2.2664e+07, 2.1498e+07, 2.1496e+07, 2.1917e+07, 2.2365e+07, 2.2844e+07, 2.3357e+07, 2.3904e+07, 2.4486e+07,
16 2.5112e+07, 2.5826e+07, 2.6556e+07, 2.7349e+07, 2.8208e+07, 2.9147e+07, 3.0170e+07, 3.1288e+07, 3.0665e+07,
17 3.0664e+07, 3.1287e+07, 3.1952e+07, 3.2667e+07, 3.3428e+07, 3.4246e+07, 3.5122e+07, 3.6066e+07, 3.7140e+07,
18 3.8243e+07, 3.9436e+07, 4.0733e+07, 4.2140e+07, 4.3671e+07, 4.5328e+07, 4.2996e+07, 4.2993e+07, 4.3834e+07,
19 4.4729e+07, 4.5688e+07, 4.6713e+07, 4.7808e+07, 4.8972e+07, 5.0224e+07, 5.1652e+07, 5.3113e+07, 5.4698e+07,
20 5.6416e+07, 5.8295e+07, 6.0339e+07, 6.2576e+07, 6.1331e+07, 6.1328e+07, 6.2574e+07, 6.3904e+07, 6.5334e+07,
21 6.6856e+07, 6.8493e+07, 7.0244e+07, 7.2133e+07, 7.4279e+07, 7.6486e+07, 7.8872e+07, 8.1467e+07, 8.4279e+07,
22 8.7341e+07, 9.0657e+07, 8.5991e+07, 8.5986e+07, 8.7668e+07, 8.9458e+07, 9.1377e+07, 9.3426e+07, 9.5616e+07,
23 9.7944e+07, 1.0045e+08, 1.0330e+08, 1.0623e+08, 1.0940e+08, 1.1283e+08, 1.1659e+08, 1.2068e+08, 1.2515e+08,
24 1.2266e+08, 1.2266e+08, 1.2515e+08, 1.2781e+08, 1.3067e+08, 1.3371e+08, 1.3699e+08, 1.4049e+08, 1.4427e+08,
25 1.4856e+08, 1.5297e+08, 1.5774e+08, 1.6293e+08, 1.6856e+08, 1.7468e+08, 1.8131e+08, 1.7198e+08, 1.7197e+08,
26 1.7534e+08, 1.7892e+08, 1.8275e+08, 1.8685e+08, 1.9123e+08, 1.9589e+08, 2.0089e+08, 2.0661e+08, 2.1245e+08,
27 2.1879e+08, 2.2566e+08, 2.3318e+08, 2.4136e+08, 2.5030e+08, 2.4532e+08, 2.4531e+08, 2.5029e+08, 2.5562e+08,
28 2.6134e+08, 2.6742e+08, 2.7397e+08, 2.8098e+08, 2.8853e+08, 2.9712e+08, 3.0594e+08, 3.1549e+08, 3.2587e+08,
29 3.3712e+08, 3.4936e+08, 3.6263e+08, 3.4397e+08, 3.4394e+08, 3.5067e+08, 3.5783e+08, 3.6551e+08, 3.7370e+08,
30 3.8247e+08, 3.9177e+08, 4.0179e+08, 4.1322e+08, 4.2490e+08, 4.3758e+08, 4.5133e+08, 4.6636e+08, 4.8272e+08,
31 5.0061e+08, 4.9064e+08, 4.9062e+08, 5.0059e+08, 5.1123e+08, 5.2267e+08, 5.3485e+08, 5.4794e+08, 5.6195e+08,
32 5.7706e+08, 5.9423e+08, 6.1189e+08, 6.3098e+08, 6.5173e+08, 6.7423e+08, 6.9873e+08, 7.2525e+08, 6.8793e+08,
33 6.8789e+08, 7.0135e+08, 7.1567e+08, 7.3102e+08, 7.4741e+08, 7.6493e+08, 7.8355e+08
34};
35
36void
37WIB::WriteDTS_CDS(uint16_t address, uint32_t value, uint8_t byte_count, bool ignore_error)
38{
39 WriteI2C("DTS.CDS.I2C", address, value, byte_count, ignore_error);
40}
41uint32_t
42WIB::ReadDTS_CDS(uint16_t address, uint8_t byte_count)
43{
44 return ReadI2C("DTS.CDS.I2C", address, byte_count);
45}
46
47float
48WIB::ConfigureDTSCDS(uint8_t source)
49{
50 if (source > 1) {
51 BUException::WIB_BAD_ARGS e;
52 e.Append("Bad DTS CDS clock source");
53 throw e;
54 }
55
56 // Set timing system source (FP:0 BP:1)
57 WriteWithRetry("DTS.CDS.INPUT_SELECT", source);
58
59 // Reset the I2C firmware
60 WriteWithRetry("DTS.CDS.I2C.RESET", 1);
61 // Reset the CDS chip (ADN2814)
62 WriteDTS_CDS(0x9, 0x20, 1);
63 usleep(500000);
64
65 // Reset the I2C firmware
66 WriteWithRetry("DTS.CDS.I2C.RESET", 1);
67 // Un reset
68 WriteDTS_CDS(0x9, 0x00, 1, true);
69 // Reset the I2C firmware
70 WriteWithRetry("DTS.CDS.I2C.RESET", 1);
71 usleep(1000000);
72
73 // read bits 8 downto 1 from reg 3
74 uint16_t dataRateLookup = uint16_t(ReadDTS_CDS(0x3, 1)) << 1;
75 // Read bit 0 from reg 4
76 dataRateLookup |= uint16_t(ReadDTS_CDS(0x4, 1)) & 0x1;
77 if (dataRateLookup >= COURSE_DATARATE_SIZE) {
78 return -1;
79 }
80 return courseDataRates[dataRateLookup];
81}
static float courseDataRates[COURSE_DATARATE_SIZE]
Definition WIB_CDS.cpp:7
#define COURSE_DATARATE_SIZE
Definition WIB_CDS.cpp:6
void WriteWithRetry(uint16_t address, uint32_t value)
Definition WIBBase.cpp:163
void WriteI2C(std::string const &base_address, uint16_t I2C_address, uint32_t data, uint8_t byte_count=4, bool ignore_error=false)
Definition WIBBase.cpp:81
uint32_t ReadI2C(std::string const &base_address, uint16_t I2C_aaddress, uint8_t byte_count=4)
Definition WIBBase.cpp:44
uint32_t ReadDTS_CDS(uint16_t address, uint8_t byte_count=4)
Definition WIB_CDS.cpp:42
float ConfigureDTSCDS(uint8_t source=0)
Definition WIB_CDS.cpp:48
void WriteDTS_CDS(uint16_t address, uint32_t value, uint8_t byte_count=4, bool ignore_error=false)
Definition WIB_CDS.cpp:37