Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
PyPCC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
LOFAR2.0
PyPCC
Commits
2ea1cd46
Commit
2ea1cd46
authored
4 years ago
by
Paulus Kruger
Browse files
Options
Downloads
Patches
Plain Diff
APSCTTR points added
parent
b2f0785e
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
config/APSCTTR.yaml
+143
-38
143 additions, 38 deletions
config/APSCTTR.yaml
i2cserv/i2c_dev.py
+16
-7
16 additions, 7 deletions
i2cserv/i2c_dev.py
yamlconfig.py
+4
-2
4 additions, 2 deletions
yamlconfig.py
with
163 additions
and
47 deletions
config/APSCTTR.yaml
+
143
−
38
View file @
2ea1cd46
...
...
@@ -8,7 +8,7 @@ drivers:
-
name
:
I2C_CLK
type
:
i2c_dev
#I2C devices
parent
:
I2C
status
:
CLK
_I2C_error
status
:
APSCT
_I2C_error
-
name
:
SPIbb1
type
:
spibitbang2
#SPI bitbang via GPIO expander: CLK, SDI,SDO,CS
parent
:
I2C_CLK
...
...
@@ -17,19 +17,28 @@ drivers:
#This is the I2C devices in the RCU
device_registers
:
-
name
:
IO1
description
:
IO-Expander
address
:
0x20
-
name
:
IO
dim
:
2
description
:
IO-Expander (TCA6416APWR)
address
:
[
0x20
,
0x21
]
driver
:
I2C_CLK
registers
:
-
name
:
CONF1
description
:
Direction of port1
address
:
6
store
:
True
-
name
:
CONF2
description
:
Direction of port2
address
:
7
store
:
True
-
name
:
GPIO1
description
:
Input/Ouput port
1
address
:
[
0
,
2
]
#Read / Write address different
store
:
True
-
name
:
GPIO2
description
:
Input/Ouput port
2
address
:
[
1
,
3
]
#Read / Write address different
store
:
True
-
name
:
PLL
driver
:
SPIbb1
...
...
@@ -42,8 +51,9 @@ device_registers:
-
{
name
:
r6
,
address
:
0x06
}
-
name
:
ROM
description
:
24AA02UIDT
address
:
0x50
driver
:
I2C_
PU
driver
:
I2C_
CLK
registers
:
-
name
:
ID
description
:
Random
...
...
@@ -52,6 +62,37 @@ device_registers:
description
:
Set in production
address
:
0
-
name
:
VSENSE
description
:
Monitor ADC
address
:
0x74
device
:
LTC2495
driver
:
I2C_CLK
registers
:
-
name
:
V_0
address
:
0xB080
wait
:
250
-
name
:
V_1
address
:
0xB880
wait
:
250
-
name
:
V_2
address
:
0xB180
wait
:
250
-
name
:
V_3
address
:
0xB980
wait
:
250
-
name
:
V_4
address
:
0xB280
wait
:
250
-
name
:
V_5
address
:
0xBA80
wait
:
250
-
name
:
V_6
address
:
0xB380
wait
:
250
-
name
:
Temp
address
:
0xA0C0
wait
:
250
variables
:
-
name
:
APSCT_I2C_error
...
...
@@ -83,37 +124,63 @@ variables:
dtype
:
string
-
name
:
CLK
_PWR_on
description
:
CLK power status. True=ON. Controlled by
CLK
_ON and
CLK
_OFF
-
name
:
[
APSCT_PLL_200MHz_PWR_on
,
APSCT_PLL_160MHz
_PWR_on
]
description
:
CLK power status. True=ON. Controlled by
APSCT
_ON and
APSCT
_OFF
rw
:
ro
dtype
:
boolean
driver
:
I2C_CLK
devreg
:
IO1.GPIO1
devreg
:
[
IO1.GPIO1
,
IO2.GPIO1
]
bitoffset
:
1
width
:
1
-
name
:
APSCT_PWR_on
description
:
CLK power status. True=ON. Controlled by APSCT_ON and APSCT_OFF
rw
:
ro
dtype
:
boolean
driver
:
I2C_CLK
devreg
:
IO1.GPIO2
bitoffset
:
3
width
:
1
-
name
:
APSCT_ignore_PPS
rw
:
rw
dtype
:
boolean
driver
:
I2C_CLK
devreg
:
IO1.GPIO2
bitoffset
:
2
width
:
1
-
name
:
[
APSCT_MON_10MHz_good
,
APSCT_MON_PPS_good
]
rw
:
ro
dtype
:
boolean
driver
:
I2C_CLK
devreg
:
IO2.GPIO2
bitoffset
:
[
0
,
1
]
width
:
1
monitor
:
true
-
name
:
CLK_PLL
_locked
-
name
:
[
APSCT_PLL_200MHz_locked
,
APSCT_PLL_160MHz
_locked
]
description
:
First status pin give lock status
rw
:
ro
dtype
:
boolean
monitor
:
true
driver
:
I2C_CLK
devreg
:
IO1.GPIO1
devreg
:
[
IO1.GPIO1
,
IO2.GPIO1
]
bitoffset
:
2
width
:
1
-
name
:
CLK_PLL
_error
-
name
:
[
APSCT_PLL_200MHz_error
,
APSCT_PLL_160MHz
_error
]
description
:
Second status pin give error
rw
:
ro
dtype
:
boolean
monitor
:
true
driver
:
I2C_CLK
devreg
:
IO1.GPIO1
devreg
:
[
IO1.GPIO1
,
IO2.GPIO1
]
bitoffset
:
3
width
:
1
-
name
:
CLK_PLL
_locked_SPI
-
name
:
APSCT_PLL_200MHz
_locked_SPI
description
:
0x81=locked
driver
:
I2C_CLK
devreg
:
PLL.PLL_stat
...
...
@@ -122,7 +189,7 @@ variables:
dtype
:
uint8
debug
:
True
-
name
:
[
CLK
_PLL_r3
,
CLK
_PLL_r5
,
CLK
_PLL_r6
]
-
name
:
[
APSCT
_PLL_r3
,
APSCT
_PLL_r5
,
APSCT
_PLL_r6
]
driver
:
I2C_CLK
devreg
:
[
PLL.r3
,
PLL.r5
,
PLL.r6
]
width
:
8
...
...
@@ -130,54 +197,92 @@ variables:
dtype
:
uint8
debug
:
True
-
name
:
RCU_IO1_GPIO1
-
name
:
[
APSCT_IO1_GPIO1
,
APSCT_IO1_GPIO2
,
APSCT_IO2_GPIO1
,
APSCT_IO2_GPIO2
]
driver
:
I2C_CLK
devreg
:
[
IO1.GPIO1
,
IO1.GPIO2
,
IO2.GPIO1
,
IO2.GPIO2
]
width
:
8
rw
:
ro
dtype
:
uint8
debug
:
True
-
name
:
APSCT_IO2_GPIO1
driver
:
I2C_CLK
devreg
:
IO
1
.GPIO1
devreg
:
IO
2
.GPIO1
width
:
8
rw
:
ro
dtype
:
uint8
mask
:
RCU_mask
debug
:
True
-
name
:
APSCT_temperature
description
:
Temperature sensor on RCU
driver
:
I2C_CLK
devreg
:
VSENSE.Temp
width
:
23
scale
:
3.8265e-3
rw
:
ro
dtype
:
double
monitor
:
true
-
name
:
[
APSCT_3V3_INPUT
,
APSCT_3V3_PLL_160MHz
,
APSCT_3V3_PLL_200MHz
,
APSCT_3V3_CLKDIST_A
,
APSCT_3V3_CLKDIST_B
,
APSCT_3V3_PPSDIST
,
APSCT_3V3_CTRL
]
driver
:
I2C_CLK
devreg
:
[
VSENSE.V_0
,
VSENSE.V_1
,
VSENSE.V_2
,
VSENSE.V_3
,
VSENSE.V_4
,
VSENSE.V_5
,
VSENSE.V_6
]
width
:
23
scale
:
1.12165e-6
rw
:
ro
dtype
:
double
monitor
:
true
methods
:
-
name
:
APSCTTR_Init
#Called after startup to load. Should have all stored registers
driver
:
I2C_CLK
debug
:
True
instructions
:
-
APSCT_I2C_error
:
0
-
RCU_IO1_GPIO1
:
Update
-
IO1.CONF1
:
Update
-
CLK_PWR_on
:
Update
-
CLK_PLL_locked
:
Update
-
CLK_PLL_error
:
Update
-
APSCT_ID
:
Update
-
APSCT_version
:
Update
-
APSCT_IO1_GPIO1
:
Update
-
APSCT_IO1_GPIO2
:
Update
-
APSCT_IO2_GPIO1
:
Update
-
APSCT_IO2_GPIO2
:
Update
-
IO1.CONF1
:
Update
-
IO1.CONF2
:
Update
-
IO2.CONF1
:
Update
-
IO2.CONF2
:
Update
-
APSCT_PWR_on
:
Update
-
APSCT_PLL_200MHz_PWR_on
:
Update
-
APSCT_PLL_200MHz_locked
:
Update
-
APSCT_PLL_200MHz_error
:
Update
-
APSCT_PLL_160MHz_PWR_on
:
Update
-
APSCT_PLL_160MHz_locked
:
Update
-
APSCT_PLL_160MHz_error
:
Update
-
APSCT_ignore_PPS
:
Update
-
name
:
CLK
_on
-
name
:
APSCT
_on
driver
:
I2C_CLK
description
:
Configure clock. Monitored using
CLK
_PWR_on,
CLK
_PLL_error and
CLK
_PLL_locked
description
:
Configure clock. Monitored using
APSCT
_PWR_on,
APSCT
_PLL_error and
APSCT
_PLL_locked
instructions
:
-
APSCT_I2C_error
:
0
-
IO1.CONF1
:
0x2C
#0010 1100 PPS/PWR output, SCLK,CS,SDI
-
IO1.GPIO1
:
0x42
#0100 0010 high:PWR enable, CS
-
CLK
_PWR_on
:
Update
-
WAIT
:
200
#ms to wait before checking lock
-
CLK
_PLL_setup
:
0
-
WAIT
:
100
#ms to wait before checking lock
-
CLK
_PLL_locked
:
Update
#
- IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI
#
- IO1.GPIO1: 0x42 #0100 0010 high:PWR enable, CS
#
-
APSCT
_PWR_on: Update
#
- WAIT: 200 #ms to wait before checking lock
#
-
APSCT
_PLL_setup: 0
#
- WAIT: 100 #ms to wait before checking lock
#
-
APSCT
_PLL_locked: Update
-
name
:
CLK
_off
-
name
:
APSCT
_off
driver
:
I2C_CLK
description
:
Switch clock off. Monitored using
CLK
_PWR_on
description
:
Switch clock off. Monitored using
APSCT
_PWR_on
instructions
:
-
APSCT_I2C_error
:
0
-
IO1.CONF1
:
0x2C
#0010 1100 PPS/PWR output, SCLK,CS,SDI
-
IO1.GPIO1
:
0x00
#all low
-
CLK
_PWR_on
:
Update
-
CLK
_PLL_locked
:
Update
#
- IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI
#
- IO1.GPIO1: 0x00 #all low
#
-
APSCT
_PWR_on: Update
#
-
APSCT
_PLL_locked: Update
-
name
:
CLK
_PLL_setup
-
name
:
APSCT
_PLL_setup
driver
:
I2C_CLK
debug
:
true
instructions
:
...
...
This diff is collapsed.
Click to expand it.
i2cserv/i2c_dev.py
+
16
−
7
View file @
2ea1cd46
...
...
@@ -95,6 +95,7 @@ class i2c_dev(hwdev):
self
.
I2Cmask
=
[
0
]
self
.
I2Cmaskid
=
config
.
get
(
'
maskid
'
,
None
)
if
self
.
I2Cmaskid
is
None
:
logging
.
warn
(
config
[
'
name
'
]
+
"
I2C mask not found!
"
)
self
.
I2Ccut
=
3
;
def
OPCUASetVariable
(
self
,
varid
,
var1
,
data
,
mask
):
logging
.
info
(
str
((
"
Set Var
"
,
var1
[
'
name
'
],
data
[:
32
],
mask
)))
...
...
@@ -159,7 +160,7 @@ class i2c_dev(hwdev):
return
;
for
Vari
in
range
(
Step
):
if
not
(
mask
[
Vari
]):
continue
if
not
(
self
.
I2Cmask
[
0
]
==
0
):
if
not
(
self
.
I2Cmask
[
0
]
<=
self
.
I2Ccut
):
mask
[
Vari
]
=
False
;
continue
;
i0
=
(
Vari
)
*
Step2
...
...
@@ -175,9 +176,10 @@ class i2c_dev(hwdev):
value2
=
value1
[
i0
:
i1
]
res
=
self
.
GetVarValue
(
devreg
,
width
,
bitoffset
,
value2
)
if
not
(
res
):
self
.
I2Cmask
[
0
]
=
1
;
mask
[
Vari
]
=
False
;
self
.
I2Cmask
[
0
]
+
=
1
;
if
self
.
I2Cmask
[
0
]
>
self
.
I2Ccut
:
mask
[
Vari
]
=
False
;
continue
;
self
.
I2Cmask
[
0
]
=
0
;
value1
[
i0
:
i1
]
=
value2
return
value1
,
mask
...
...
@@ -196,7 +198,7 @@ class i2c_dev(hwdev):
return
;
for
Vari
in
range
(
Step
):
if
not
(
mask
[
Vari
]):
continue
if
not
(
self
.
I2Cmask
[
0
]
==
0
):
if
not
(
self
.
I2Cmask
[
0
]
<=
self
.
I2Ccut
):
mask
[
Vari
]
=
False
;
continue
;
i0
=
(
Vari
)
*
Step2
...
...
@@ -207,9 +209,10 @@ class i2c_dev(hwdev):
value2
=
value1
[
i0
:
i1
]
res
=
self
.
GetVarValue
(
devreg
,
width
,
bitoffset
,
value2
)
if
not
(
res
):
self
.
I2Cmask
[
0
]
=
1
;
mask
[
Vari
]
=
False
;
self
.
I2Cmask
[
0
]
+
=
1
;
if
self
.
I2Cmask
[
0
]
>
self
.
I2Ccut
:
mask
[
Vari
]
=
False
;
continue
;
self
.
I2Cmask
[
0
]
=
0
;
value1
[
i0
:
i1
]
=
value2
return
value1
,
mask
...
...
@@ -263,6 +266,12 @@ class i2c_dev(hwdev):
callback
=
devreg
[
'
drivercls
'
].
i2csetget
;
value2
=
value
reg
=
devreg
[
'
register_R
'
]
if
devreg
.
get
(
'
wait
'
,
0
)
>
0
:
callback
(
0
,[
devreg
[
'
wait
'
]],
read
=
3
)
if
not
(
callback
(
devreg
[
'
addr
'
],
int2bytes
(
reg
),
read
=
2
)):
return
False
;
callback
(
0
,[
devreg
[
'
wait
'
]],
read
=
3
)
if
not
(
callback
(
devreg
[
'
addr
'
],
value2
,
read
=
1
)):
return
False
;
else
:
if
not
(
callback
(
devreg
[
'
addr
'
],
value2
,
reg
=
reg
,
read
=
1
)):
return
False
;
if
value2
[
0
]
is
None
:
return
False
value
[:]
=
value2
[:];
...
...
This diff is collapsed.
Click to expand it.
yamlconfig.py
+
4
−
2
View file @
2ea1cd46
...
...
@@ -78,6 +78,7 @@ class yamlconfig():
dev1
=
Find
(
self
.
conf
[
'
device_registers
'
],
'
name
'
,
name2
[
0
])
if
dev1
:
store
=
dev1
.
get
(
'
store
'
,
False
)
wait
=
dev1
.
get
(
'
wait
'
,
0
)
devcls
=
dev1
.
get
(
'
driver
'
);
if
not
(
devcls
):
logging
.
error
(
"
Can not find driver for register
"
+
name2
[
0
]);
else
:
...
...
@@ -86,7 +87,7 @@ class yamlconfig():
else
:
devcls
=
devcls
.
get
(
'
obj
'
)
# print(dev1)
return
{
"
addr
"
:
dev1
.
get
(
'
address
'
,
0
),
"
register_R
"
:
str2int
(
name2
[
1
]),
"
register_W
"
:
str2int
(
name2
[
1
]),
"
store
"
:
store
,
"
drivercls
"
:
devcls
};
return
{
"
addr
"
:
dev1
.
get
(
'
address
'
,
0
),
"
register_R
"
:
str2int
(
name2
[
1
]),
"
register_W
"
:
str2int
(
name2
[
1
]),
"
store
"
:
store
,
"
drivercls
"
:
devcls
,
"
wait
"
:
wait
};
else
:
return
{
"
addr
"
:
str2int
(
name2
[
0
]),
"
register_R
"
:
str2int
(
name2
[
1
]),
"
register_W
"
:
str2int
(
name2
[
1
])}
logging
.
error
(
"
Can not find device register
"
+
str
(
name
));
# except:
...
...
@@ -113,8 +114,9 @@ class yamlconfig():
regR
=
GetField
(
reg
,
'
address
'
,
0
,
0
)
regW
=
GetField
(
reg
,
'
address
'
,
1
,
0
)
store
=
reg
.
get
(
'
store
'
,
False
)
wait
=
reg
.
get
(
'
wait
'
,
0
)
devregname
=
name2
+
'
.
'
+
reg
[
'
name
'
];
devreglist
[
devregname
]
=
{
"
addr
"
:
addr
,
"
register_R
"
:
regR
,
"
register_W
"
:
regW
,
"
store
"
:
store
,
"
driver
"
:
devid
};
devreglist
[
devregname
]
=
{
"
addr
"
:
addr
,
"
register_R
"
:
regR
,
"
register_W
"
:
regW
,
"
store
"
:
store
,
"
driver
"
:
devid
,
"
wait
"
:
wait
};
# print(devregname,devreglist[devregname]['addr'],devreglist[devregname]['register_R'],devreglist[devregname]['register_W']);
self
.
devreglist
=
devreglist
;
for
D
in
drivers
:
...
...
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