@@ -55,6 +55,9 @@ def __init__(self):
5555
5656 self .REG_HS_DATA = 9
5757
58+ self .INT_TP_EN = 18
59+ self .EXT_TP_EN = 18
60+
5861 #EXTERNAL CLOCK STUFF HERE
5962
6063 self .REG_SPI_BASE = 512
@@ -231,7 +234,7 @@ def powerOffFemb(self,femb):
231234
232235
233236 def selectChannel (self ,asic ,chan ):
234- print ("Select channel" )
237+ # print("Select channel")
235238 asicVal = int (asic )
236239 if (asicVal < 0 ) or (asicVal > self .NASICS ):
237240 return
@@ -242,7 +245,7 @@ def selectChannel(self,asic,chan):
242245 self .femb .UDP_PORT_RREGRESP = 32002
243246
244247 #select ASIC
245- print ("Selecting ASIC " + str (asicVal ) )
248+ # print("Selecting ASIC " + str(asicVal) )
246249 self .femb .write_reg_bits (self .REG_SEL_ASIC , self .REG_SEL_ASIC_LSB , 0xF , asicVal )
247250
248251 #Note: WIB data format streams all 16 channels, don't need to select specific channel
@@ -533,3 +536,69 @@ def write_reg_SI5338(self,addr,val):
533536
534537 self .femb .write_reg ( 10 , 1 )
535538 self .femb .write_reg ( 10 , 0 )
539+
540+ def setFpgaPulser (self ,enable ,dac ):
541+ enableVal = int (enable )
542+ if (enableVal < 0 ) or (enableVal > 1 ) :
543+ print ( "femb_config_femb : setFpgaPulser - invalid enable value" )
544+ return
545+ dacVal = int (dac )
546+ if ( dacVal < 0 ) or ( dacVal > 0x3F ) :
547+ print ( "femb_config_femb : setFpgaPulser - invalid dac value" )
548+ return
549+
550+ #set pulser enable bit
551+ if enableVal == 1 :
552+ self .femb .write_reg ( self .EXT_TP_EN , 0x2 ) #pulser enabled, bit 0 is FPGA pulser NOT enabled
553+ else :
554+ self .femb .write_reg ( self .EXT_TP_EN , 0x3 ) #pulser disabled
555+
556+ #connect channel test input to external pin
557+ for asic in range (0 ,self .NASICS ,1 ):
558+ baseReg = self .REG_SPI_BASE + int (asic )* 9
559+ if enableVal == 1 :
560+ self .femb .write_reg_bits ( baseReg + 8 , 24 , 0x3 , 0x2 ) #ASIC gen reg
561+ else :
562+ self .femb .write_reg_bits ( baseReg + 8 , 24 , 0x3 , 0x0 ) #ASIC gen reg
563+
564+ self .doAsicConfig ()
565+
566+ self .femb .write_reg_bits ( self .REG_FPGA_TP_EN , 0 ,0x3 ,0x1 ) #test pulse enable
567+ self .femb .write_reg_bits ( self .REG_FPGA_TP_EN , 8 ,0x1 ,1 ) #test pulse enable
568+ self .femb .write_reg_bits ( self .REG_TP , 0 , 0x3F , dacVal ) #TP Amplitude
569+ self .femb .write_reg_bits ( self .REG_TP , 8 , 0xFF , 219 ) #DLY
570+ self .femb .write_reg_bits ( self .REG_TP , 16 , 0xFFFF , 997 ) #FREQ
571+
572+ def setInternalPulser (self ,enable ,dac ):
573+ enableVal = int (enable )
574+ if (enableVal < 0 ) or (enableVal > 1 ) :
575+ print ( "femb_config_femb : setInternalPulser - invalid enable value" )
576+ return
577+ dacVal = int (dac )
578+ if ( dacVal < 0 ) or ( dacVal > 0x3F ) :
579+ print ( "femb_config_femb : setInternalPulser - invalid dac value" )
580+ return
581+
582+ #set pulser enable bit
583+ if enableVal == 1 :
584+ self .femb .write_reg ( self .INT_TP_EN , 0x2 ) #pulser enabled
585+ else :
586+ self .femb .write_reg ( self .INT_TP_EN , 0x3 ) #pulser disabled
587+
588+ dacVal = (dacVal & 0x3F )
589+ newDacVal = int ('{:08b}' .format (dacVal )[::- 1 ], 2 )
590+
591+ #connect channel test input to external pin
592+ for asic in range (0 ,self .NASICS ,1 ):
593+ baseReg = self .REG_SPI_BASE + int (asic )* 9
594+ if enableVal == 1 :
595+ self .femb .write_reg_bits ( baseReg + 8 , 24 , 0x3 , 0x2 ) #ASIC gen reg
596+ else :
597+ self .femb .write_reg_bits ( baseReg + 8 , 24 , 0x3 , 0x0 ) #ASIC gen reg
598+
599+ self .doAsicConfig ()
600+
601+ self .femb .write_reg_bits ( self .REG_FPGA_TP_EN , 0 , 0x3 , 0x1 )
602+ self .femb .write_reg_bits ( self .REG_TP , 0 , 0x3F , dacVal ) #TP Amplitude
603+ self .femb .write_reg_bits ( self .REG_TP , 8 , 0xFF , 219 ) #DLY
604+ self .femb .write_reg_bits ( self .REG_TP , 16 , 0xFFFF , 997 ) #FREQ
0 commit comments