EPICS VME Crate Monitor Software Design Note 7.2.39.19 Rev. 0 Date: 2003-01-09



Similar documents
VME Data Acquisition System: Fundamentals and Beyond. Abhinav Kumar Bhabha Atomic Research Centre, Mumbai March 2011

SAN Conceptual and Design Basics

PLC Support Software at Jefferson Lab

AQA GCSE in Computer Science Computer Science Microsoft IT Academy Mapping

AN3998 Application note

DAC Digital To Analog Converter

Linux Kernel Architecture

Application Note. Introduction AN2471/D 3/2003. PC Master Software Communication Protocol Specification

CLS Naming and Numbering Convention

hp StorageWorks DS-KGPSA-CA/CX and FCA2354 PCI host bus adapters

A Design of Video Acquisition and Transmission Based on ARM. Ziqiang Hao a, Hongzuo Li b

Learning USB by Doing.

Canadian Technology Accreditation Criteria (CTAC) ELECTRONIC ENGINEERING TECHNOLOGY - TECHNOLOGIST Technology Accreditation Canada (TAC)

CS 377: Operating Systems. Outline. A review of what you ve learned, and how it applies to a real operating system. Lecture 25 - Linux Case Study

Analysis of Open Source Drivers for IEEE WLANs

S4000TH HART. HART Communication Manual

The modular concept of the MPA-3 system is designed to enable easy accommodation to a huge variety of experimental requirements.

TivaWare Utilities Library

Embedded Systems on ARM Cortex-M3 (4weeks/45hrs)

White Paper. Real-time Capabilities for Linux SGI REACT Real-Time for Linux

Freescale MQX USB Device User Guide

MPLAB TM C30 Managed PSV Pointers. Beta support included with MPLAB C30 V3.00

VISA for PXI Specification

BLE113 DEVELOPMENT KIT

Wireless Mesh Networks under FreeBSD

Bluetooth HID Profile

Development. Igor Sheviakov Manfred Zimmer Peter Göttlicher Qingqing Xia. AGIPD Meeting April, 2014

Application Note AN0008. Data Logging Extension. For. Venus 8 GPS Receiver

SIM900_Custom Application Building Tutorial_Application Note_V1.00

UEFI on Dell BizClient Platforms

A+ Guide to Managing and Maintaining Your PC, 7e. Chapter 1 Introducing Hardware

A Packet Forwarding Method for the ISCSI Virtualization Switch

USB Card Reader Configuration Utility. User Manual. Draft!

Using a Generic Plug and Play Performance Monitor for SoC Verification

Have both hardware and software. Want to hide the details from the programmer (user).

Migrating Control System Servers to Virtual Machines

MODULE BOUSSOLE ÉLECTRONIQUE CMPS03 Référence :

AlazarTech SDK Programmer s Guide. Version May 28, 2010

µtasker Document FTP Client

In: Proceedings of RECPAD th Portuguese Conference on Pattern Recognition June 27th- 28th, 2002 Aveiro, Portugal

The new frontier of the DATA acquisition using 1 and 10 Gb/s Ethernet links. Filippo Costa on behalf of the ALICE DAQ group

Chapter 3: Operating-System Structures. Common System Components

Phoenix Technologies Ltd.

FOUNDATION Fieldbus High Speed Ethernet Control System

Best Practises for LabVIEW FPGA Design Flow. uk.ni.com ireland.ni.com

How to use KEPServerEX OPC Server (Kepware) with iologik 4000 (Modbus TCP/IP NA-4010 and Modbus Serial NA-4020/NA-4021)

Eureka Technology. Understanding SD, SDIO and MMC Interface. by Eureka Technology Inc. May 26th, Copyright (C) All Rights Reserved

Foxboro Evo Process Automation System

SHORT TRAINING COURSES

FOXBORO. I/A Series SOFTWARE Product Specifications. I/A Series Intelligent SCADA SCADA Platform PSS 21S-2M1 B3 OVERVIEW

How To Use The Sunny Central Communication Controller

FAME Operating Systems

Applications to Computational Financial and GPU Computing. May 16th. Dr. Daniel Egloff

The Answer to the 14 Most Frequently Asked Modbus Questions

Libera at ELETTRA: prehistory, history and present state

Dialogic Global Call API

C Programming. for Embedded Microcontrollers. Warwick A. Smith. Postbus 11. Elektor International Media BV. 6114ZG Susteren The Netherlands

