+++ /dev/null
-HowTo ADCM_v2\r
-=============\r
-\r
-Alle Skripte / Software befindet sich im TRB0 /home/hadaq/mboehmer/ !\r
-\r
-Anschalten: Board zieht ca. 2A in Vollbestückung, im konfigurierten Betrieb ca. 2.8A. Netzteil wird heiss!\r
-\r
-TRB: ./load_xilinx.sh\r
-\r
-Initialisieren: ./setaddress_sn000 -> TRBnet-Adresse 0x42 wird zugewiesen\r
-\r
-APVs klarmachen: ./init_apvs\r
-\r
-APVs syncen: ./trbbang T 3 0 aa bb cccc\r
-\r
-Sync-Event abholen: ./trbbang I 0 aa bb cccc\r
-\r
-Triggern: ./trbbang T 0 X aa bb cccc\r
-\r
-X: 0 -> RAW128 mode (all channels raw)\r
- 1 -> PED128 mode (all channels pedestal corrected)\r
- 2 -> PED128THR mode (mode 1 + threshold comparison)\r
- 3 -> reserved\r
- 4 -> NC64PED64\r
- 5 -> NC64\r
- 6 -> NC64GOOD\r
- 7 -> NC64THR\r
-\r
-############################################################################################\r
-\r
-Datenformat:\r
-\r
-D[31] 0 -> Daten, 1 -> Debug\r
-D[30:28] sector number\r
-D[27:25] module number\r
-D[24:21] APV number\r
-D[20:14] channel number\r
-D[13:0] ADC data\r
-\r
-Debug:\r
-\r
-D[30:28] sector number\r
-D[27:25] module number\r
-D[24:21] APV number\r
-D[20] bad buffer\r
-D[19] buffer not valid\r
-D[18] frame counter error\r
-D[17] row error\r
-D[16] APV error bit set\r
-D[15:12] number of frames requested\r
-D[11:8] current frame number\r
-D[7:0] row information (if available)\r
-\r
-\r
-\r
-\r
-\r
-\r
-############################################################################################\r
-\r
-Es gibt vier Kontrollregister im APV, die die Boardkonfiguration beeinflussen:\r
-\r
-0xc0: [31] RESET_SYS\r
- [30] RESET_APV\r
- [29] RESET_ADC\r
- [26] POWERDOWN_ADC1\r
- [25] POWERDOWN_ADC0\r
- [24] reserved, do not use\r
- [16] LED auf Backplane :-)\r
- [15:0] APV_ON\r
-\r
-0xc1: [31] reset PLL ADC1\r
- [27:24] Phase PLL ADC1\r
- [23] reset PLL ADC0\r
- [19:16] Phase PLL ADC0\r
- [14:12] debug output select ADC1\r
- [10:8] debug output select ADC0\r
- [7] reset PLL 40MHz\r
- [3:0] Phase CLK ADC / APV\r
- \r
-0xc2: [31:28] maximum number of APV frames / event (= 0x3)\r
- [23:20] TODO hardware trigger 2\r
- [19:16] DELAY hardware trigger 2\r
- [15:12] TODO hardware trigger 1\r
- [11:8] DELAY hardware trigger 1\r
- [7:4] TODO hardware trigger 0\r
- [3:0] DELAY hardware trigger 0\r
- \r
-0xc3: [31:24] BitHigh setting\r
- [23:16] BitLow setting\r
- [15:8] FlatHigh setting\r
- [7:0] FlatLow setting\r
-\r
-\r
/* Loop Triggers */
while(evtCounter < numEvts) {
+ unsigned int len;
+
/* Block signals */
sigprocmask(SIG_BLOCK, &blockSet, NULL);
fprintf(stderr, "Error IPU Read\n");
exit(EXIT_FAILURE);
}
-
+
+ /* There must be a DHDR --> size must be at least >= 2 */
+ if (size < 2) {
+ fprintf(stderr, "DHRD error, size=%d\n", size);
+ exit(EXIT_FAILURE);
+ }
+ len = ((buffer[1] >> 16) & 0xffff) + 2;
+ if (len >= size) {
+ fprintf(stderr, "DHRD len error, len=%d size=%d\n", len, size);
+ exit(EXIT_FAILURE);
+ }
+ /*fprintf(stderr, "number padding zeros: %d\n", size - len);*/
if (writeToStdout == 1) {
fprintf(stdout, "Trigger# %d\n", trgNumber);
- for (i = 0; i < size; i++) {
+ for (i = 0; i < len; i++) {
fprintf(stdout, "0x%08x\n", buffer[i]);
}
} else {
- if (fwrite((void*)buffer, 4, size, hldFile) != size) {
+ if (fwrite((void*)buffer, 4, len, hldFile) != len) {
perror("Writing to File failed");
exit(EXIT_FAILURE);
}