1 |
32 |
wfjm |
# $Id: util.tcl 690 2015-06-07 18:23:51Z mueller $
|
2 |
30 |
wfjm |
#
|
3 |
|
|
# Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
4 |
|
|
#
|
5 |
|
|
# This program is free software; you may redistribute and/or modify it under
|
6 |
|
|
# the terms of the GNU General Public License as published by the Free
|
7 |
|
|
# Software Foundation, either version 2, or at your option any later version.
|
8 |
|
|
#
|
9 |
|
|
# This program is distributed in the hope that it will be useful, but
|
10 |
|
|
# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
|
11 |
|
|
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
12 |
|
|
# for complete details.
|
13 |
|
|
#
|
14 |
|
|
# Revision History:
|
15 |
|
|
# Date Rev Version Comment
|
16 |
32 |
wfjm |
# 2015-06-06 690 1.0.1 rdump: all online units now shown by default
|
17 |
30 |
wfjm |
# 2015-03-21 659 1.0 Initial version
|
18 |
|
|
#
|
19 |
|
|
|
20 |
|
|
package provide ibd_rhrp 1.0
|
21 |
|
|
|
22 |
|
|
package require rlink
|
23 |
|
|
package require rw11
|
24 |
|
|
|
25 |
|
|
namespace eval ibd_rhrp {
|
26 |
|
|
#
|
27 |
|
|
# setup register descriptions for ibd_rhrp ---------------------------------
|
28 |
|
|
#
|
29 |
|
|
regdsc CS1 {sc 15} {tre 14} {dva 11} {bae 9 2} \
|
30 |
|
|
{rdy 7} {ie 6} {func 5 5} {go 0}
|
31 |
|
|
variable FUNC_NOOP [bvi b5 "00000"]
|
32 |
|
|
variable FUNC_UNL [bvi b5 "00001"]
|
33 |
|
|
variable FUNC_SEEK [bvi b5 "00010"]
|
34 |
|
|
variable FUNC_RECAL [bvi b5 "00011"]
|
35 |
|
|
variable FUNC_DCLR [bvi b5 "00100"]
|
36 |
|
|
variable FUNC_PORE [bvi b5 "00101"]
|
37 |
|
|
variable FUNC_OFFS [bvi b5 "00110"]
|
38 |
|
|
variable FUNC_RETC [bvi b5 "00111"]
|
39 |
|
|
variable FUNC_PRES [bvi b5 "01000"]
|
40 |
|
|
variable FUNC_PACK [bvi b5 "01001"]
|
41 |
|
|
variable FUNC_SEAR [bvi b5 "01100"]
|
42 |
|
|
variable FUNC_WCD [bvi b5 "10100"]
|
43 |
|
|
variable FUNC_WCHD [bvi b5 "10101"]
|
44 |
|
|
variable FUNC_WRITE [bvi b5 "11000"]
|
45 |
|
|
variable FUNC_WHD [bvi b5 "11001"]
|
46 |
|
|
variable FUNC_READ [bvi b5 "11100"]
|
47 |
|
|
variable FUNC_RHD [bvi b5 "11101"]
|
48 |
|
|
|
49 |
|
|
regdsc RCS1 {val 15 8} {func 5 5} {go 0}
|
50 |
|
|
variable RFUNC_WUNIT [bvi b5 "00001"]
|
51 |
|
|
variable RFUNC_CUNIT [bvi b5 "00010"]
|
52 |
|
|
variable RFUNC_DONE [bvi b5 "00011"]
|
53 |
|
|
variable RFUNC_WIDLY [bvi b5 "00100"]
|
54 |
|
|
|
55 |
|
|
regdsc DA {ta 12 5 2d} {sa 5 6 2d}
|
56 |
|
|
regdsc CS2 {wce 14} {ned 12} {nem 11} {pge 10} {or 7} {ir 6} \
|
57 |
|
|
{clr 5} {pat 4} {bai 3} {unit 2 3 d}
|
58 |
32 |
wfjm |
regdsc DS {ata 15} {erp 14} {pip 13} {mol 12} {wrl 11} {lbt 10} {dpr 8} \
|
59 |
|
|
{dry 7} {vv 6} {om 0}
|
60 |
30 |
wfjm |
regdsc ER1 {uns 14} {iae 10} {aoe 9} {rmr 2} {ilf 0}
|
61 |
|
|
regdsc AS {u3 3} {u2 2} {u1 1} {u0 0}
|
62 |
|
|
regdsc LA {sc 11 6 2d}
|
63 |
|
|
regdsc OF {fmt 12} {eci 11} {hci 10} {odi 7} {off 6 7}
|
64 |
|
|
|
65 |
|
|
variable DTE_RP04 [bvi b3 "000"]
|
66 |
|
|
variable DTE_RP06 [bvi b3 "001"]
|
67 |
|
|
variable DTE_RM04 [bvi b3 "100"]
|
68 |
|
|
variable DTE_RM80 [bvi b3 "101"]
|
69 |
|
|
variable DTE_RM05 [bvi b3 "110"]
|
70 |
|
|
variable DTE_RP07 [bvi b3 "111"]
|
71 |
|
|
|
72 |
|
|
variable DT_RP04 020020
|
73 |
|
|
variable DT_RP06 020022
|
74 |
|
|
variable DT_RM04 020024
|
75 |
|
|
variable DT_RM80 020026
|
76 |
|
|
variable DT_RM05 020027
|
77 |
|
|
variable DT_RP07 020042
|
78 |
|
|
|
79 |
|
|
regdsc SN {d3 15 4 d} {d2 11 4 d} {d1 7 4 d} {d0 3 4 d}
|
80 |
|
|
regdsc OF {odi 7}
|
81 |
|
|
regdsc DC {dc 9 10 d}
|
82 |
|
|
|
83 |
|
|
regdsc CS3 {ie 6}
|
84 |
|
|
|
85 |
|
|
variable ANUM 6
|
86 |
|
|
|
87 |
|
|
#
|
88 |
|
|
# setup: create controller with default attributes -------------------------
|
89 |
|
|
#
|
90 |
|
|
proc setup {{cpu "cpu0"}} {
|
91 |
|
|
return [rw11::setup_cntl $cpu "rhrp" "rpa"]
|
92 |
|
|
}
|
93 |
|
|
|
94 |
|
|
#
|
95 |
|
|
# rcs1_wunit: value for rem CS1 WUNIT function -----------------------------
|
96 |
|
|
#
|
97 |
|
|
proc rcs1_wunit {unit} {
|
98 |
|
|
return [regbld ibd_rhrp::RCS1 [list val $unit] \
|
99 |
|
|
[list func $ibd_rhrp::RFUNC_WUNIT] ]
|
100 |
|
|
}
|
101 |
|
|
|
102 |
|
|
#
|
103 |
|
|
# cs1_func: value for loc CS1 function start -------------------------------
|
104 |
|
|
#
|
105 |
|
|
proc cs1_func {func {ie 0} {bae 0}} {
|
106 |
|
|
return [regbld ibd_rhrp::CS1 [list bae $bae] [list ie $ie] \
|
107 |
|
|
[list func $func] {go 1}]
|
108 |
|
|
}
|
109 |
|
|
|
110 |
|
|
#
|
111 |
|
|
# rdump: register dump - rem view ------------------------------------------
|
112 |
|
|
#
|
113 |
32 |
wfjm |
proc rdump {{cpu "cpu0"} {unit -1}} {
|
114 |
30 |
wfjm |
set rval {}
|
115 |
|
|
$cpu cp -ribr "rpa.cs1" cs1 \
|
116 |
|
|
-ribr "rpa.wc" wc \
|
117 |
|
|
-ribr "rpa.ba" ba \
|
118 |
|
|
-ribr "rpa.cs2" cs2 \
|
119 |
|
|
-ribr "rpa.bae" bae \
|
120 |
|
|
-ribr "rpa.cs3" cs3
|
121 |
|
|
|
122 |
|
|
if {$wc} {
|
123 |
|
|
set fwc [format "%d" [expr {64 * 1024 - $wc}]]
|
124 |
|
|
} else {
|
125 |
|
|
set fwc "(0)"
|
126 |
|
|
}
|
127 |
|
|
|
128 |
|
|
append rval "Controller registers:"
|
129 |
|
|
append rval [format "\n cs1: %6.6o %s" $cs1 [regtxt ibd_rhrp::CS1 $cs1]]
|
130 |
|
|
append rval [format "\n cs2: %6.6o %s" $cs2 [regtxt ibd_rhrp::CS2 $cs2]]
|
131 |
|
|
append rval [format "\n cs3: %6.6o %s" $cs3 [regtxt ibd_rhrp::CS3 $cs3]]
|
132 |
|
|
append rval [format "\n wc: %6.6o nw=%s" $wc $fwc]
|
133 |
|
|
append rval [format "\n ba: %6.6o" $ba]
|
134 |
|
|
append rval [format "\n bae: %6.6o ea=%8.8o" $bae [expr {($bae<<16)|$ba}] ]
|
135 |
|
|
|
136 |
32 |
wfjm |
$cpu cp -wibr "rpa.cs1" [rcs1_wunit 0] \
|
137 |
|
|
-ribr "rpa.ds" ds0 \
|
138 |
|
|
-wibr "rpa.cs1" [rcs1_wunit 1] \
|
139 |
|
|
-ribr "rpa.ds" ds1 \
|
140 |
|
|
-wibr "rpa.cs1" [rcs1_wunit 2] \
|
141 |
|
|
-ribr "rpa.ds" ds2 \
|
142 |
|
|
-wibr "rpa.cs1" [rcs1_wunit 3] \
|
143 |
|
|
-ribr "rpa.ds" ds3
|
144 |
30 |
wfjm |
|
145 |
32 |
wfjm |
set dslist [list $ds0 $ds1 $ds2 $ds3]
|
146 |
|
|
|
147 |
|
|
set ulist [expr {$unit & 0x03} ]
|
148 |
|
|
if {$unit < 0} { set ulist {0 1 2 3} }
|
149 |
|
|
|
150 |
|
|
foreach u $ulist {
|
151 |
|
|
set ds [lindex $dslist $u]
|
152 |
|
|
if {$u == $unit || [regget ibd_rhrp::DS(mol) $ds] } {
|
153 |
|
|
$cpu cp -wibr "rpa.cs1" [rcs1_wunit $u] \
|
154 |
|
|
-ribr "rpa.da" da \
|
155 |
|
|
-ribr "rpa.er1" er1 \
|
156 |
|
|
-ribr "rpa.as" as \
|
157 |
|
|
-ribr "rpa.la" la \
|
158 |
|
|
-ribr "rpa.mr1" mr1 \
|
159 |
|
|
-ribr "rpa.dt" dt \
|
160 |
|
|
-ribr "rpa.sn" sn \
|
161 |
|
|
-ribr "rpa.of" of \
|
162 |
|
|
-ribr "rpa.dc" dc
|
163 |
|
|
|
164 |
|
|
append rval "\nUnit $u registers:"
|
165 |
30 |
wfjm |
append rval [format "\n da: %6.6o %s" $da [regtxt ibd_rhrp::DA $da ]]
|
166 |
|
|
append rval [format "\n ds: %6.6o %s" $ds [regtxt ibd_rhrp::DS $ds ]]
|
167 |
|
|
append rval [format "\n er1: %6.6o %s" $er1 [regtxt ibd_rhrp::ER1 $er1]]
|
168 |
|
|
append rval [format "\n as: %6.6o as:%s" $as [pbvi b4 $as]]
|
169 |
|
|
append rval [format "\n la: %6.6o %s" $la [regtxt ibd_rhrp::LA $la ]]
|
170 |
|
|
append rval [format "\n mr1: %6.6o " $mr1 ]
|
171 |
|
|
append rval [format "\n dt: %6.6o " $dt ]
|
172 |
|
|
set snd3 [regget ibd_rhrp::SN(d3) $sn]
|
173 |
|
|
set snd2 [regget ibd_rhrp::SN(d2) $sn]
|
174 |
|
|
set snd1 [regget ibd_rhrp::SN(d1) $sn]
|
175 |
|
|
set snd0 [regget ibd_rhrp::SN(d0) $sn]
|
176 |
|
|
set sntxt [format "%d%d%d%d" $snd3 $snd2 $snd1 $snd0]
|
177 |
|
|
append rval [format "\n sn: %6.6o sn=%s" $sn $sntxt]
|
178 |
|
|
append rval [format "\n of: %6.6o %s" $of [regtxt ibd_rhrp::OF $of ]]
|
179 |
|
|
append rval [format "\n dc: %6.6o dc:%s" $dc [format "%3d" $dc]]
|
180 |
|
|
|
181 |
32 |
wfjm |
} else {
|
182 |
|
|
append rval [format "\nUnit $u offline or disabled: mol:%d dpr:%s" \
|
183 |
|
|
[regget ibd_rhrp::DS(mol) $ds] \
|
184 |
|
|
[regget ibd_rhrp::DS(dpr) $ds] ]
|
185 |
|
|
}
|
186 |
|
|
}
|
187 |
|
|
|
188 |
30 |
wfjm |
return $rval
|
189 |
|
|
}
|
190 |
|
|
}
|