Veritas Cluster Server

Linux Driver Devices. Why, When, Which, How?

Chapter 2 Basic Structure of Computers. Jin-Fu Li Department of Electrical Engineering National Central University Jungli, Taiwan

Freescale Semiconductor, I

Chapter 11 I/O Management and Disk Scheduling

Process Control and Automation using Modbus Protocol

Board also Supports MicroBridge

SKP16C62P Tutorial 1 Software Development Process using HEW. Renesas Technology America Inc.

Computer Organization and Components

Performance Monitor on PowerQUICC II Pro Processors

Dialogic SS7 Protocols SCCP Sub-System Monitor (SSM) User Guide. Document Reference U28SSS

Description: Multiparameter System (4 or 8 channels)

AN1754 APPLICATION NOTE

GE Intelligent Platforms. PACSystems High Availability Solutions

AGIPD Interface Electronic Prototyping

Sensors and the Zaurus S Hardware

LLRF. Digital RF Stabilization System

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

Accessing I2C devices with Digi Embedded Linux 5.2 example on Digi Connect ME 9210

Network Attached Storage. Jinfeng Yang Oct/19/2015

Serial Communications

How To Port A Program To Dynamic C (C) (C-Based) (Program) (For A Non Portable Program) (Un Portable) (Permanent) (Non Portable) C-Based (Programs) (Powerpoint)

S and STEP 7 Basic V10.5

isppac-powr1220at8 I 2 C Hardware Verification Utility User s Guide

Table of Contents. Overview Features Applications Hardware requirement Card dimensions Software Installation...

E-Blocks Easy RFID Bundle

Minix Mini Unix (Minix) basically, a UNIX - compatible operating system. Minix is small in size, with microkernel-based design. Minix has been kept

Globus Striped GridFTP Framework and Server. Raj Kettimuthu, ANL and U. Chicago

Fastboot Techniques for x86 Architectures. Marcus Bortel Field Application Engineer QNX Software Systems

Automating witfi STEP7 in LAD and FBD

- T-Carrier Technologies -

PATROL Console Server and RTserver Getting Started

An Implementation Of Multiprocessor Linux

What to do about Fiber Skew?

Automating with STEP7 in LAD and FBD

Programmable Logic Controller PLC

Transcription:

EPICS VME Crate Monitor Software Design Note 7.2.39.19 Rev. 0 Date: 2003-01-09 Copyright 2003, Canadian Light Source Inc. This document is the property of Canadian Light Source Inc. (CLS). No exploitation or transfer of any information contained herein is permitted in the absence of an agreement with CLS, and neither the document nor any such information may be released without the written consent of CLS. Original on File Signed by: Prepared by: R. Berg Reviewed by: T. Wilson Reviewer by: G. Wright Approved by: E. D. Matias Canadian Light Source, Inc. 107 North Road University of Saskatchewan Saskatoon, Saskatchewan Canada Page i of 19

REVISION HISTORY Revision Date Description Author A Oct 8 2002 Initial Draft R. Berg 0 Jan 9 2003 Issued rev 0 R. Berg Orbit Corrector Power Supply Communications Protocol for SR1 Page 2 of 19

Table of Contents Page 1.0 Introduction... 4 Abbreviations... 4 2.0 Linux, Epics, SIS1100 driver Purpose and Method of Interaction... 5 SIS1100 Driver... 5 Linux... 6 EPICS... 7 Putting them all together... 7 3.0 Memory Mapping and register access... 8 4.0 VME Crate configuration, the.cmd file... 10 5.0 Software Initialization... 12 Init_SIS1100... 13 Init_110bl... 13 6.0 Database Files... 14 7.0 Appendix A... 15 7.1.1 Supported VME Cards... 15 7.1.2 Exampleinclude.dbd... 16 7.1.3 Crate Configuration Files... 17 Orbit Corrector Power Supply Communications Protocol for SR1 Page 3 of 19

