Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
X
xxx-R6-1
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
synApps_6_1_Working
xxx-R6-1
Commits
0a8fef39
Commit
0a8fef39
authored
10 years ago
by
mooney
Browse files
Options
Downloads
Patches
Plain Diff
No commit message
No commit message
parent
c7f4590b
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
iocBoot/iocLinux/softGlue.cmd
+204
-0
204 additions, 0 deletions
iocBoot/iocLinux/softGlue.cmd
with
204 additions
and
0 deletions
iocBoot/iocLinux/softGlue.cmd
0 → 100644
+
204
−
0
View file @
0a8fef39
#
BEGIN
softGlue
.cmd
----------------------------------------------------------
#
This
must
run
after
industryPack
.cmd
#devAsynSoftGlueDebug
=
1
#drvIP_EP201Debug
=
1
################################################################################
#
Initialize
the
FPGA
#
-----------------------
#
Write
content
to
the
FPGA
.
This
command
will
fail
if
the
FPGA
already
#
has
content
loaded
,
as
it
will
after
a
soft
reboot
.
To
load
new
FPGA
#
content
,
you
must
power
cycle
the
ioc
.
#
#
initIP_EP200_FPGA
(
ushort
carrier
,
ushort
slot
,
char
*
filename
)
#
carrier
:
IP
-carrier
number
(
numbering
begins
at
0
)
#
slot
:
IP
-slot
number
(
numbering
begins
at
0
)
#
filename
:
Name
of
the
FPGA
-content
hex
file
to
load
into
the
FPGA
.
#
#
standard
softGlue
2
.2
#initIP_EP200_FPGA
(
0
,
2
,
"$(SOFTGLUE)/softGlueApp/Db/SoftGlue_2_2.hex"
)
#
standard
softGlue
2
.2
plus
two
shift
registers
#initIP_EP200_FPGA
(
0
,
2
,
"$(SOFTGLUE)/softGlueApp/Db/SoftGlue_2_2_Octupole_0_0.hex"
)
#
standard
softGlue
2
.2
plus
two
up
/down
counters
#initIP_EP200_FPGA
(
0
,
2
,
"$(SOFTGLUE)/softGlueApp/Db/SoftGlue_2_2_1ID_Vgate_0_1.hex"
)
#
standard
softGlue
2
.2
plus
two
up
/down
counters
plus
two
quadrature
decoders
initIP_EP200_FPGA
(
0
,
2
,
"$(SOFTGLUE)/softGlueApp/Db/SoftGlue_2_2_Encoder.hex"
)
################################################################################
#
Initialize
basic
field
I
/O
#
------------------------------
#
int
initIP_EP200
(
ushort
carrier
,
ushort
slot
,
char
*
portName1
,
#
char
*
portName2
,
char
*
portName3
,
int
sopcBase
)
#
carrier
:
IP
-carrier
number
(
numbering
begins
at
0
)
#
slot
:
IP
-slot
number
(
numbering
begins
at
0
)
#
portName1
:
Name
of
asyn
port
for
component
at
sopcBase
#
portName2
:
Name
of
asyn
port
for
component
at
sopcBase
+
0x10
#
portName3
:
Name
of
asyn
port
for
component
at
sopcBase
+
0x20
#
sopcBase
:
must
agree
with
FPGA
content
(
0x800000
)
initIP_EP200
(
0
,
2
,
"SGIO_1"
,
"SGIO_2"
,
"SGIO_3"
,
0x800000
)
################################################################################
#
Initialize
field
-I/O
interrupt
support
#
------------------------------------------
#
int
initIP_EP200_Int
(
ushort
carrier
,
ushort
slot
,
int
intVectorBase
,
#
int
risingMaskMS
,
int
risingMaskLS
,
int
fallingMaskMS
,
#
int
fallingMaskLS
)
#
carrier
:
IP
-carrier
number
(
numbering
begins
at
0
)
#
slot
:
IP
-slot
number
(
numbering
begins
at
0
)
#
intVectorBase
:
must
agree
with
the
FPGA
content
loaded
(
0x90
for
softGlue
#
2
.1
and
higher
;
0x80
for
softGlue
2
.0
and
lower
)
.
softGlue
#
uses
three
vectors
,
for
example
,
0x90
,
0x91
,
0x92
.
#
risingMaskMS
:
interrupt
on
0
->
1
for
I
/O
pins
33
-
48
#
risingMaskLS
:
interrupt
on
0
->
1
for
I
/O
pins
1
-
32
#
fallingMaskMS
:
interrupt
on
1
->
0
for
I
/O
pins
33
-
48
#
fallingMaskLS
:
interrupt
on
1
->
0
for
I
/O
pins
1
-
32
initIP_EP200_Int
(
0
,
2
,
0x90
,
0x0
,
0x0
,
0x0
,
0x0
)
################################################################################
#
Set
field
-I/O
data
direction
#
--------------------------------
#
int
initIP_EP200_IO
(
ushort
carrier
,
ushort
slot
,
ushort
moduleType
,
#
ushort
dataDir
)
#
carrier
:
IP
-carrier
number
(
numbering
begins
at
0
)
#
slot
:
IP
-slot
number
(
numbering
begins
at
0
)
#
moduleType
:
one
of
[
201
,
202
,
203
,
204
]
#
dataDir
:
Bit
mask
,
in
which
only
the
first
9
bits
are
significant
.
The
#
meaning
of
each
bit
depends
on
moduleType
,
as
shown
in
the
#
table
below
.
If
a
bit
is
set
,
the
corresponding
field
I
/O
pins
#
are
outputs
.
Note
that
for
the
202
and
204
modules
,
all
I
/O
#
is
differential
,
and
I
/O
pin
N
is
paired
with
pin
N
+
1
.
For
the
#
203
module
,
pins
25
/26
through
47
/48
are
differential
pairs
.
#
#
-------------------------------------------------------------------
#
|
Correspondence
between
dataDir
bits
(
0
-
8
)
and
I
/O
pins
(
1
-
48
)
|
#
-------------------------------------------------------------------
#
|
|
201
|
202
/204
|
203
|
#
-------------------------------------------------------------------
#
|
bit
0
|
pins
1
-
8
|
pins
1
,
3
,
25
,
27
|
pins
25
,
27
|
#
|
bit
1
|
pins
9
-
16
|
pins
5
,
7
,
29
,
31
|
pins
29
,
31
|
#
|
bit
2
|
pins
17
-
24
|
pins
9
,
11
,
33
,
35
|
pins
33
,
35
|
#
|
bit
3
|
pins
25
-
32
|
pins
13
,
15
,
37
,
39
|
pins
37
,
39
|
#
|
|
|
|
|
#
|
bit
4
|
pins
33
-
40
|
pins
17
,
19
,
41
,
43
|
pins
41
,
43
|
#
|
bit
5
|
pins
41
-
48
|
pins
21
,
23
,
45
,
47
|
pins
45
,
47
|
#
|
bit
6
|
x
|
x
|
pins
1
-
8
|
#
|
bit
7
|
x
|
x
|
pins
9
-
16
|
#
|
|
|
|
|
#
|
bit
8
|
x
|
x
|
pins
17
-
24
|
#
-------------------------------------------------------------------
#
Examples
:
#
1
.
For
the
IP
-EP
201
,
moduleType
is
201
,
and
dataDir
==
0x3c
would
mean
#
that
I
/O
bits
17
-
48
are
outputs
.
#
2
.
For
the
IP
-EP
202
(
IP
-EP
204
),
moduleType
is
202
(
204
),
and
dataDir
==
0x13
#
would
mean
that
I
/O
bits
1
,
3
,
25
,
27
,
5
,
7
,
29
,
31
,
17
,
19
,
41
,
43
are
outputs
.
#
3
.
For
the
IP
-EP
203
,
moduleType
is
203
,
and
dataDir
==
0
x
???
would
mean
#
that
I
/O
bits
1
-
8
,
25
,
27
,
29
,
31
,
33
,
35
,
45
,
47
are
outputs
.
#initIP_EP200_IO
(
0
,
2
,
201
,
0x3c
)
initIP_EP200_IO
(
0
,
2
,
201
,
0xc
)
#initIP_EP200_IO
(
0
,
2
,
202
,
0x13
)
#
-------------------------------------------------------------------------------
#
For
backward
compatibility
with
softGlue
2
.1
and
earlier
,
the
following
#
command
can
be
used
to
initialize
an
IP_EP201
module
,
instead
of
the
#
above
calls
to
initIP_EP200
(),
initIP_EP200_Int
(),
and
initIP_EP200_IO
()
.
#
This
won
't work for any other IP_EP200 module
#
# int initIP_EP201(char *portName, ushort carrier, ushort slot,
# int msecPoll, int dataDir, int sopcOffset, int interruptVector,
# int risingMask, int fallingMask)
# portName: Name of asyn port for component at sopcOffset
# carrier: IP-carrier number (numbering begins at 0)
# slot: IP-slot number (numbering begins at 0)
# msecPoll: Time interval between driver polls of field I/O bits
# dataDir: Data direction for I/O bits, explained below.
# sopcOffset: SOPC offset (must be as in example below).
# interruptVector: Must agree with the FPGA content loaded (0x90, 0x91,
# 0x92 for softGlue 2.1 and higher; 0x80, 0x81, 0x82 for
# softGlue 2.0 and lower).
# risingMask: 16-bit mask: if a bit is 1, the corresponding I/O bit will
# generate an interrupt when its value goes from 0 to 1.
# Bit 0 corresponds to field I/O pin 1, bit 1 to pin 2, etc.
# fallingMask: Similar to risingMask, but for 1-to-0 transitions.
#
# Note that the user can overwrite risingMask and
# fallingMask at run time, with menu selections, and
# probably has those selections autosaved.
# dataDir is a bit mask in which only bits 0 and 8 are significant.
# for sopcOffset 0x800000
# If bit 0 of dataDir is set, I/O bits 1-8 are outputs.
# If bit 8 of dataDir is set, I/O bits 9-16 are outputs.
# for sopcOffset 0x800010
# If bit 0 of dataDir is set, I/O bits 17-24 are outputs.
# If bit 8 of dataDir is set, I/O bits 25-32 are outputs.
# for sopcOffset 0x800020
# If bit 0 of dataDir is set, I/O bits 33-40 are outputs.
# If bit 8 of dataDir is set, I/O bits 41-48 are outputs.
#
!
initIP_EP201("SGIO_1",0,2,1000000,0x101,0x800000,0x90,0x00,0x00)
#
!
initIP_EP201("SGIO_2",0,2,1000000,0x101,0x800010,0x91,0x00,0x00)
#
!
initIP_EP201("SGIO_3",0,2,1000000,0x101,0x800020,0x92,0x00,0x00)
################################################################################
# Initialize softGlue signal-name support
#-------------------------------------------
# All instances of a single-register component are initialized with a single
# call, as follows:
#
#initIP_EP201SingleRegisterPort(char *portName, ushort carrier, ushort slot)
#
# For example:
# initIP_EP201SingleRegisterPort("SOFTGLUE", 0, 2)
initIP_EP201SingleRegisterPort("SOFTGLUE", 0, 2)
################################################################################
# Load databases
#------------------
# Load a single database that all database fragments supporting
# single-register components can use to show which signals are connected
# together. This database is not needed for the functioning of the
# components, it'
s
purely
for
the
user
interface
.
dbLoadRecords
(
"$(SOFTGLUE)/db/softGlue_SignalShow.db"
,
"P=xxx:,H=softGlue:,PORT=SOFTGLUE,READEVENT=10"
)
#
Load
a
set
of
database
fragments
for
each
single
-register
component
.
#
This
database
contains
the
records
for
standard
softGlue
,
and
must
be
loaded
#
for
all
.hex
files
above
dbLoadRecords
(
"$(SOFTGLUE)/db/softGlue_FPGAContent.db"
,
"P=xxx:,H=softGlue:,PORT=SOFTGLUE,READEVENT=10"
)
#
This
database
contains
the
additional
records
needed
for
#
SoftGlue_2_2_Octupole_0_0
.hex
#
!
dbLoadRecords
(
"$(SOFTGLUE)/db/softGlue_FPGAContent_octupole.db"
,
"P=xxx:,H=softGlue:,PORT=SOFTGLUE,READEVENT=10"
)
#
This
database
contains
the
additional
records
needed
for
#
SoftGlue_2_2_1ID_Vgate_0_1
.hex
#dbLoadRecords
(
"$(SOFTGLUE)/db/softGlue_FPGAContent_s1ID_Vgate.db"
,
"P=xxx:,H=softGlue:,PORT=SOFTGLUE,READEVENT=10"
)
#
This
database
contains
the
additional
records
needed
for
#
SoftGlue_2_2_Encoder
.hex
dbLoadRecords
(
"$(SOFTGLUE)/db/softGlue_FPGAContent_Encoder.db"
,
"P=xxx:,H=softGlue:,PORT=SOFTGLUE,READEVENT=10"
)
#
Interrupt
support
.
#
(
'putenv'
is
used
to
fit
the
command
into
the
vxWorks
command
line
space
.
)
putenv
"SFDB=$(SOFTGLUE)/db/softGlue_FPGAInt.db"
dbLoadRecords
(
"$(SFDB)"
,
"P=xxx:,H=softGlue:,PORT1=SGIO_1,PORT2=SGIO_2,PORT3=SGIO_3,FIFO=10"
)
taskDelay
(
50
)
#
Some
stuff
just
for
convenience
:
software
clock
and
pulse
generators
,
and
#
a
couple
of
busy
records
.
dbLoadRecords
(
"$(SOFTGLUE)/db/softGlue_convenience.db"
,
"P=xxx:,H=softGlue:"
)
#
configMenu
Menu
of
softGlue
circuits
dbLoadRecords
(
"$(AUTOSAVE)/asApp/Db/configMenu.db"
,
"P=xxx:,CONFIG=SG"
)
#
Note
that
the
request
file
MUST
be
named
$
(
CONFIG
)
Menu
.req.
If
the
macro
#
CONFIGMENU
is
defined
with
any
value
,
backup
(
".savB"
)
and
sequence
files
#
(
".savN"
)
will
not
be
written
.
We
don
't want these for configMenu.
doAfterIocInit("create_manual_set('
SGMenu
.req
','
P
=
xxx
:
,
CONFIG
=
SG
,
H
=
softGlue
:
,
CONFIGMENU
=
1
')")
# Register included example of a custom softGlue interrupt-service routine.
# This is for interrupts that occur too closely spaced in time for softGlue'
s
#
normal
interrupt
service
(
an
output
link
to
an
EPICS
record
)
to
handle
.
#sampleCustomInterruptPrepare
(
0
,
2
,
0x800010
,
0x1
)
#
END
softGlue
.cmd
------------------------------------------------------------
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment