From 647f5d4fb57cdc485c8780df85c6e0c4906f1d29 Mon Sep 17 00:00:00 2001 From: Joao Paulo Martins <joaopaulo.martins@esss.se> Date: Fri, 17 Jul 2020 00:43:03 +0200 Subject: [PATCH] WIP --- .gitignore | 1 + cmds/.keep | 0 cmds/evm-simple.cmd | 48 +++++ configure/CONFIG_MODULE | 2 +- ts2evm-loc/ts2evmApp/Db/.keep | 0 .../ts2evmApp/Db/ts2_evm_controls.template | 166 ++++++++++++++++++ ts2evm-loc/ts2evmApp/src/.keep | 0 ts2evm-loc/ts2evmApp/src/evm_subroutines.c | 54 ++++++ ts2evm-loc/ts2evmApp/src/evm_subroutines.dbd | 1 + ts2evm.Makefile | 19 +- 10 files changed, 279 insertions(+), 12 deletions(-) delete mode 100644 cmds/.keep create mode 100644 cmds/evm-simple.cmd delete mode 100644 ts2evm-loc/ts2evmApp/Db/.keep create mode 100644 ts2evm-loc/ts2evmApp/Db/ts2_evm_controls.template delete mode 100644 ts2evm-loc/ts2evmApp/src/.keep create mode 100644 ts2evm-loc/ts2evmApp/src/evm_subroutines.c create mode 100644 ts2evm-loc/ts2evmApp/src/evm_subroutines.dbd diff --git a/.gitignore b/.gitignore index 1a04676..d4afc66 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ core.* *PVs.list *-loc/*.Makefile ts2evm-loc/*.Makefile +.vscode \ No newline at end of file diff --git a/cmds/.keep b/cmds/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/cmds/evm-simple.cmd b/cmds/evm-simple.cmd new file mode 100644 index 0000000..d80de6e --- /dev/null +++ b/cmds/evm-simple.cmd @@ -0,0 +1,48 @@ +# .cmd +require "mrfioc2" "2.2.1rc1" +#require "supercycleEngine" "master" +require ts2evm,develop + +epicsEnvSet(REFTABS_DIR, "/home/iocuser/timing/reftabs") + +epicsEnvSet(PREFIX, "TD-RFLAB:TS-EVG-01") +epicsEnvSet(PSCE, "TD-RFLAB:TS-SCE-01") +epicsEnvSet(PEVG, "TD-RFLAB:TS-EVG-01") + +# Load standard timing modules environment +iocshLoad "$(mrfioc2_DIR)/mtca.iocsh" +iocshLoad "$(mrfioc2_DIR)/ts.iocsh" +iocshLoad "$(mrfioc2_DIR)/evm.iocsh" "P=$(PREFIX), OBJ=EVM, PCIID=09:00.0, U=:EVRU-, D=:EVRD-" + +dbLoadRecords("ts2_evm_controls.template", "P=$(PREFIX):, EVGPREFIX=$(PREFIX):") + +iocInit + +iocshLoad "$(mrfioc2_DIR)/evgr.iocsh" "P=$(PEVG), INTRF=, INTPPS=" + +dbpf $(PREFIX):Enable-Sel "Ena Master" +dbpf $(PREFIX):1ppsInp-Sel "Sys Clk" + +# Set MXC0 to generate 14 Hz +dbpf $(PREFIX):Mxc0-Prescaler-SP 6289464 +dbpf $(PREFIX):Mxc0-Polarity-Sel "Orginal" + +# Generate event 14 upon trigger on Mxc0 +dbpf $(PREFIX):TrigEvt0-EvtCode-SP 14 +dbpf $(PREFIX):TrigEvt0-TrigSrc-Sel "Mxc0" + +# Configure sequencers +dbpf $(PREFIX):SoftSeq0-RunMode-Sel "Normal" +dbpf $(PREFIX):SoftSeq0-TsResolution-Sel "uSec" +dbpf $(PREFIX):SoftSeq0-TrigSrc-0-Sel "Mxc0" +dbpf $(PREFIX):SoftSeq0-Load-Cmd "1" + +dbpf $(PREFIX):SoftSeq1-RunMode-Sel "Normal" +dbpf $(PREFIX):SoftSeq1-TsResolution-Sel "uSec" +dbpf $(PREFIX):SoftSeq1-TrigSrc-0-Sel "Mxc0" +dbpf $(PREFIX):SoftSeq1-Load-Cmd "1" + +dbpf $(PREFIX):SoftSeq2-RunMode-Sel "Single" +dbpf $(PREFIX):SoftSeq2-TsResolution-Sel "uSec" +dbpf $(PREFIX):SoftSeq2-TrigSrc-0-Sel "Mxc0" +dbpf $(PREFIX):SoftSeq2-Load-Cmd "1" diff --git a/configure/CONFIG_MODULE b/configure/CONFIG_MODULE index 587a4e0..e022fd4 100644 --- a/configure/CONFIG_MODULE +++ b/configure/CONFIG_MODULE @@ -3,7 +3,7 @@ EPICS_MODULE_NAME:=ts2evm EPICS_MODULE_TAG:=master # -E3_MODULE_VERSION:=master +E3_MODULE_VERSION:=develop # DEPENDENT MODULE VERSION # For Example, diff --git a/ts2evm-loc/ts2evmApp/Db/.keep b/ts2evm-loc/ts2evmApp/Db/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/ts2evm-loc/ts2evmApp/Db/ts2_evm_controls.template b/ts2evm-loc/ts2evmApp/Db/ts2_evm_controls.template new file mode 100644 index 0000000..96393ad --- /dev/null +++ b/ts2evm-loc/ts2evmApp/Db/ts2_evm_controls.template @@ -0,0 +1,166 @@ + +######################################################## +# Cycle frequency +######################################################## +record(ao, "$(P)$(R=)CycleFreq-SP") { + field(DESC, "Cycle frequency setpoint") + field(VAL, "14") + field(DRVL, "0") + field(DRVH, "14") +} + + +######################################################## +# RF Pulse Lenght +######################################################## +record(ao, "$(P)$(R=)RFPulseLen-SP") { + field(DESC, "RF Pulse Length") + field(VAL, "3000") + field(DRVL, "0") + field(DRVH, "3600") + field(EGU, "us") + field(PINI, "YES") + + field(FLNK, "$(P)$(R=)SeqSelecCalc PP") +} + + +######################################################## +# Proton Pulse Lenght +######################################################## +record(ao, "$(P)$(R=)PBLen-SP") { + field(DESC, "Beam Length") + field(VAL, "50") + field(DRVL, "5") + field(DRVH, "2863") + + field(FLNK, "$(P)$(R=)SeqSelecCalc PP") +} + +######################################################## +# Record logic to alternate usage of sequencers +######################################################## +record(calc, "$(P)$(R=)SeqSelecCalc") { + field(CALC, "A > 0 ? 0 : 1") + field(INPA, "$(P)$(R=)SeqSelecCalc") + field(VAL, "0") + field(FLNK, "$(P)$(R=)SeqSelecFOut") + field(TPRO, "1") +} + +record(fanout, "$(P)$(R=)SeqSelecFOut") { + field(SELM, "Specified") + field(SELL, "$(P)$(R=)SeqSelecCalc") + field(LNK0, "$(P)$(R=)Seq0-Write-aSub") + field(LNK1, "$(P)$(R=)Seq1-Write-aSub") + field(TPRO, "1") +} + +######################################################## +# aSub process - Sequencer 0 +######################################################## +record(aSub, "$(P)$(R=)Seq0-Write-aSub") { + field(DESC, "Sequencer arrays") + field(SNAM, "seqConfigure") + field(SCAN, "Passive") + + field(INPA, "$(P)$(R=)RFPulseLen-SP") + field(FTA, "FLOAT") + field(NOA, "1") + + field(INPB, "$(P)$(R=)PBLen-SP") + field(FTB, "FLOAT") + field(NOB, "1") + + + field(FTVA, "ULONG") + field(OUTA, "$(EVGPREFIX)SoftSeq0-EvtCode-SP CP") + + field(FTVB, "FLOAT") + field(OUTB, "$(EVGPREFIX)SoftSeq0-Timestamp-SP CP") + + field(FLNK, "$(P)$(R=)Seq0-Enable PP") + field(TPRO, "1") +} + +record(seq, "$(P)$(R=)Seq0-Enable") { + field(SELM, "All") + # Disable sequencer 1 + field(DOL1, "1") + field(LNK1, "$(EVGPREFIX)SoftSeq1-Disable-Cmd CP") + # Commit sequencer 0 + field(DOL2, "1") + field(LNK2, "$(EVGPREFIX)SoftSeq0-Commit-Cmd CP") + # Enable sequencer 0 + field(DOL3, "1") + field(LNK3, "$(EVGPREFIX)SoftSeq0-Enable-Cmd CP") + + field(TPRO, "1") +} + + +######################################################## +# aSub process - Sequencer 1 +######################################################## +record(aSub, "$(P)$(R=)Seq1-Write-aSub") { + field(DESC, "Sequencer arrays") + field(SNAM, "seqConfigure") + field(SCAN, "Passive") + + field(INPA, "$(P)$(R=)RFPulseLen-SP") + field(FTA, "FLOAT") + field(NOA, "1") + + field(INPB, "$(P)$(R=)PBLen-SP") + field(FTB, "FLOAT") + field(NOB, "1") + + + field(FTVA, "ULONG") + field(OUTA, "$(EVGPREFIX)SoftSeq1-EvtCode-SP CP") + + field(FTVB, "FLOAT") + field(OUTB, "$(EVGPREFIX)SoftSeq1-Timestamp-SP CP") + field(TPRO, "1") + + field(FLNK, "$(P)$(R=)Seq1-Enable PP") +} + +record(seq, "$(P)$(R=)Seq1-Enable") { + field(SELM, "All") + # Disable sequencer 0 + field(DOL1, "1") + field(LNK1, "$(EVGPREFIX)SoftSeq0-Disable-Cmd CP") + # Commit sequencer 1 + field(DOL2, "1") + field(LNK2, "$(EVGPREFIX)SoftSeq1-Commit-Cmd CP") + # Enable sequencer 1 + field(DOL3, "1") + field(LNK3, "$(EVGPREFIX)SoftSeq1-Enable-Cmd CP") + + field(TPRO, "1") +} + +######################################################## +# aSub process - Sequencer 2 +######################################################## +record(aSub, "$(P)$(R=)Seq2-Write-aSub") { + field(DESC, "Sequencer arrays") + field(SNAM, "seqConfigure") + field(SCAN, "Passive") + + field(INPA, "$(P)$(R=)RFPulseLen-SP") + field(FTA, "FLOAT") + field(NOA, "1") + + field(INPB, "$(P)$(R=)PBLen-SP") + field(FTB, "FLOAT") + field(NOB, "1") + + + field(FTVA, "ULONG") + field(OUTA, "$(EVGPREFIX)SoftSeq2-EvtCode-SP CP") + + field(FTVB, "FLOAT") + field(OUTB, "$(EVGPREFIX)SoftSeq2-Timestamp-SP CP") +} diff --git a/ts2evm-loc/ts2evmApp/src/.keep b/ts2evm-loc/ts2evmApp/src/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/ts2evm-loc/ts2evmApp/src/evm_subroutines.c b/ts2evm-loc/ts2evmApp/src/evm_subroutines.c new file mode 100644 index 0000000..5667509 --- /dev/null +++ b/ts2evm-loc/ts2evmApp/src/evm_subroutines.c @@ -0,0 +1,54 @@ +#include <stdio.h> +#include <aSubRecord.h> +#include <registryFunction.h> +#include <epicsExport.h> + +#include <string.h> + +#define EVT14HZ 14 +#define RF_ST 60 +#define RF_END 61 +#define BPULSE_ST 12 +#define BPULSE_END 13 +#define SEQ_END 127 + +#define MAX_SEQ_EVENTS 5 + +static long seqConfigure(aSubRecord *prec) +{ + int event_codes[MAX_SEQ_EVENTS]; + float tstamp_codes[MAX_SEQ_EVENTS]; + + // Get RF pulse length from INPA + float rflen = *(float *)prec->a; + + // Get Proton Beam pulse length from INPB + float pblen = *(float *)prec->b; + + // Create the array of events + event_codes[0] = RF_ST; + event_codes[1] = BPULSE_ST; + event_codes[2] = BPULSE_END; + event_codes[3] = RF_END; + event_codes[4] = SEQ_END; + + // Create the array of time stamps + tstamp_codes[0] = 10000.0; // RF_ST + tstamp_codes[3] = tstamp_codes[0] + rflen; // RF_END + + tstamp_codes[1] = tstamp_codes[0] + 738.2; // BPULSE_ST + tstamp_codes[2] = tstamp_codes[1] + pblen; // BPULSE_END + + tstamp_codes[4] = tstamp_codes[3] + 1.0; + + // Write the output arrays + memcpy(prec->vala, event_codes, MAX_SEQ_EVENTS * sizeof(int)); + prec->neva = MAX_SEQ_EVENTS; + + memcpy(prec->valb, tstamp_codes, MAX_SEQ_EVENTS * sizeof(float)); + prec->nevb = MAX_SEQ_EVENTS; + + return 0; +} + +epicsRegisterFunction(seqConfigure); diff --git a/ts2evm-loc/ts2evmApp/src/evm_subroutines.dbd b/ts2evm-loc/ts2evmApp/src/evm_subroutines.dbd new file mode 100644 index 0000000..02c3072 --- /dev/null +++ b/ts2evm-loc/ts2evmApp/src/evm_subroutines.dbd @@ -0,0 +1 @@ +function(seqConfigure) diff --git a/ts2evm.Makefile b/ts2evm.Makefile index b1a708e..f60534a 100644 --- a/ts2evm.Makefile +++ b/ts2evm.Makefile @@ -43,16 +43,13 @@ include $(E3_REQUIRE_CONFIG)/DECOUPLE_FLAGS #sequencer_VERSION=$(SEQUENCER_DEP_VERSION) #endif - - ## Exclude linux-ppc64e6500 -##EXCLUDE_ARCHS += linux-ppc64e6500 -##EXCLUDE_ARCHS += linux-corei7-poky - -# APP:=calcApp -# APPDB:=$(APP)/Db -# APPSRC:=$(APP)/src +EXCLUDE_ARCHS += linux-ppc64e6500 +EXCLUDE_ARCHS += linux-corei7-poky +APP:=ts2evmApp +APPDB:=$(APP)/Db +APPSRC:=$(APP)/src # USR_INCLUDES += -I$(where_am_I)$(APPSRC) @@ -66,7 +63,7 @@ include $(E3_REQUIRE_CONFIG)/DECOUPLE_FLAGS # TEMPLATES += $(wildcard $(APPDB)/*.db) # TEMPLATES += $(wildcard $(APPDB)/*.db) # TEMPLATES += $(wildcard $(APPDB)/*.proto) -# TEMPLATES += $(wildcard $(APPDB)/*.template) +TEMPLATES += $(wildcard $(APPDB)/*.template) # DBDINC_SRCS += $(APPSRC)/swaitRecord.c @@ -85,7 +82,7 @@ include $(E3_REQUIRE_CONFIG)/DECOUPLE_FLAGS # HEADERS += $(DBDINC_HDRS) -# SOURCES += $(APPSRC)/sCalcPostfix.c +SOURCES += $(APPSRC)/evm_subroutines.c # SOURCES += $(APPSRC)/sCalcPerform.c # SOURCES += $(APPSRC)/aCalcPostfix.c # SOURCES += $(APPSRC)/aCalcPerform.c @@ -103,7 +100,7 @@ include $(E3_REQUIRE_CONFIG)/DECOUPLE_FLAGS # # DBDINC_SRCS should be last of the series of SOURCES # SOURCES += $(DBDINC_SRCS) -# DBDS += $(APPSRC)/calcSupport_LOCAL.dbd +DBDS += $(APPSRC)/evm_subroutines.dbd # DBDS += $(APPSRC)/calcSupport_withSNCSEQ.dbd # DBDS += $(APPSRC)/calcSupport_withSSCAN.dbd -- GitLab