1.0 Introduction The purpose of the crate monitor software is to easily interface a PC computer running Linux to one or more VME crates via fiber optic link. The fiber optic link is achieved by using a pair of cards SIS3100(VME) and SIS1100(PCI) installed into their respective back planes and connected with a fiber optic cable. Once connected, a Linux application is able to map the memory locations of any VME board installed in the VME crate into the application memory space of the Linux application. This allows the Linux application to access the registers or FIFO s of a particular board installed in a VME crate simply by reading a pointer to a memory location. The actual transmission and reception of data across the fiber optic link is transparently taken care of by the SIS1100 PCI driver. This document will discuss the hardware but primarily the software required to achieve the PC to VME link via Fiber. Once implemented, this software/hardware combination will provide a reusable and scalable solution for interconnecting the CLS s feedback and control system. The discussion of software will also include the integration of the EPICS control system and its use of the Crate_monitor software. Abbreviations BPM ADC Beam Position Monitor/s Analog to Digital Converter EPICS the software control system used at the CLS to connect the operator to the diagnostic or control hardware of the Synchrotron IOC Input Output Computer Orbit Corrector Power Supply Communications Protocol for SR1 Page 4 of 19

2.0 Linux, Epics, SIS1100 driver Purpose and Method of Interaction SIS1100 Driver Provides an abstraction layer between the user software, which needs to access a VME board on a crate and the actual board in that crate. The system is organized in the following manner. Fiber Optic link VME CRATE 1: Hardware EPICS Application Linux IOC sis1100 PCI card PV record read routines /dev/sis1100_1 (descriptor 1) PV record write routines mapped memory /dev/sis1100_2 (descriptor 2) sis1100 PCI card Fiber Optic Link VME CRATE 2: Hardware /dev/sis1100_3 (descriptor 3) sis1100 PCI card Fiber Optic Link VME CRATE 3: Hardware The EPICS application opens the SIS1100 devices as files and requests that memory ranges that define each VME crate be mapped into the user space of the EPICS application. Once the mapping has taken place, each EPICS Process Variable (PV) will make note of its desired memory offset from the mapped address and store this information in its device private structure. In this fashion, the read routine for a process variable can retrieve the correct location in the mapped memory in order to read the data for that PV. The memory mapping definition for each VME crate is defined by what boards are installed in that crate. Care must be taken not to install VME boards with memory addresses that overlap. Each VME crate will have its board configuration outlined in its.cmd file, there will be one cmd file per VME crate. Orbit Corrector Power Supply Communications Protocol for SR1 Page 5 of 19

Each SIS1100 device can support up to as many VME boards that fit into a single VME crate. The only requirement is that each board be defined in the cmd file for that crate. The individual board data is indexed by the following unique identifiers: 1) SIS1100 device file descriptor 2) crate id 3)board id. The data that is stored for each individual board contains the mapped base address for that board, and from that address a particular register offset can easily be calculated and dereferenced. Individual crate data is organized in the following manner: EPICS Application /dev/sis1100_1 (descriptor 1) Crate ID (0) (1) (2) (3) (4) /dev/sis1100_2 (descriptor 2) Crate ID (1) (1) (2) (3) (4) /dev/sis1100_3 (descriptor 3) Crate ID (2) (1) (2) (3) (4) Linux Provides an excellent environment for software development as well as an IOC operating system. Take advantage of all of the GNU tools for compiling and debugging. Well supported and documented. The only question is if the generic Linux kernel will provide enough processing Orbit Corrector Power Supply Communications Protocol for SR1 Page 6 of 19

performance given the tasks required. All indications at the time of this authoring are that the generic Linux kernel will suffice given a fast CPU and related hardware. Should the generic Linux fail to meet the requirements of most of the applications used at the CLS, a real time version of the Linux kernel will be explored. EPICS The control systems layer abstraction. The VME hardware is abstracted into process variables accessible anywhere on the network by any supported platform. The VME monitoring software provides a further abstraction such that the user doesn t need to worry about the actual transmission and reception of data across the fiber link and can in fact consider the VME hardware to be local to the IOC, when in fact it may be located 100 s of meters away. EPICS will be used as the bridge that will allow access to VME hardware via process variables. Once available through EPICS channel access calls, the beam control and diagnostic feedback data can be retrieved anywhere on the control network, and in some cases the general office network (feedback). Putting them all together The main goal of this approach is to end up with a single binary file that is configured by text files (.cmd files) that requires no re-compilation in order to configure the installation of a new board into an existing VME crate. Each crate will support any combination of VME board/s. Multiple instances of SIS1100 fiber link boards within a single IOC is supported, allowing a single IOC to control multiple VME crates. The fact that a single CPU will control multiple VME crates means that care must be taken when using the system described above in time critical situations. Orbit Corrector Power Supply Communications Protocol for SR1 Page 7 of 19

