-sub mimosis_register_write
-{
+sub mimosis_register_write{
+
my ( $fpga, $mimosis_reg, $mimosis_data, $singleaccess ) = @_;
my ( $addr, $cmd, $data );
-sub mimosis_load_file
-{
+sub mimosis_load_file {
my %params = @_;
my $fpga = $params{'fpga'};
@config = do $file;
-
foreach my $i (@config)
{
if ( defined( @$i[1] ) )
}
}
-sub mimosis_dacscan_initial_test
-{
+sub mimosis_dacscan_initial_test {
my %odac = (
1 => 0x0045,
plot \\"good_range_vphf.txt\\" using 1:2:3 ls 4 w filledcu fc \\"grey\\", \\"good_range_odac.txt\\" using 1:2:3 ls 4 w filledcu fc \\"grey\\", for [i=0:3] \\"other_data.csv\\" using 2:3 index i with l title names2[i+1]";
END_MESSAGE
system $message_png;
-
-
}
-#TOFO Implement grey area to guide eyes
-#Idea
-#f(x)=1100+0.9*x;
-#g(x)=1200+1.1*x;
-#xmax=255;
-#set xrange [0:xmax];
-#plot '+' using 1:(f($1)):(g($1)) with filledcurves closed;
-
-
sub mimosis_dacscan
{
my %vdac = (
}
+
+sub send_params_scurve
+{
+ my ($yi, $rowTrain) = @_;
+ my $frameWr = "START-" . $yi . "-" . $rowTrain . "-END";
+ my $pipeNameWr = "/tmp/scurveipipe";
+ my $fdPipeWr = POSIX::open($pipeNameWr, &POSIX::O_WRONLY);
+ POSIX::write($fdPipeWr,$frameWr,length($frameWr));
+ POSIX::close($fdPipeWr);
+}
+
+
+
+sub await_ack
+{
+ my $pipeNameRd = "/tmp/scurveapipe";
+ my $fdPipeRd = POSIX::open($pipeNameRd);
+ my $frameRd;
+ my $reading = 1;
+ while($reading) {
+ my $buf;
+ my $bytes = POSIX::read($fdPipeRd,$buf,1);
+ $frameRd .= $buf;
+ if($frameRd =~ /ACK/) {
+ $reading = 0;
+ }
+ }
+ POSIX::close($fdPipeRd);
+ print "ACK received\n";
+}
+
+
+
sub mimosis_scan_region
{
my %params = @_;
-
my $fpga = $params{'fpga'};
my $pulseonly = $params{'pulseonly'};
my $region = $params{'region'};
- my $firstRow = $params{'firstRow'};
- my $lastRow = $params{'lastRow'};
- my $rowDiv = $params{'rowDiv'};
- my $firstset = $params{'firstset'};
- my $lastset = $params{'lastset'};
- my $setdiv = $params{'setdiv'};
- my $settime = $params{'settime'};
+ my $ySta = $params{'firstrow'};
+ my $yEnd = $params{'lastrow'};
+ my $setSta = $params{'firstset'};
+ my $setEnd = $params{'lastset'};
+ my $setDiv = $params{'setdiv'};
+ my $setTime = $params{'settime'};
my $slow = $params{'slow'};
my $a = $params{'a'};
- my $rowsatonce = $params{'rowsatonce'};
+ my $yTra = $params{'rowsatonce'};
my $printset = $params{'printset'};
my $printrow = $params{'printrow'};
- my $printcol = $params{'printcol'};
my $printall = $params{'printall'};
my $analogAlimA = $params{'analogAlimA'};
my $analogAlimB = $params{'analogAlimB'};
my $analogDlimB = $params{'analogDlimB'};
my $modpulse = $params{'modpulse'};
-
defined $fpga or die "Mimosis::mimosis_scan_region: Must provide $fpga.";
defined $region or die "Mimosis::mimosis_scan_region: Must provide $region.";
-
my %collim = (
'A' => [ 0, 127 ],
'B' => [ 128, 511 ],
'D' => [ 896, 1023 ]
);
- my %rowAdd = (
- 'A' => 4,
- 'B' => 2,
- 'C' => 2,
- 'D' => 4
- );
-
- my %regBitHash = (
- 'A' => 0,
- 'B' => 1,
- 'C' => 2,
- 'D' => 3
- );
+ %rowAdd = ( 'A' => 4, 'B' => 2, 'C' => 2, 'D' => 4 );
+ %regBitHash = ( 'A' => 0, 'B' => 1, 'C' => 2, 'D' => 3 );
my $regBit = $regBitHash{$region};
-
- $firstRow = defined $firstRow ? $firstRow : 0;
- $lastRow = defined $lastRow ? $lastRow : 504;
- $rowDiv = defined $rowDiv ? $rowDiv : 1;
- $firstset = defined $firstset ? $firstset : 0x0;
- $lastset = defined $lastset ? $lastset : 0xff;
- $setdiv = defined $setdiv ? $setdiv : 1;
- $settime = defined $settime ? $settime : 1000;
+ $ySta = defined $ySta ? $ySta : 0;
+ $yEnd = defined $yEnd ? $yEnd : 504;
+ $setSta = defined $setSta ? $setSta : 0x0;
+ $setEnd = defined $setEnd ? $setEnd : 0xff;
+ $setDiv = defined $setDiv ? $setDiv : 1;
+ $setTime = defined $setTime ? $setTime : 1000;
$slow = defined $slow ? $slow : 10000;
$a = defined $a ? $a : 0;
- $rowTrain = defined $rowTrain ? $rowTrain : $rowAdd{$region};
+ $yTra = defined $yTra ? $yTra : $rowAdd{$region};
$printset = defined $printset ? 1 : 0;
$printrow = defined $printrow ? 1 : 0;
- $printcol = defined $printcol ? 1 : 0;
$printall = defined $printall ? 1 : 0;
$pixpulseA_A = defined $pixpulseA_A ? $pixpulseA_A : 25;
$pixpulseA_B = defined $pixpulseA_B ? $pixpulseA_B : 75;
$pixpulseD_B = defined $pixpulseD_B ? $pixpulseD_B : 0;
$modpulse = defined $modpulse ? $modpulse : 3;
-
- my $pixpulseA_A_msb = ( $pixpulseA_A & 0xff00 ) >> 8;
- my $pixpulseA_A_lsb = $pixpulseA_A & 0x00ff;
- my $pixpulseA_B_msb = ( $pixpulseA_B & 0xff00 ) >> 8;
- my $pixpulseA_B_lsb = $pixpulseA_B & 0x00ff;
- my $pixpulseD_A_msb = ( $pixpulseD_A & 0xff00 ) >> 8;
- my $pixpulseD_A_lsb = $pixpulseD_A & 0x00ff;
- my $pixpulseD_B_msb = ( $pixpulseD_B & 0xff00 ) >> 8;
- my $pixpulseD_B_lsb = $pixpulseD_B & 0x00ff;
-
-
Mimosis::mimosis_register_write( $fpga, 0x0020, 0x40, $a ); usleep($slow); #EN_PIXELMASK to 0 for pulse
Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow); #INSTR select all pixels
Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR reset mask
Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR unselect all pixels
- Mimosis::mimosis_register_write( $fpga, 0x0066, $pixpulseA_A_lsb, $a ); usleep($slow); #analog pulsing pulse A, limit A
- Mimosis::mimosis_register_write( $fpga, 0x0166, $pixpulseA_A_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0076, $pixpulseA_B_lsb, $a ); usleep($slow); # analog pulsing pulse A, limit B
- Mimosis::mimosis_register_write( $fpga, 0x0176, $pixpulseA_B_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0067, $pixpulseD_A_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit A
- Mimosis::mimosis_register_write( $fpga, 0x0167, $pixpulseD_A_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0077, $pixpulseD_B_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit B
- Mimosis::mimosis_register_write( $fpga, 0x0177, $pixpulseD_B_msb, $a ); usleep($slow);
+ Mimosis::mimosis_register_write( $fpga, 0x0066, $pixpulseA_A & 0x00ff , $a ); usleep($slow); #analog pulsing pulse A, limit A
+ Mimosis::mimosis_register_write( $fpga, 0x0166, ( $pixpulseA_A & 0xff00 ) >> 8, $a ); usleep($slow);
+ Mimosis::mimosis_register_write( $fpga, 0x0076, $pixpulseA_B & 0x00ff , $a ); usleep($slow); # analog pulsing pulse A, limit B
+ Mimosis::mimosis_register_write( $fpga, 0x0176, ( $pixpulseA_B & 0xff00 ) >> 8, $a ); usleep($slow);
+ Mimosis::mimosis_register_write( $fpga, 0x0067, $pixpulseD_A & 0x00ff , $a ); usleep($slow); # analog pulsing pulse D, limit A
+ Mimosis::mimosis_register_write( $fpga, 0x0167, ( $pixpulseD_A & 0xff00 ) >> 8, $a ); usleep($slow);
+ Mimosis::mimosis_register_write( $fpga, 0x0077, $pixpulseD_B & 0x00ff , $a ); usleep($slow); # analog pulsing pulse D, limit B
+ Mimosis::mimosis_register_write( $fpga, 0x0177, ( $pixpulseD_B & 0xff00 ) >> 8, $a ); usleep($slow);
Mimosis::mimosis_register_write( $fpga, 0x007d, $modpulse, $a ); usleep($slow); #set modpulse. possible values: 1f/1, 1f/2, 1f/4, 1f/8, 1f/16, 1f/32, 1f/64, 1f/128
- my $pipeNameWr = "/tmp/scurvepipewr";
- my $pipeNameRd = "/tmp/scurvepiperd";
- my $fdPipeWr = POSIX::open($pipeNameWr, &POSIX::O_WRONLY);
-
- my $rowcounter = 0;
+ for ( my $yOff = $ySta;
+ $yOff <= $yEnd;
+ $yOff+=$yTra ) {
- for ( my $yi = $firstRow;
- $yi+$rowTrain-1 <= $lastRow;
- $yi+=$rowTrain*$rowDiv ) {
-
- for ( my $y = $yi;
- $y < $yi+$rowTrain*$rowDiv;
+ my $y = $yOff;
+ for ( ;
+ $y < $yOff+$yTra && $y <= $yEnd;
$y+=1 ) {
- $rowcounter = $rowcounter + 1;
- if( ($rowcounter-1)%$rowDiv != 0) { next; }
-
- my $rAddrR = $y/8;
- my $bitR = $y%8;
- my $add_regR = ( $rAddrR << 8 ) + 0x84;
-
if( $printrow || $printall ) { printf("row: $y\n"); }
- Mimosis::mimosis_register_write( $fpga, $add_regR, ( 0x1 << $bitR ), $a ); usleep($slow);
+ my $regAdd = $y/8;
+ my $regBit = $y%8;
+ my $regWord = ( $regAdd << 8 ) + 0x84;
+ Mimosis::mimosis_register_write( $fpga, $regWord, ( 0x1 << $regBit ), $a ); usleep($slow);
Mimosis::mimosis_instr_write( $fpga, 0x27 ); usleep($slow); #INSTR select all pixels
Mimosis::mimosis_instr_write( $fpga, 0x05 ); usleep($slow); #INSTR set mask pulse
Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($slow); #unselect all pixels (register wise)
Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR unselect all pixels
}
- my $frameWr = "START-" . $yi . "-" . $rowTrain . "-END";
- POSIX::write($fdPipeWr,$frameWr,length($frameWr));
-
- print "Data sent.\n";
- print "Waiting for ACK\n";
-
- my $fdPipeRd = POSIX::open($pipeNameRd);
- my $frameRd;
- my $reading = 1;
- while($reading) {
- my $buf;
- my $bytes = POSIX::read($fdPipeRd,$buf,1);
- $frameRd .= $buf;
- if($frameRd =~ /ACK/) {
- $reading = 0;
- }
- }
- POSIX::close($fdPipeRd);
-
- unless($pulseonly) {
- my $setcounter = 0;
- for my $set (reverse ($firstset .. $lastset) ) {
- $setcounter = $setcounter + 1;
- if( ($setcounter-1)%$setdiv != 0) { next; }
-
- my $pulseNumber = ($set << 24) + 0x00c00000 + ($regBit << 20) + $yi;
- trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseNumber ], 1 ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($settime);
-
- if( $printset || $printall ) { printf("set: $set\n"); }
- }
-
- Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow);
- Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse
- Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse
+ send_params_scurve($yOff, $yTra);
+ await_ack();
+
+ # unless($pulseonly)
+ # {
+ # # my $setCnt = 0;
+ # for my $set (reverse ($setSta .. $setEnd) )
+ # {
+ # # $setCnt = $setCnt + 1;
+ # # if( ($setCnt-1)%$setDiv != 0) { next; }
+
+ # my $pulseMsg = ($set << 24) + 0x00c00000;
+ # trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseMsg ], 1 ); usleep($slow);
+ # Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($setTime);
+
+ # if( $printset || $printall ) { printf("set: $set\n"); }
+ # }
+
+ # Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow);
+ # Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse
+ # Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse
+ # }
+ # indicate end of current rows
+ if($y == $yEnd) {
+ trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00800000 ], 1 ); usleep($slow);
+ print "check\n";
}
}
}
-# sub mimosis_scan_region
-# {
-# my %params = @_;
-
-# my $fpga = $params{'fpga'};
-# my $pulseonly = $params{'pulseonly'};
-# my $region = $params{'region'};
-# my $firstrow = $params{'firstrow'};
-# my $lastrow = $params{'lastrow'};
-# my $rowdiv = $params{'rowdiv'};
-# my $firstcol = $params{'firstcol'};
-# my $lastcol = $params{'lastcol'};
-# my $coldiv = $params{'coldiv'};
-# my $firstset = $params{'firstset'};
-# my $lastset = $params{'lastset'};
-# my $setdiv = $params{'setdiv'};
-# my $settime = $params{'settime'};
-# my $slow = $params{'slow'};
-# my $a = $params{'a'};
-# my $rowsatonce = $params{'rowsatonce'};
-# my $printset = $params{'printset'};
-# my $printrow = $params{'printrow'};
-# my $printcol = $params{'printcol'};
-# my $printall = $params{'printall'};
-# my $analogAlimA = $params{'analogAlimA'};
-# my $analogAlimB = $params{'analogAlimB'};
-# my $analogDlimA = $params{'analogDlimA'};
-# my $analogDlimB = $params{'analogDlimB'};
-# my $modpulse = $params{'modpulse'};
-
-
-# defined $fpga or die "Mimosis::mimosis_scan_region: Must provide $fpga.";
-# defined $region or die "Mimosis::mimosis_scan_region: Must provide $region.";
-
-
-# my %collim = (
-# 'A' => [ 0, 127 ],
-# 'B' => [ 128, 511 ],
-# 'C' => [ 512, 895 ],
-# 'D' => [ 896, 1023 ]
-# );
-
-# my %rowAdd = (
-# 'A' => 4,
-# 'B' => 2,
-# 'C' => 2,
-# 'D' => 4
-# );
-
-# my %regBitHash = (
-# 'A' => 0,
-# 'B' => 1,
-# 'C' => 2,
-# 'D' => 3
-# );
-
-
-# my $regBit = $regBitHash{$region};
-
-
-# $firstrow = defined $firstrow ? $firstrow : 0;
-# $lastrow = defined $lastrow ? $lastrow : 504;
-# $rowdiv = defined $rowdiv ? $rowdiv : 1;
-# $firstcol = defined $firstcol ? $firstcol : $collim{$region}->[0];
-# $lastcol = defined $lastcol ? $lastcol : $collim{$region}->[1];
-# $coldiv = defined $coldiv ? $coldiv : 1;
-# $firstset = defined $firstset ? $firstset : 0x0;
-# $lastset = defined $lastset ? $lastset : 0xff;
-# $setdiv = defined $setdiv ? $setdiv : 1;
-# $settime = defined $settime ? $settime : 1000;
-# $slow = defined $slow ? $slow : 10000;
-# $a = defined $a ? $a : 0;
-# $rowsatonce = defined $rowsatonce ? $rowsatonce : $rowAdd{$region};
-# $printset = defined $printset ? 1 : 0;
-# $printrow = defined $printrow ? 1 : 0;
-# $printcol = defined $printcol ? 1 : 0;
-# $printall = defined $printall ? 1 : 0;
-# $pixpulseA_A = defined $pixpulseA_A ? $pixpulseA_A : 25;
-# $pixpulseA_B = defined $pixpulseA_B ? $pixpulseA_B : 75;
-# $pixpulseD_A = defined $pixpulseD_A ? $pixpulseD_A : 0;
-# $pixpulseD_B = defined $pixpulseD_B ? $pixpulseD_B : 0;
-# $modpulse = defined $modpulse ? $modpulse : 3;
-
-
-# my $pixpulseA_A_msb = ( $pixpulseA_A & 0xff00 ) >> 8;
-# my $pixpulseA_A_lsb = $pixpulseA_A & 0x00ff;
-# my $pixpulseA_B_msb = ( $pixpulseA_B & 0xff00 ) >> 8;
-# my $pixpulseA_B_lsb = $pixpulseA_B & 0x00ff;
-# my $pixpulseD_A_msb = ( $pixpulseD_A & 0xff00 ) >> 8;
-# my $pixpulseD_A_lsb = $pixpulseD_A & 0x00ff;
-# my $pixpulseD_B_msb = ( $pixpulseD_B & 0xff00 ) >> 8;
-# my $pixpulseD_B_lsb = $pixpulseD_B & 0x00ff;
-
-
-# Mimosis::mimosis_register_write( $fpga, 0x0020, 0x40, $a ); usleep($slow); #EN_PIXELMASK to 0 for pulse
-# Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow); #INSTR select all pixels
-# Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR reset mask
-# Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR unselect all pixels
-# Mimosis::mimosis_register_write( $fpga, 0x0066, $pixpulseA_A_lsb, $a ); usleep($slow); #analog pulsing pulse A, limit A
-# Mimosis::mimosis_register_write( $fpga, 0x0166, $pixpulseA_A_msb, $a ); usleep($slow);
-# Mimosis::mimosis_register_write( $fpga, 0x0076, $pixpulseA_B_lsb, $a ); usleep($slow); # analog pulsing pulse A, limit B
-# Mimosis::mimosis_register_write( $fpga, 0x0176, $pixpulseA_B_msb, $a ); usleep($slow);
-# Mimosis::mimosis_register_write( $fpga, 0x0067, $pixpulseD_A_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit A
-# Mimosis::mimosis_register_write( $fpga, 0x0167, $pixpulseD_A_msb, $a ); usleep($slow);
-# Mimosis::mimosis_register_write( $fpga, 0x0077, $pixpulseD_B_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit B
-# Mimosis::mimosis_register_write( $fpga, 0x0177, $pixpulseD_B_msb, $a ); usleep($slow);
-# Mimosis::mimosis_register_write( $fpga, 0x007d, $modpulse, $a ); usleep($slow); #set modpulse. possible values: 1f/1, 1f/2, 1f/4, 1f/8, 1f/16, 1f/32, 1f/64, 1f/128
-
-# my $rowcounter = 0;
-
-# for ( my $yi = $firstrow; $yi+$rowsatonce-1 <= $lastrow; $yi+=$rowsatonce*$rowdiv ) {
-
-# for ( my $y = $yi; $y < $yi+$rowsatonce*$rowdiv; $y+=1 ) {
-
-# $rowcounter = $rowcounter + 1;
-# if( ($rowcounter-1)%$rowdiv != 0) { next; }
-
-# my $rAddrR = $y/8;
-# my $bitR = $y%8;
-# my $add_regR = ( $rAddrR << 8 ) + 0x84;
-
-# if( $printrow || $printall ) { printf("row: $y\n"); }
-
-# Mimosis::mimosis_register_write( $fpga, $add_regR, ( 0x1 << $bitR ), $a ); usleep($slow);
-# Mimosis::mimosis_instr_write( $fpga, 0x27 ); usleep($slow); #INSTR select all pixels
-# Mimosis::mimosis_instr_write( $fpga, 0x05 ); usleep($slow); #INSTR set mask pulse
-# Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($slow); #unselect all pixels (register wise)
-# Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR unselect all pixels
-
-# # my $colcounter = 0;
-
-# # for( my $x = $firstcol; $x <= $lastcol; $x+=1 )
-# # {
-# # $colcounter = $colcounter + 1;
-# # if( ($colcounter-1)%$coldiv != 0) { next; }
-
-# # my $rAddrC = $x/16; #region address
-# # my $bitC = ($x/2)%8; #double column in region
-# # my $add_regC = ($rAddrC << 8);
-# # if (($x%2 == 1)) { $add_regC += 0x82; }
-# # elsif (($x%2 == 0)) { $add_regC += 0x81; }
-
-# # Mimosis::mimosis_register_write( $fpga, $add_regC, ( 0x1 << $bitC ), $a ); usleep($slow);
-# # Mimosis::mimosis_register_write( $fpga, $add_regR, ( 0x1 << $bitR ), $a ); usleep($slow);
-# # Mimosis::mimosis_instr_write( $fpga, 0x05 ); usleep($slow); #INSTR set mask pulse
-# # Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($slow); #unselect all pixels (register wise)
-
-# # if( $printcol || $printall ) { printf("col: $x\n"); }
-# # }
-# }
-
-# unless($pulseonly) {
-# my $setcounter = 0;
-# for my $set (reverse ($firstset .. $lastset) ) {
-# $setcounter = $setcounter + 1;
-# if( ($setcounter-1)%$setdiv != 0) { next; }
-
-# my $pulseNumber = ($set << 24) + 0x00c00000 + ($regBit << 20) + $yi;
-# trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseNumber ], 1 ); usleep($slow);
-# Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($settime);
-
-# if( $printset || $printall ) { printf("set: $set\n"); }
-# }
-
-# Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow);
-# Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse
-# Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse
-# }
-# }
-# }
-
-
-
-sub mimosis_scan_pixel
-{
- my %params = @_;
- my $fpga = $params{'fpga'};
- my $colpix = $params{'colpix'};
- my $rowpix = $params{'rowpix'};
- my $firstset = $params{'firstset'};
- my $lastset = $params{'lastset'};
- my $setdiv = $params{'setdiv'};
- my $settime = $params{'settime'};
- my $pulseonly = $params{'pulseonly'};
- my $slow = $params{'slow'};
- my $a = $params{'a'};
- my $printset = $params{'printset'};
- my $printall = $params{'printall'};
- my $analogAlimA = $params{'analogAlimA'};
- my $analogAlimB = $params{'analogAlimB'};
- my $analogDlimA = $params{'analogDlimA'};
- my $analogDlimB = $params{'analogDlimB'};
- my $modpulse = $params{'modpulse'};
-
- defined $fpga or die "Mimosis::mimosis_scan_pixel: Must provide $fpga.";
- defined $colpix or die "Mimosis::mimosis_scan_pixel: Must provide $colpix.";
- defined $rowpix or die "Mimosis::mimosis_scan_pixel: Must provide $rowpix.";
-
- $firstset = defined $firstset ? $firstset : 0x0;
- $lastset = defined $lastset ? $lastset : 0xff;
- $setdiv = defined $setdiv ? $setdiv : 1;
- $settime = defined $settime ? $settime : 1000;
- $slow = defined $slow ? $slow : 10000;
- $a = defined $a ? $a : 0;
- $printset = defined $printset ? 1 : 0;
- $printall = defined $printall ? 1 : 0;
- $pixpulseA_A = defined $pixpulseA_A ? $pixpulseA_A : 25;
- $pixpulseA_B = defined $pixpulseA_B ? $pixpulseA_B : 75;
- $pixpulseD_A = defined $pixpulseD_A ? $pixpulseD_A : 0;
- $pixpulseD_B = defined $pixpulseD_B ? $pixpulseD_B : 0;
- $modpulse = defined $modpulse ? $modpulse : 3;
-
- if( !( $colpix < 1024 && $rowpix < 503 ) )
- {
- print colored ( "Specified column/row values seem to be unlogic. Aborting.", 'red' ), "\n";
- exit 1;
- }
-
- my $pixpulseA_A_msb = ( $pixpulseA_A & 0xff00 ) >> 8;
- my $pixpulseA_A_lsb = $pixpulseA_A & 0x00ff;
- my $pixpulseA_B_msb = ( $pixpulseA_B & 0xff00 ) >> 8;
- my $pixpulseA_B_lsb = $pixpulseA_B & 0x00ff;
- my $pixpulseD_A_msb = ( $pixpulseD_A & 0xff00 ) >> 8;
- my $pixpulseD_A_lsb = $pixpulseD_A & 0x00ff;
- my $pixpulseD_B_msb = ( $pixpulseD_B & 0xff00 ) >> 8;
- my $pixpulseD_B_lsb = $pixpulseD_B & 0x00ff;
-
- Mimosis::mimosis_register_write( $fpga, 0x0020, 0x40, $a ); usleep($slow); #EN_PIXELMASK to 0 for pulse
- Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow); #INSTR select all pixels
- Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR reset mask
- Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR unselect all pixels
- Mimosis::mimosis_register_write( $fpga, 0x0066, $pixpulseA_A_lsb, $a ); usleep($slow); #analog pulsing pulse A, limit A
- Mimosis::mimosis_register_write( $fpga, 0x0166, $pixpulseA_A_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0076, $pixpulseA_B_lsb, $a ); usleep($slow); # analog pulsing pulse A, limit B
- Mimosis::mimosis_register_write( $fpga, 0x0176, $pixpulseA_B_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0067, $pixpulseD_A_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit A
- Mimosis::mimosis_register_write( $fpga, 0x0167, $pixpulseD_A_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0077, $pixpulseD_B_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit B
- Mimosis::mimosis_register_write( $fpga, 0x0177, $pixpulseD_B_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x007d, $modpulse, $a ); usleep($slow); #set modpulse. possible values: 1f/1, 1f/2, 1f/4, 1f/8, 1f/16, 1f/32, 1f/64, 1f/128
-
- my $rAddrC = $colpix/16; #region address
- my $bitC = ($colpix/2)%8; #double column in region
- my $add_regC = $rAddrC << 8;
- if (($colpix%2 == 1)) { $add_regC += 0x82; }
- elsif (($colpix%2 == 0)) { $add_regC += 0x81; }
-
- my $rAddrR = $rowpix/8;
- my $bitR = $rowpix%8;
- my $add_regR = ( $rAddrR << 8 ) + 0x84;
-
- Mimosis::mimosis_register_write( $fpga, $add_regC, ( 0x1 << $bitC ), $a ); usleep($s);
- Mimosis::mimosis_register_write( $fpga, $add_regR, ( 0x1 << $bitR ), $a ); usleep($s);
- Mimosis::mimosis_instr_write( $fpga, 0x05 ); usleep($s); #INSTR set mask pulse
- Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($s); #unselect all pixels (register wise)
-
- if( defined $pulseonly ){ exit 0; }
-
- my $setcounter = 0;
- for my $set (reverse ($firstset .. $lastset) )
- {
- $setcounter = $setcounter + 1;
- if( ($setcounter-1)%$setdiv != 0) { next; }
-
- my $pulseNumber = ( $set << 24 ) + ( ( $colpix & 0x3ff ) << 12 ) + ( $rowpix & 0x1ff );
- trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseNumber ], 1 ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($settime);
-
- if( $printset || $printall ) { printf("set: $set\n"); }
- }
-
- Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow);
- Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse
- Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse
-
- trb_register_write_mem( $fpga, 0xa209, 0, [ 0 ], 1 );
- exit 0;
-}
-
-
-
-sub mimosis_scan_line
-{
- my %params = @_;
-
- my $fpga = $params{'fpga'};
- my $pulseonly = $params{'pulseonly'};
- my $firstrow = $params{'firstrow'};
- my $lastrow = $params{'lastrow'};
- my $rowdiv = $params{'rowdiv'};
- my $firstcol = $params{'firstcol'};
- my $lastcol = $params{'lastcol'};
- my $coldiv = $params{'coldiv'};
- my $firstset = $params{'firstset'};
- my $lastset = $params{'lastset'};
- my $setdiv = $params{'setdiv'};
- my $settime = $params{'settime'};
- my $slow = $params{'slow'};
- my $a = $params{'a'};
- my $rowsatonce = $params{'rowsatonce'};
- my $printset = $params{'printset'};
- my $printrow = $params{'printrow'};
- my $printcol = $params{'printcol'};
- my $printall = $params{'printall'};
- my $analogAlimA = $params{'analogAlimA'};
- my $analogAlimB = $params{'analogAlimB'};
- my $analogDlimA = $params{'analogDlimA'};
- my $analogDlimB = $params{'analogDlimB'};
- my $modpulse = $params{'modpulse'};
-
- defined $fpga or die "Mimosis::mimosis_scan_line: Must provide $fpga.";
-
- $firstrow = defined $firstrow ? $firstrow : 0;
- $lastrow = defined $lastrow ? $lastrow : 504;
- $rowdiv = defined $rowdiv ? $rowdiv : 1;
- $firstcol = defined $firstcol ? $firstcol : 0;
- $lastcol = defined $lastcol ? $lastcol : 1023;
- $coldiv = defined $coldiv ? $coldiv : 1;
- $firstset = defined $firstset ? $firstset : 0x0;
- $lastset = defined $lastset ? $lastset : 0xff;
- $setdiv = defined $setdiv ? $setdiv : 1;
- $settime = defined $settime ? $settime : 1000;
- $slow = defined $slow ? $slow : 10000;
- $a = defined $a ? $a : 0;
- $rowsatonce = defined $rowsatonce ? $rowsatonce : 1;
- $printset = defined $printset ? 1 : 0;
- $printrow = defined $printrow ? 1 : 0;
- $printcol = defined $printcol ? 1 : 0;
- $printall = defined $printall ? 1 : 0;
- $pixpulseA_A = defined $pixpulseA_A ? $pixpulseA_A : 25;
- $pixpulseA_B = defined $pixpulseA_B ? $pixpulseA_B : 75;
- $pixpulseD_A = defined $pixpulseD_A ? $pixpulseD_A : 0;
- $pixpulseD_B = defined $pixpulseD_B ? $pixpulseD_B : 0;
- $modpulse = defined $modpulse ? $modpulse : 3;
-
- my $pixpulseA_A_msb = ( $pixpulseA_A & 0xff00 ) >> 8;
- my $pixpulseA_A_lsb = $pixpulseA_A & 0x00ff;
- my $pixpulseA_B_msb = ( $pixpulseA_B & 0xff00 ) >> 8;
- my $pixpulseA_B_lsb = $pixpulseA_B & 0x00ff;
- my $pixpulseD_A_msb = ( $pixpulseD_A & 0xff00 ) >> 8;
- my $pixpulseD_A_lsb = $pixpulseD_A & 0x00ff;
- my $pixpulseD_B_msb = ( $pixpulseD_B & 0xff00 ) >> 8;
- my $pixpulseD_B_lsb = $pixpulseD_B & 0x00ff;
-
-
- Mimosis::mimosis_register_write( $fpga, 0x0020, 0x40, $a ); usleep($slow); #EN_PIXELMASK to 0 for pulse
- Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow); #INSTR select all pixels
- Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR reset mask
- Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR unselect all pixels
- Mimosis::mimosis_register_write( $fpga, 0x0066, $pixpulseA_A_lsb, $a ); usleep($slow); #analog pulsing pulse A, limit A
- Mimosis::mimosis_register_write( $fpga, 0x0166, $pixpulseA_A_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0076, $pixpulseA_B_lsb, $a ); usleep($slow); # analog pulsing pulse A, limit B
- Mimosis::mimosis_register_write( $fpga, 0x0176, $pixpulseA_B_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0067, $pixpulseD_A_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit A
- Mimosis::mimosis_register_write( $fpga, 0x0167, $pixpulseD_A_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0077, $pixpulseD_B_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit B
- Mimosis::mimosis_register_write( $fpga, 0x0177, $pixpulseD_B_msb, $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x007d, $modpulse, $a ); usleep($slow); #set modpulse. possible values: 1f/1, 1f/2, 1f/4, 1f/8, 1f/16, 1f/32, 1f/64, 1f/128
-
- for ( my $y = $firstrow; $y < $lastrow; $y+=$rowdiv )
- {
- my $rAddrR = $y/8;
- my $bitR = $y%8;
- my $add_regR = ( $rAddrR << 8 ) + 0x84;
-
- if( $printrow || $printall ) { printf("row: $y\n"); }
-
- for( my $x = $firstcol; $x <= $lastcol; $x+=$coldiv )
- {
- my $rAddrC = $x/16; #region address
- my $bitC = ($x/2)%8; #double column in region
- my $add_regC = ($rAddrC << 8);
- if (($x%2 == 1)) { $add_regC += 0x82; }
- elsif (($x%2 == 0)) { $add_regC += 0x81; }
-
- Mimosis::mimosis_register_write( $fpga, $add_regC, ( 0x1 << $bitC ), $a ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, $add_regR, ( 0x1 << $bitR ), $a ); usleep($slow);
- Mimosis::mimosis_instr_write( $fpga, 0x05 ); usleep($slow); #INSTR set mask pulse
- Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($slow); #unselect all pixels (register wise)
-
- if( $printcol || $printall ) { printf("col: $x\n"); }
- }
- }
-
-
- for ( my $set = $lastset; $set >= $firstset; $set -= $setdiv )
- {
-
- my $pulseNumber = ($set << 24) + 0x00c00000 + ($regBit << 20) + $yi;
- trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseNumber ], 1 ); usleep($slow);
- Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($settime);
-
- if( $printset || $printall ) { printf("set: $set\n"); }
- }
-
- Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow);
- Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse
- Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse
-}
-
-
-
sub mimosis_mask
{
my %params = @_;
--nrows N -> How many rows to pulse at once. Default depends on region. For A,D: N = 4, for B,D: N = 2.
--printset -> Print the current VPH_FINE setting.
--printrow -> Print current row to set.
- --printcol -> Print current column to set.
-p, --printall -> Print all informations available.
--analogAlimA -> Not implemented yet.
--analogAlimB -> Not implemented yet.
my ( $ikf, $name, $imagefileonly, $cleanup_dacscan, $printall_dacscan );
#scurves
-my ( $colpix_scurves, $rowpix_scurves, $pulseonly_scurves, $region_scurves,
- $firstrow_scurves, $lastrow_scurves, $rowdiv_scurves, $firstcol_scurves,
- $lastcol_scurves, $coldiv_scurves, $firstset_scurves, $lastset_scurves,
- $setdiv_scurves, $vcasn_scurves, $vcasnstart_scurves, $vcasnstop_scurves,
- $vcasnstep_scurves, $settime_scurves, $rowsatonce_scurves, $printset_scurves,
- $printrow_scurves, $printcol_scurves, $printall_scurves, $analogAlimA_scurves,
- $analogAlimB_scurves, $analogDlimA_scurves, $analogDlimB_scurves, $modpulse_scurves );
+my ( $colpix_scurves, $rowpix_scurves, $pulseOnlySc, $regionSc,
+ $yStaSc, $yEndSc, $yStepSc,
+ $setStaSc, $setEndSc,
+ $setStepSc, $vcasnSc, $vcasnStaSc, $vcasnEndSc,
+ $vcasnStepSc, $setTimeSc, $yTraSc, $printSetSc, $printDacSc,
+ $printRowSc, $printAllSc, $analogAlimASc,
+ $analogAlimBSc, $analogDlimASc, $analogDlimBSc, $modpulseSc );
#mask
my ( $region_mask, $row_mask, $col_mask,
options => {
"colpix=s" => \$colpix_scurves,
"rowpix=s" => \$rowpix_scurves,
- "pulseonly" => \$pulseonly_scurves,
- "region|r=s" => \$region_scurves,
- "firstrow=s" => \$firstrow_scurves,
- "lastrow=s" => \$lastrow_scurves,
- "rowdiv=s" => \$rowdiv_scurves,
- "firstcol=s" => \$firstcol_scurves,
- "lastcol=s" => \$lastcol_scurves,
- "coldiv=s" => \$coldiv_scurves,
- "firstset=s" => \$firstset_scurves,
- "lastset=s" => \$lastset_scurves,
- "setdiv=s" => \$setdiv_scurves,
- "settime=s" => \$settime_scurves,
- "firstvcasn=s" => \$vcasnstart_scurves,
- "lastvcasn=s" => \$vcasnstop_scurves,
- "vcasndiv=s" => \$vcasnstep_scurves,
- "vcasn=s" => \$vcasn_scurves,
- "nrows=s" => \$rowsatonce_scurves,
- "printset" => \$printset_scurves,
- "printrow" => \$printrow_scurves,
- "printcol" => \$printcol_scurves,
- "printall|p" => \$printall_scurves,
- "analogAlimA=s" => \$analogAlimA_scurves,
- "analogAlimB=s" => \$analogAlimB_scurves,
- "analogDlimA=s" => \$analogDlimA_scurves,
- "analogDlimB=s" => \$analogDlimB_scurves,
- "modpulse=s" => \$modpulse_scurves,
+ "pulseonly" => \$pulseOnlySc,
+ "region|r=s" => \$regionSc,
+ "firstrow=s" => \$yStaSc,
+ "lastrow=s" => \$yEndSc,
+ "rowdiv=s" => \$yStepSc,
+ "firstset=s" => \$setStaSc,
+ "lastset=s" => \$setEndSc,
+ "setdiv=s" => \$setStepSc,
+ "settime=s" => \$setTimeSc,
+ "firstvcasn=s" => \$vcasnStaSc,
+ "lastvcasn=s" => \$vcasnEndSc,
+ "vcasndiv=s" => \$vcasnStepSc,
+ "vcasn=s" => \$vcasnSc,
+ "nrows=s" => \$yTraSc,
+ "printdac" => \$printDacSc,
+ "printset" => \$printSetSc,
+ "printrow" => \$printRowSc,
+ "printall|p" => \$printAllSc,
+ "analogAlimA=s" => \$analogAlimASc,
+ "analogAlimB=s" => \$analogAlimBSc,
+ "analogDlimA=s" => \$analogDlimASc,
+ "analogDlimB=s" => \$analogDlimBSc,
+ "modpulse=s" => \$modpulseSc,
'help|h' => {
handler => \&Mimosis::help_scurves,
}
elsif( $res->{subcommand}[0] eq 'scurves' )
{
- %dacs = (
+
+ my %dacs = (
IBIAS => 0x0040,
ITHR => 0x0041,
IDB => 0x0042,
IBUFBIAS => 0x004e
);
- %region_to_vcasn = (
+ my %regCharToStr = (
A => 'VCASNA',
B => 'VCASNB',
C => 'VCASNC',
D => 'VCASND'
);
- if( defined $region_scurves )
+ if( defined $regionSc )
{
- $vcasn_scurves = defined $vcasn_scurves ? $vcasn_scurves : $region_scurves;
- my $vcasnStr = $region_to_vcasn{$vcasn_scurves};
- my $val = Mimosis::mimosis_register_read( $fpga, $dacs{$vcasnStr}, $a );
- $vcasnstart_scurves = defined $vcasnstart_scurves ? $vcasnstart_scurves : $val;
- $vcasnstop_scurves = defined $vcasnstop_scurves ? $vcasnstop_scurves : $val+1;
- $vcasnstep_scurves = defined $vcasnstep_scurves ? $vcasnstep_scurves : 1;
-
- for ( my $vcasnset = $vcasnstart_scurves; $vcasnset < $vcasnstop_scurves; $vcasnset += $vcasnstep_scurves )
- {
- Mimosis::mimosis_register_write( $fpga, $dacs{$vcasnStr}, $vcasnset, $a ); usleep($slow);
+ $vcasnSc = defined $vcasnSc ? $vcasnSc : $regionSc;
+ my $vcasnStr = $regCharToStr{$vcasnSc};
+ my $vcasnVal = Mimosis::mimosis_register_read( $fpga, $dacs{$vcasnStr}, $a );
+ $vcasnStaSc = defined $vcasnStaSc ? $vcasnStaSc : $vcasnVal;
+ $vcasnEndSc = defined $vcasnEndSc ? $vcasnEndSc : $vcasnStaSc;
+ $vcasnStepSc = defined $vcasnStepSc ? $vcasnStepSc : 1;
+
+ # system("/d/jspc37/mimosis/analysis/mbs/dabc/build/bin/hldprint mbss://localhost:36789 &");
+
+ for ( my $vcasnSet = $vcasnStaSc;
+ $vcasnSet <= $vcasnEndSc;
+ $vcasnSet += $vcasnStepSc ) {
+ #set vcasn
+ Mimosis::mimosis_register_write( $fpga, $dacs{$vcasnStr}, $vcasnSet, $a ); usleep($slow);
- if( $printdac_scurves || $printall_scurves ) { printf("dac: $vcasnset\n"); }
+ if( $printDacSc || $printAllSc ) { printf("dac: $vcasnSet\n"); }
Mimosis::mimosis_scan_region(
fpga => $fpga,
slow => $slow,
a => $a,
- pulseonly => $pulseonly_scurves,
- region => $region_scurves,
- firstrow => $firstrow_scurves,
- lastrow => $lastrow_scurves,
- rowdiv => $rowdiv_scurves,
- firstcol => $firstcol_scurves,
- lastcol => $lastcol_scurves,
- coldiv => $coldiv_scurves,
- firstset => $firstset_scurves,
- lastset => $lastset_scurves,
- setdiv => $setdiv_scurves,
- settime => $settime_scurves,
- rowsatonce => $rowsatonce_scurves,
- printset => $printset_scurves,
- printrow => $printrow_scurves,
- printcol => $printcol_scurves,
- printall => $printall_scurves,
- analogAlimA => $analogAlimA_scurves,
- analogAlimB => $analogAlimB_scurves,
- analogDlimA => $analogDlimA_scurves,
- analogDlimB => $analogDlimB_scurves,
- modpulse => $modpulse_scurves,
- );
-
- unless($pulseonly_scurves)
- {
- my $run = 1;
- my $statusF = "/d/jspc37/mimosis/analysis/scurve/STATUS";
- open(FH, '>', $statusF);
- print(FH "0");
- close(FH);
-
- print "send fit bit.\n";
- trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00400000 ], 1 ); usleep($s);
-
- my $printStatusOnce = 0;
- do
- {
- sleep(1);
- if(-e $statusF)
- {
- open(FH, '<', $statusF);
- my @lines = <FH>;
- if ( $lines[0] == "2" ) { $run = 0; }
- close(FH);
- }
- if(!$printStatusOnce)
- {
- print "inside loop\n";
- $printStatusOnce = 1;
- }
- }
- while($run);
- print "outside loop\n";
-
- copy( "/d/jspc37/mimosis/analysis/scurve/params.csv", $vcasnStr . "_" . $vcasnset . ".csv" ) or die "Copy failed: $!";
- }
+ pulseonly => $pulseOnlySc,
+ region => $regionSc,
+ firstrow => $yStaSc,
+ lastrow => $yEndSc,
+ rowdiv => $yStepSc,
+ rowsatonce => $yTraSc,
+ firstset => $setStaSc,
+ lastset => $setEndSc,
+ setdiv => $setStepSc,
+ settime => $setTimeSc,
+ printset => $printSetSc,
+ printrow => $printRowSc,
+ printall => $printAllSc,
+ analogAlimA => $analogAlimASc,
+ analogAlimB => $analogAlimBSc,
+ analogDlimA => $analogDlimASc,
+ analogDlimB => $analogDlimBSc,
+ modpulse => $modpulseSc,
+ );
+ trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00400000 + ($vcasnSet & 0xFF) ], 1 ); usleep($slow);
}
- # trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00000000 ], 1 ); usleep($s);
+
+ trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00300000 ], 1 ); usleep($s);
exit 0;
}
}