Michael Reese and Nik Kurz implemented the SIS3820 scaler module in MBS to be used with RIO4, IFC and MVLC.
Attached is zipped folder for usage with RIO4/IFC (f_user.c, etc.).
Below is the email by Michael with some explanation and the config needed to implement the module in MVME for use with the MVLC.
######################################################
############ EMAIL by M.Reese 02.10.2024 #############
######################################################
Hallo Jan,
Das SIS3820 Scaler Modul muss auf Adresse 0x08000000 eingedreht werden.
Das NIM-Signal, das die Scaler "latchen" soll, muss für alle Konfigurationen (RIO4/IFC/MVLC) in "input 1" rein. In dem 8er-LEMO-Block ist das der input unten links.
RIO/IFC
Die modifizierte f_user.c fuer SIS3820 readout mit RIO4 / IFC ist hier:
/daq/usr/mreese/mbsrun/rio4l_mesytec_MADC32_test/f_user.c
MVLC
Für MVLC habe ich zwei Readout-Varianten implementiert, du musst mal schauen welche besser für eure Anwendung passt.
1) Readout über die "Shadow Register". Die latchen die Counter wenn auf "input 1" ein Signal kommt. Diesen Readout kann man entweder mit Blocktransfer oder mit Single Cycle machen. Im Single Cycle kannst du beliebige Subsets an Register wählen. Im Blocktransfer nur zusammenhängende Register. Hier liegen die Daten ab Adresse 0x800.
2) Readout über FIFO. Es gibt hier eine Bitmaske "copy disable register", über die man bestimmen kann welche Counter nicht in die FIFO geschrieben werden. Da es "copy disable" heißt, bedeutet '0' dass der Counter in die Daten kopiert wird. Die Daten werden aus Adresse 0x800000 gelesen, also andere Adresse als die Shadow Register. Hier muss man aufpassen, dass man beim Blocktransfer immer genau die korrekte Anzahl an Werten liest, die in der "copy disable" Maske eingestellt sind. Ansonsten wird der Readout (aus unbekannten Gründen) sehr langsam. Im Prinzip ist das der schnellste Modus, insbesondere wenn du ein nicht zusammenhängendes Subset von Kanälen im Blocktransfer lesen willst. Aber es ist leider etwas komplizierter.
Wenn du die beiden Textabschnitte unten kopierst wie sie sind, dann bekommst du Variante 2) "MULTI CHANNEL SCALER".
Um umzuschalten "LATCHING SCALER" musst du unter der Zeile "# configure the operation mode register" die Zeile mit "mode of operation 0" nehmen, und im Readout Loop eine der beiden unteren Varianten nehmen (die auf Adresse 0x800 lesen).
Viele Grüsse,
Michael
----------------
MVME workspace:
event_3_hardware_trigger_type_1 -> Rechtsklick -> Add Module ->
Type: UserModule_10 , Name: SIS3820 , Address : 0x08000000
---------------
Module Init:
# =====================================================================
# Reset the module
# =====================================================================
write a32 d32 0x400 0x1 # KEY_RESET
write a32 d32 0x404 0x1 # KEY_SDRAM_FIFO_RESET
write a32 d32 0x000 0xffff0000 # clear all bits in Control/Status Register
# =====================================================================
# Setup for "LATCHING SCALER" mode
# - disadvantage: this has no channel mask, i.e. only a conscutive cahnnels
# can be read out in block mode (blt)
# if an arbitraty subset of channels is needed one has to
# do single cycle readout
#
# or
#
# Setup for "MULTI CHANNEL SCALER" mode
# - advantage: this mode allows to select a subset of channels using a mask register (0x104)
# - disadvantage: this requires the high address space 0x800000
#
# In both modes, the input 1 on the front panel latches the scaler values
# In both modes, the input 3 in the front panel inhibits the counters (i.e. negative gate for the scalers operation)
#
# Module front panel LEMO outputs / inputs for this configuration
# =====================================================================
# output 7 (10M) (L/M) output 8 L/M = copy of LNE input in Scaler Mode; Copy-to-SDRAM-in-progress in Multi channel Scaler mode
# output 5 ( * ) (10M) output 6 10M = 10 MHz output clock (20 ns pulse)
# input 3 (InC) ( * ) input 4 InC = inhibit counting (counters stop countig if this is enabled (NIM-enabled = -0.7 V)
# input 1 (LNE) ( * ) input 2 LNE = load next event (copies all 32 counters into shadow registers)
# =====================================================================
# configure the operation mode register:
#write a32 d32 0x100 0x00220011 # [30:28] mode of operation 0 : "LATCHING SCALER" mode : counter data is copied to shadow registers on LNE (load next event)
write a32 d32 0x100 0x20220011 # [30:28] mode of operation 2 : "MULTI CHANNEL SCALER" mode : counter data is copied to SDRAM in FIFO emulation mode
# [21:20] output mode 2 : ouptut 5 -> LNE pulse , outputs 6+7 -> 10 MHz pulses
# [18:16] input mode 2 : input 1 -> external next pulse, input 3 -> inhibit counting
# [13:12] select SDRAM mode 1 : SDRAM (instead of FIFO) allows to read data from address 0x800000
# [ 6: 4] LNE (load next event) is taken from input 1 on front panel
# [ 0] celect non clearing mode 0: counters are NOT cleared at LNE
# =====================================================================
# Select the channels (only relevant for "MULTI CHANNEL SCALER" mode)
# USER MUST MAKE SURE THAT NUMBER OF ENABLED CHANNELS MATCHES
# THE NUMBER OF WORDS READ IN BLT READOUT AT ADDRESS 0x800000
# =====================================================================
write a32 d32 0x104 0x00000000 # disable no channels (i.e. copy all 32 channels to SDRAM). Readout should be "blt a32 0x800000 32"
#write a32 d32 0x104 0x0fffffff # disable 28 lower channels (i.e. copy 4 channels [31,30,29,28] to SDRAM). Readout should be "blt a32 0x800000 4"
#write a32 d32 0x104 0xffffffbb # disable all but channels 2 to 6. Readout should be "blt a32 0x800000 2"
# =====================================================================
# Enable the module.
# Writing any value into this register starts the scaler operation.
# =====================================================================
write a32 d32 0x418 0x1 # KEY_OPERATION_ENABLE register: any write access starts scaler operation
----------------
Readout Loop:
# ==================================================================
# Readout for "MULTI CHANNEL SCALER" mode
#
# MAKE SURE THAT THE NUMBER OF 32-BIT-WORDS MUST MATCH
# THE SUM OF NON DISABLED BITS IN THE COPY DISABLE REGISTER (0x104)
# IN MODULE INIT
# ==================================================================
blt a32 0x800000 32
# ==================================================================
# Block Transfer Readout for "LATCHING SCALER" mode
# Read shadow registers (latched counters) with block transfer
# The latching happens on LNE signal (front panel input 1)
# ==================================================================
#blt a32 0x800 32
# ==================================================================
# Single Cycle Readout for "LATCHING SCALER" mode
# Read shadow registers with single cycle
# ==================================================================
#read a32 d32 0x800
#read a32 d32 0x804
#read a32 d32 0x808
#read a32 d32 0x80c
#read a32 d32 0x810
#read a32 d32 0x814
#read a32 d32 0x818
#read a32 d32 0x81c
#read a32 d32 0x820
#read a32 d32 0x824
#read a32 d32 0x828
#read a32 d32 0x82c
#read a32 d32 0x830
#read a32 d32 0x834
#read a32 d32 0x838
#read a32 d32 0x83c
#read a32 d32 0x840
#read a32 d32 0x844
#read a32 d32 0x848
#read a32 d32 0x84c
#read a32 d32 0x850
#read a32 d32 0x854
#read a32 d32 0x858
#read a32 d32 0x85c
#read a32 d32 0x860
#read a32 d32 0x864
#read a32 d32 0x868
#read a32 d32 0x86c
#read a32 d32 0x870
#read a32 d32 0x874
#read a32 d32 0x878
#read a32 d32 0x87c
####################################
############ EMAIL END #############
#################################### |