3.0 Memory Mapping and register access The memory mapping approach provides the following features: - A uniform access to all software as if it was local - The configuration for a particular board can be easily setup through the crate configuration file. This configuration file is an ASCII based text file therefore no compilation is required. - There is a standard way of reading and writing information from any kind of hardware located in a VME crate. All register read/writes and or FIFO reads are executed from standard pointer de-references common to most C code. The use of the SIS1100/SIS3100 fiber link boards enable an EPICS application to memory map the full register range of the VMIVME-2536 Digital I/O board. To map the memory of a given board, a call is made to the SIS1100 driver with the actual physical base address of the desired board as it exists in the VME crate. The driver then communicates with the SIS3100 VME master board to setup the physical address of the desired board into one of its memory mapping registers. The driver handles all protocol and communication across the fiber link. Once the call to map the memory completes, the driver returns with a virtual base address for the board, this virtual base address corresponds to the physical base address of the board. Once the mapping has been accomplished, the 32 bit input and 32 bit output registers of the VMIVME-2536 Digital I/O board are accessed via simple memory reads and writes to the correct offset address of the virtual base address. A practical example of this relationship is given next. Given the following which is taken from the documentation of the VMIVME-2536 manual: Relative Address Register Name Num Bits Bit Range $00 16 Na $02 Control and Status Register 16 Na $04 Input Data register 0 8 31 24 $05 Input Data register 1 8 23 16 $06 Input Data register 2 8 15 08 $07 Input Data register 3 8 07 00 $08 Output Data register 0 8 31 24 $09 Output Data register 1 8 23 16 $0A Output Data register 2 8 15 08 $0B Output Data register 3 8 07 00 $0C Reserved NA Figure 2. VMIVME-2536 register map If the physical base address of the VMIVME-2536 board as it exists in the VME crate was 0x00F00000. The EPICS software would make a call to memory map the address 0X00F0000, the virtual address returned by the memory map call is (for example) a Virtual Base Address (VBA) of 0x40001000. Now that the memory mapping has completed, we can access the Control and Status register with a read or write to: Orbit Corrector Power Supply Communications Protocol for SR1 Page 8 of 19

(VBA + Control and Status Register offset) = 0x40001000 + 0x02 = 0x40001002 All of the registers outlined above can be accessed in the same manner. Note that if the register is designated READ ONLY or WRITE ONLY that behavior remains consistent once mapped. A read to a WRITE ONLY register returns the value 0xFFFFFFFF (for a 32 bit register), and so on. Orbit Corrector Power Supply Communications Protocol for SR1 Page 9 of 19

4.0 VME Crate configuration, the.cmd file The discussion that follows will deal only with specific additions the cmd file format to achieve the VME crate configuration, to understand the EPICS cmd file in general please refer to EPICS documentation. In order for the software to keep track of which crate is connected to which SIS1100 interface and further to which VME board within that crate it wants to access, the configuration specific data for each crate is organized in such a way that the index s are used to keep track of the configuration data structure. A VME crate cmd file assumes the following organization. Crate_ID -> Board_ID->Configuration data Where the configuration data is defined as follows: typedef struct { int crate_id; int SIS1100_descr; volatile u_int8_t* virtual_base_addr; u_int32_t physical_base_addr; }base_addrs_st; The data is organized into a two dimensional array of pointers to base_addr_st structures. These structures contain all of the information required to map the memory of the VME board as well as access any register or FIFO that exists on that board. crate_id; This is the Crate ID that was passed in from the cmd file SIS1100_descr; This is the file descriptor number that will be was returned from an OPEN() file command when the driver for this VME crate was initialized. virtual_base_addr; This is the address in the memory space of the EPICS application that was returned by the call to map_memory. The virtual_base_addr is to be used when accessing that board from the EPICS software. Orbit Corrector Power Supply Communications Protocol for SR1 Page 10 of 19

An example of a crate configuration file that contains 4 VME boards is as follows: dbloaddatabase("../../dbd/example.dbd",0,0) registerrecorddevicedriver(pdbbase) #This is the first board, a VME digital I/O board that has a physical base address of 0x0070 0000 dbloadrecords("../../db/vmivme-2536rd.db","crate_id=1,board_name=vmi2536-2403:00,board_id=0,board_base=0x00700000") dbloadrecords("../../db/vmivme-2536wr.db","crate_id=1,board_name=vmi2536-2403:00,board_id=0,board_base=0x00700000") #This is the second board, a VME 24 bit ADC board that has a physical base address of 0x00D0 0000 dbloadrecords("../../db/ics110blrd.db","crate_id=1,board_name=icsadc-2403:00,board_id=1,board_base=0x00d00000") #This is the second board, a VME 24 bit ADC board that has a physical base address of 0x00D0 0000 dbloadrecords("../../db/ics110blarrayfifo.db","crate_id=1,board_name=2403bpm1-14:,board_id=1,board_base=0x00d00000,event_id=110") dbloadrecords("../../db/ics110blrd.db","crate_id=1,board_name=icsadc-2403:01,board_id=2,board_base=0x000d0000") dbloadrecords("../../db/ics110blfifo.db","crate_id=1,board_name=icsadc- 2403:01,board_id=2,board_base=0x000D0000,oversample=32") dbloadrecords("../../db/v820rd.db","crate_id=1,board_name=v820-2403:00,boar d_id=3,board_base=0xee000000") dbloadrecords("../../db/v820wr.db","crate_id=1,board_name=v820-2403:00,board_id=3,board_base=0xee000000") # init_sis1100(crate_id, path to device file) init_sis1100(1, "/dev/sis1100_3") # map_memory(crate_id, board_id, physical_base_address) map_memory(1, 0, 0x00700000) map_memory(1, 1, 0x00D00000) map_memory(1, 2, 0x000D0000) map_memory(1, 3, 0xEE000000) #init_110bl(crate_id, board_id, sampling_rate in Khz, set for internal(0) or external(1) clocking source,0 internal Acquire: 1 External Acquire) init_110bl(1, 1,35.0, 0, 1) #configure this 110bl for external clocking source #init_110bl(crate_id, board_id, sampling_rate in Khz, set for internal(0) or external(1) clocking source,0 internal Acquire: 1 External Acquire) init_110bl(1, 2, 100.0, 1, 0) iocinit() The references to init_110bl refer to a cpp routine that accessible through the EPICS cmd file, for further information on how this is accomplished please refer to the EPICS documentation. Orbit Corrector Power Supply Communications Protocol for SR1 Page 11 of 19

5.0 Software Initialization As with any EPICS application, the cmd files are read and the statements within them executed. At the heart of the VME crate monitor software is the ability of the EPICS application to map the memory of a VME crate into the user space of that EPICS application. Without this ability the interaction between EPICS and the hardware would be considerably more proprietary and much less generic and modular. In order to include memory mapping as part of the initialization process, routines have been written to accomplish the task of connecting the address space of a VME board to the EPICS application memory space. A single memory mapping routine is called directly from the cmd file in the following manner, map_memory(crate_id, board_id, physical_base_address) Arguments to the routine are: Crate_id Board_id unique id number of the desired crate, each cmd file MUST use a different crate_id number. unique VME board id of the desired board, each board within this cmd file MUST use a different board_id number. Physical_base_address the actual physical base address of that board that it is set to in the VME crate, each board in this VME crate MUST have a unique physical base address. Once the call to map_memory has been made, the mapped base address of the board can then be found in the board_map array indexed by the crate_id and board_id. All of the information required to process the PV is stored in the device private structure for that PV and extracted for use in the read or write routines. There are other routines that have been created such that they can also be called directly from the cmd file in order to initialize hardware local to the IOC as well as hardware located in a VME crate. Orbit Corrector Power Supply Communications Protocol for SR1 Page 12 of 19

Init_SIS1100 One example of initialization required local to the IOC is the init_sis1100 routine, this routine handles the opening of a particular 1100 device and returning a valid file descriptor that will be used by the rest of the software when interacting with the device. The arguments to init_sis1100 are crate_id and the path to device file: Ex: init_sis1100(1, "/dev/sis1100_3") Init_110bl When a specific initialization is required by a VME board the user can create a cpp routine to accomplish the task. One example is for the 24 bit ADC currently used in the booster ring for beam position measurements. On boot the board requires a calibration and sample rate initialization sequence, this is accomplished with the init_110bl routine. The arguments to init_110bl crate_id, board_id, sampling rate in Khz, set for internal (0) or external(1) clocking source,0 internal Acquire: 1 External Acquire: Ex: init_110bl(1, 2, 100.0, 1, 0) Here, the 110bl 24 bit ADC will be configured with the following settings: - crate_id of 1 - board_id of 2 - Sampling rate of 100 Khz - External clocking source to the board - Control of when to acquire will be set by software (internal) Orbit Corrector Power Supply Communications Protocol for SR1 Page 13 of 19

6.0 Database Files The memory map database files are comprised of three types, mmapregrd, mmapregwr and memory map FIFO database files. The read and write database files are generic 16/32 bit read and write database files that are meant to used when interacting with PV s that are 16/32 bit registers on a VME board. The input (read: INP) and output (write: OUT) field parameters for the mem map read/write database files are scanned as follows at record initialization: INP: sscanf (pmmapreg->inp.value.instio.string, "%i%i%x%x%x", &crate_id, &board_id, &board_base, &reg_offset, &reg_mask) Here is an example of the mmapregrd record Db type declaration for a read PV called Testreg on a CAEN V820 Scalar VME board. record(mmapregrd, "$(board_name):rd_testreg") { field(desc, "Scalar Testreg read") field(dtyp,"v820read") field(inp,"@$(crate_id) $(board_id) $(board_base) 0x1080 0xFFFFFFFF") field(egu, "Counts"). } OUT: sscanf (pmmapreg->out.value.instio.string, "%i%i%x%x%x", &crate_id, &board_id, &board_base, &offset, &reg_mask) Here is an example of the mmapregwr record Db type declaration for a write PV called Testreg on a CAEN V820 Scalar VME board. record(mmapregwr, "$(board_name):wr_testreg") { field(desc, "V820:Testreg write") field(dtyp,"v820write") field(out,"@$(crate_id) $(board_id) $(board_base) 0x1080 0xFFFFFFFF"). } Orbit Corrector Power Supply Communications Protocol for SR1 Page 14 of 19

7.0 Appendix A 7.1.1 Supported VME Cards Currently the list of supported cards includes: - ICS 110bl 24 bit ADC - CAEN V820 32 channel scalar - CAEN V265 sampling ADC - VMIC 2536 digital IO module Pending support for: - CAEN V792 charge integrating ADC Orbit Corrector Power Supply Communications Protocol for SR1 Page 15 of 19

7.1.2 Exampleinclude.dbd include "base.dbd" include "mmapregwrrecord.dbd" include "mmapregrdrecord.dbd" include "ICS110blFifoRecord.dbd" include "ICS110blArrayFifoRecord.dbd" include "aairecord.dbd" include "v265adcfiforecord.dbd" device(mmapregrd, INST_IO, devmmapregread, "V820READ") device(mmapregwr, INST_IO, devmmapregwrite, "V820WRITE") device(mmapregrd, INST_IO, devmmapregread, "ICS110blREAD") device(mmapregwr, INST_IO, devmmapregwrite, "ICS110blWRITE") device(mmapregrd, INST_IO, devmmapregread, "VMIVME2536READ") device(mmapregwr, INST_IO, devmmapregwrite, "VMIVME2536WRITE") device(mmapregrd, INST_IO, devmmapregread, "V792READ") device(mmapregwr, INST_IO, devmmapregwrite, "V792WRITE") device(ics110blfifo, INST_IO, devics110blfifo, "ICS110BLFIFO") device(aai, INST_IO, devics110blarrayfifo, "ICS110BLARRAYFIFO") device(mmapregrd, INST_IO, devmmapregread, "V265READ") device(mmapregwr, INST_IO, devmmapregwrite, "V265WRITE") device(v265adcfifo, INST_IO, devv265adcfifo, "V265FIFO") Orbit Corrector Power Supply Communications Protocol for SR1 Page 16 of 19

7.1.3 Crate Configuration Files 7.1.3.1 CR006.CMD dloaddatabase("../../dbd/example.dbd",0,0) registerrecorddevicedriver(pdbbase) #the event_id is used as the identifier for a callback event dbloadrecords("../../db/v792rd.db","crate_id=2,board_name=0006qct:00,board_id=0,board_base=0x00100000,eve nt_id=20") dbloadrecords("../../db/v792wr.db","crate_id=2,board_name=0006qct:00,board_id=0,board_base=0x00100000,ev ent_id=20") dbloadrecords("../../db/v792rd.db","crate_id=2,board_name=0006qct:01,board_id=1,board_base=0x00400000,eve nt_id=21") dbloadrecords("../../db/v792wr.db","crate_id=2,board_name=0006qct:01,board_id=1,board_base=0x00400000,ev ent_id=21") # init_sis1100(crate_id, path to device file) init_sis1100(2, "/dev/sis1100_1") # map_memory(crate_id, board_id, physical_base_address) map_memory(2, 0, 0x00100000) map_memory(2, 1, 0x00400000) Orbit Corrector Power Supply Communications Protocol for SR1 Page 17 of 19

7.1.3.2 CR2401.CMD dloaddatabase("../../dbd/example.dbd",0,0) registerrecorddevicedriver(pdbbase) dbloadrecords("../../db/vmivme-2536rd.db","crate_id=0,board_name=vmi2536-2401:00,board_id=0,board_base=0x00700000") dbloadrecords("../../db/vmivme-2536wr.db","crate_id=0,board_name=vmi2536-2401:00,board_id=0,board_base=0x00700000") dbloadrecords("../../db/ics110blrd.db","crate_id=0,board_name=2401- ICSADC:00,board_id=1,board_base=0x00D00000") dbloadrecords("../../db/ics110blarrayfifo.db","crate_id=0,board_name=2401bpm15-28:,board_id=1,board_base=0x00d00000,event_id=11") dbloadrecords("../../db/v820rd.db","crate_id=0,board_name=v820-2401:00,board_id=2,board_base=0xee000000") dbloadrecords("../../db/v820wr.db","crate_id=0,board_name=v820-2401:00,board_id=2,board_base=0xee000000") # init_sis1100(crate_id, path to device file) init_sis1100(0, "/dev/sis1100_2") # map_memory(crate_id, board_id, physical_base_address) map_memory(0, 0, 0x00700000) map_memory(0, 1, 0x00D00000) map_memory(0, 2, 0xEE000000) #init_110bl(crate_id, board_id, sampling_rate in Khz, set for internal(0) or external(1) clocking source,0 internal Acquire: 1 External Acquire) init_110bl(0, 1, 35.0, 0, 1) Orbit Corrector Power Supply Communications Protocol for SR1 Page 18 of 19

7.1.3.3 CR2403.CMD dbloaddatabase("../../dbd/example.dbd",0,0) registerrecorddevicedriver(pdbbase) dbloadrecords("../../db/vmivme-2536rd.db","crate_id=1,board_name=vmi2536-2403:00,board_id=0,board_base=0x00700000") dbloadrecords("../../db/vmivme-2536wr.db","crate_id=1,board_name=vmi2536-2403:00,board_id=0,board_base=0x00700000") dbloadrecords("../../db/ics110blrd.db","crate_id=1,board_name=icsadc-2403:00,board_id=1,board_base=0x00d00000") dbloadrecords("../../db/ics110blarrayfifo.db","crate_id=1,board_name=2403bpm1-14:,board_id=1,board_base=0x00d00000,event_id=110") dbloadrecords("../../db/ics110blrd.db","crate_id=1,board_name=icsadc-2403:01,board_id=2,board_base=0x000d0000") dbloadrecords("../../db/ics110blfifo.db","crate_id=1,board_name=icsadc- 2403:01,board_id=2,board_base=0x000D0000,oversample=32") dbloadrecords("../../db/v820rd.db","crate_id=1,board_name=v820-2403:00,board_id=3,board_base=0xee000000") dbloadrecords("../../db/v820wr.db","crate_id=1,board_name=v820-2403:00,board_id=3,board_base=0xee000000") # init_sis1100(crate_id, path to device file) init_sis1100(1, "/dev/sis1100_3") # map_memory(crate_id, board_id, physical_base_address) map_memory(1, 0, 0x00700000) map_memory(1, 1, 0x00D00000) map_memory(1, 2, 0x000D0000) map_memory(1, 3, 0xEE000000) #init_110bl(crate_id, board_id, sampling_rate in Khz, set for internal(0) or external(1) clocking source,0 internal Acquire: 1 External Acquire) init_110bl(1, 1,35.0, 0, 1) #configure this 110bl for external clocking source #init_110bl(crate_id, board_id, sampling_rate in Khz, set for internal(0) or external(1) clocking source,0 internal Acquire: 1 External Acquire) init_110bl(1, 2, 100.0, 1, 0) #make the call to iocinit(), this is only called once by the last cmd file in the command line argument iocinit() Orbit Corrector Power Supply Communications Protocol for SR1 Page 19 of 19