Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
P
Production Test Suite
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
9
Issues
9
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Production Test Suite
Commits
672b3205
Commit
672b3205
authored
Dec 06, 2013
by
Matthieu Cattin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
many: Change interrupt scheme, now uses two stages (eic + vic).
parent
8164fabb
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
322 additions
and
366 deletions
+322
-366
gn4124.py
common/gn4124.py
+3
-1
fmc_adc.py
test/fmcadc100m14b4cha/python/fmc_adc.py
+83
-3
fmc_adc_demo.py
test/fmcadc100m14b4cha/python/fmc_adc_demo.py
+3
-2
fmc_adc_spec.py
test/fmcadc100m14b4cha/python/fmc_adc_spec.py
+132
-282
test07.py
test/fmcadc100m14b4cha/python/test07.py
+5
-5
test08.py
test/fmcadc100m14b4cha/python/test08.py
+5
-5
test09.py
test/fmcadc100m14b4cha/python/test09.py
+4
-4
test11.py
test/fmcadc100m14b4cha/python/test11.py
+3
-1
test12.py
test/fmcadc100m14b4cha/python/test12.py
+4
-4
test15.py
test/fmcadc100m14b4cha/python/test15.py
+4
-4
test16.py
test/fmcadc100m14b4cha/python/test16.py
+4
-4
test17.py
test/fmcadc100m14b4cha/python/test17.py
+1
-1
test19.py
test/fmcadc100m14b4cha/python/test19.py
+4
-4
test20.py
test/fmcadc100m14b4cha/python/test20.py
+24
-9
test22.py
test/fmcadc100m14b4cha/python/test22.py
+4
-4
test25.py
test/fmcadc100m14b4cha/python/test25.py
+4
-4
test27.py
test/fmcadc100m14b4cha/python/test27.py
+3
-3
test28.py
test/fmcadc100m14b4cha/python/test28.py
+24
-18
test30.py
test/fmcadc100m14b4cha/python/test30.py
+4
-4
test32.py
test/fmcadc100m14b4cha/python/test32.py
+4
-4
No files found.
common/gn4124.py
View file @
672b3205
...
@@ -124,8 +124,10 @@ class CGN4124:
...
@@ -124,8 +124,10 @@ class CGN4124:
# Wait for interrupt
# Wait for interrupt
def
wait_irq
(
self
,
verbose
=
False
):
def
wait_irq
(
self
,
verbose
=
False
):
if
verbose
:
if
verbose
:
print
(
"[GN4124] Waiting
IRQ
..."
)
print
(
"[GN4124] Waiting
interrupt
..."
)
ret
=
self
.
bus
.
irqwait
()
ret
=
self
.
bus
.
irqwait
()
if
verbose
:
print
(
"[GN4124] Interrupt occured"
)
# re-enable the interrupt
# re-enable the interrupt
self
.
bus
.
irqena
()
self
.
bus
.
irqena
()
return
ret
return
ret
...
...
test/fmcadc100m14b4cha/python/fmc_adc.py
View file @
672b3205
...
@@ -29,6 +29,7 @@ from si57x import *
...
@@ -29,6 +29,7 @@ from si57x import *
# Import register maps
# Import register maps
from
utc_core_regs
import
*
from
utc_core_regs
import
*
from
fmc_adc_eic_regs
import
*
from
fmcadc100m_csr
import
*
from
fmcadc100m_csr
import
*
...
@@ -57,11 +58,12 @@ class FmcAdc100mOperationError(Exception):
...
@@ -57,11 +58,12 @@ class FmcAdc100mOperationError(Exception):
class
CFmcAdc100m
:
class
CFmcAdc100m
:
UTC_CORE_ADDR
=
0x0
FMC_EIC_ADDR
=
0x0
UTC_CORE_ADDR
=
0x100
# FOR SVEC ONLY
# FOR SVEC ONLY
DDR_DAT_ADDR
=
0x
01
00
DDR_DAT_ADDR
=
0x
10
00
DDR_ADR_ADDR
=
0x
0
200
DDR_ADR_ADDR
=
0x200
FMC_SYS_I2C_ADDR
=
0x1000
FMC_SYS_I2C_ADDR
=
0x1000
EEPROM_ADDR
=
0x50
EEPROM_ADDR
=
0x50
...
@@ -115,6 +117,7 @@ class CFmcAdc100m:
...
@@ -115,6 +117,7 @@ class CFmcAdc100m:
try
:
try
:
# Objects declaration
# Objects declaration
self
.
fmc_eic
=
CCSR
(
self
.
bus
,
self
.
adc_mezz_offset
+
self
.
FMC_EIC_ADDR
,
FMC_ADC_EIC_REGS
)
self
.
utc_core
=
CCSR
(
self
.
bus
,
self
.
adc_mezz_offset
+
self
.
UTC_CORE_ADDR
,
UTC_CORE_REGS
)
self
.
utc_core
=
CCSR
(
self
.
bus
,
self
.
adc_mezz_offset
+
self
.
UTC_CORE_ADDR
,
UTC_CORE_REGS
)
self
.
fmc_sys_i2c
=
COpenCoresI2C
(
self
.
bus
,
self
.
adc_core_offset
+
self
.
FMC_SYS_I2C_ADDR
,
249
)
self
.
fmc_sys_i2c
=
COpenCoresI2C
(
self
.
bus
,
self
.
adc_core_offset
+
self
.
FMC_SYS_I2C_ADDR
,
249
)
...
@@ -205,6 +208,83 @@ class CFmcAdc100m:
...
@@ -205,6 +208,83 @@ class CFmcAdc100m:
print
(
"Test pattern :
%.4
X"
)
%
self
.
adc_cfg
.
get_testpat
()
print
(
"Test pattern :
%.4
X"
)
%
self
.
adc_cfg
.
get_testpat
()
print
(
"Test pattern status :
%.1
X"
)
%
self
.
adc_cfg
.
get_testpat_stat
()
print
(
"Test pattern status :
%.1
X"
)
%
self
.
adc_cfg
.
get_testpat_stat
()
#======================================================================
# FMC-ADC Enhanced Interrupt Controller (EIC)
# Print FMC-ADC EIC register map
def
print_eic_regs
(
self
):
self
.
fmc_eic
.
print_reg_map
()
# Enable trigger interrupt
def
enable_trig_irq
(
self
):
try
:
self
.
fmc_eic
.
set_field
(
'IER'
,
'TRIG'
,
1
)
except
CSRDeviceOperationError
as
e
:
raise
FmcAdc100mSpecOperationError
(
e
)
# Disable trigger interrupt
def
disable_trig_irq
(
self
):
try
:
self
.
fmc_eic
.
set_field
(
'IDR'
,
'TRIG'
,
1
)
except
CSRDeviceOperationError
as
e
:
raise
FmcAdc100mSpecOperationError
(
e
)
# Clear trigger interrupt
def
clear_trig_irq
(
self
):
try
:
self
.
fmc_eic
.
set_field
(
'ISR'
,
'TRIG'
,
1
)
except
CSRDeviceOperationError
as
e
:
raise
FmcAdc100mSpecOperationError
(
e
)
# Enable acquisition end interrupt
def
enable_acq_end_irq
(
self
):
try
:
self
.
fmc_eic
.
set_field
(
'IER'
,
'ACQ_END'
,
1
)
except
CSRDeviceOperationError
as
e
:
raise
FmcAdc100mSpecOperationError
(
e
)
# Disable acquisition end interrupt
def
disable_acq_end_irq
(
self
):
try
:
self
.
fmc_eic
.
set_field
(
'IDR'
,
'ACQ_END'
,
1
)
except
CSRDeviceOperationError
as
e
:
raise
FmcAdc100mSpecOperationError
(
e
)
# Clear acquisition end interrupt
def
clear_acq_end_irq
(
self
):
try
:
self
.
fmc_eic
.
set_field
(
'ISR'
,
'ACQ_END'
,
1
)
except
CSRDeviceOperationError
as
e
:
raise
FmcAdc100mSpecOperationError
(
e
)
# Get FMC-ADC EIC enable mask
def
get_eic_en_mask
(
self
):
try
:
return
self
.
fmc_eic
.
get_reg
(
'IMR'
)
except
CSRDeviceOperationError
as
e
:
raise
FmcAdc100mSpecOperationError
(
e
)
# Get FMC-ADC interrupt source
def
get_eic_src
(
self
):
try
:
return
self
.
fmc_eic
.
get_reg
(
'ISR'
)
except
CSRDeviceOperationError
as
e
:
raise
FmcAdc100mSpecOperationError
(
e
)
# Get trigger interrupt status
def
get_trig_status
(
self
):
try
:
return
self
.
fmc_eic
.
get_field
(
'ISR'
,
'TRIG'
)
except
CSRDeviceOperationError
as
e
:
raise
FmcAdc100mSpecOperationError
(
e
)
# Get end of acq interrupt status
def
get_acq_end_status
(
self
):
try
:
return
self
.
fmc_eic
.
get_field
(
'ISR'
,
'ACQ_END'
)
except
CSRDeviceOperationError
as
e
:
raise
FmcAdc100mSpecOperationError
(
e
)
#======================================================================
#======================================================================
# UTC core
# UTC core
...
...
test/fmcadc100m14b4cha/python/fmc_adc_demo.py
View file @
672b3205
...
@@ -233,8 +233,9 @@ if __name__ == "__main__":
...
@@ -233,8 +233,9 @@ if __name__ == "__main__":
sine
=
SineWaveform
()
sine
=
SineWaveform
()
carrier
=
CFmcAdc100mSpec
(
spec
,
0x1
)
carrier
=
CFmcAdc100mSpec
(
spec
,
0x1
)
# Enable DMA interrupts (finished, error)
# Enable DMA interrupts
carrier
.
set_irq_en_mask
(
0x3
)
carrier
.
enable_dma_done_irq
()
carrier
.
enable_dma_error_irq
()
# Set UTC
# Set UTC
current_time
=
time
.
time
()
current_time
=
time
.
time
()
...
...
test/fmcadc100m14b4cha/python/fmc_adc_spec.py
View file @
672b3205
This diff is collapsed.
Click to expand it.
test/fmcadc100m14b4cha/python/test07.py
View file @
672b3205
...
@@ -93,12 +93,12 @@ def acq_channels(fmc, carrier):
...
@@ -93,12 +93,12 @@ def acq_channels(fmc, carrier):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
,
False
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
return
channels_data
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test08.py
View file @
672b3205
...
@@ -97,12 +97,12 @@ def get_channels_mean(fmc, carrier):
...
@@ -97,12 +97,12 @@ def get_channels_mean(fmc, carrier):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
,
False
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
# calculate mean value for each channel
# calculate mean value for each channel
channels_mean
=
[]
channels_mean
=
[]
...
...
test/fmcadc100m14b4cha/python/test09.py
View file @
672b3205
...
@@ -141,12 +141,12 @@ def acq_channels(fmc, carrier):
...
@@ -141,12 +141,12 @@ def acq_channels(fmc, carrier):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
1.0
,
16
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
1.0
,
16
)
for
item
in
channels_data
]
return
channels_data
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test11.py
View file @
672b3205
...
@@ -171,7 +171,9 @@ def main (default_directory='.'):
...
@@ -171,7 +171,9 @@ def main (default_directory='.'):
sine
=
SineWaveform
()
sine
=
SineWaveform
()
# Enables DMA interrupts
# Enables DMA interrupts
print
(
'Set IRQ enable mask:
%.4
X'
)
%
spec_fmc
.
set_irq_en_mask
(
0x3
)
spec_fmc
.
enable_dma_done_irq
()
spec_fmc
.
enable_dma_error_irq
()
print
(
'Set IRQ enable mask:
%.4
X'
%
spec_fmc
.
get_dma_eic_en_mask
())
# Initialise fmc adc
# Initialise fmc adc
fmc_adc_init
(
spec
,
fmc
)
fmc_adc_init
(
spec
,
fmc
)
...
...
test/fmcadc100m14b4cha/python/test12.py
View file @
672b3205
...
@@ -104,12 +104,12 @@ def acq_channels(fmc, carrier, adc_fs, pause):
...
@@ -104,12 +104,12 @@ def acq_channels(fmc, carrier, adc_fs, pause):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
16
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
16
)
for
item
in
channels_data
]
return
channels_data
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test15.py
View file @
672b3205
...
@@ -146,12 +146,12 @@ def acq_get_data(spec_fmc, fmc, adc_fs, adc_nbits=16):
...
@@ -146,12 +146,12 @@ def acq_get_data(spec_fmc, fmc, adc_fs, adc_nbits=16):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
spec_fmc
.
set_irq_en_mask
(
0x1
)
spec_fmc
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
spec_fmc
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
spec_fmc
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
spec_fmc
.
set_irq_en_mask
(
0x0
)
spec_fmc
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
adc_nbits
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
adc_nbits
)
for
item
in
channels_data
]
return
channels_data
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test16.py
View file @
672b3205
...
@@ -117,12 +117,12 @@ def acq_channels(fmc, spec_fmc):
...
@@ -117,12 +117,12 @@ def acq_channels(fmc, spec_fmc):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
spec_fmc
.
set_irq_en_mask
(
0x1
)
spec_fmc
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
spec_fmc
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
spec_fmc
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
spec_fmc
.
set_irq_en_mask
(
0x0
)
spec_fmc
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
return
channels_data
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test17.py
View file @
672b3205
...
@@ -216,7 +216,7 @@ def main (default_directory = '.'):
...
@@ -216,7 +216,7 @@ def main (default_directory = '.'):
print
"GN4124 local bus freq: "
,
carrier
.
gnum
.
get_local_bus_freq
()
print
"GN4124 local bus freq: "
,
carrier
.
gnum
.
get_local_bus_freq
()
# Enable "DMA finished" IRQ
# Enable "DMA finished" IRQ
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Initialise fmc adc
# Initialise fmc adc
fmc_adc_init
(
spec
,
fmc
)
fmc_adc_init
(
spec
,
fmc
)
...
...
test/fmcadc100m14b4cha/python/test19.py
View file @
672b3205
...
@@ -191,12 +191,12 @@ def acq_channel(carrier, fmc, ch, adc_fs, adc_nbits=16, pause=0.01):
...
@@ -191,12 +191,12 @@ def acq_channel(carrier, fmc, ch, adc_fs, adc_nbits=16, pause=0.01):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
adc_nbits
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
adc_nbits
)
for
item
in
channels_data
]
#plot_all(channels_data, [mean(channels_data[0::4]),mean(channels_data[1::4]),mean(channels_data[2::4]),mean(channels_data[3::4])], 0.1)
#plot_all(channels_data, [mean(channels_data[0::4]),mean(channels_data[1::4]),mean(channels_data[2::4]),mean(channels_data[3::4])], 0.1)
...
...
test/fmcadc100m14b4cha/python/test20.py
View file @
672b3205
...
@@ -165,12 +165,12 @@ def acq_channel(carrier, fmc, ch, adc_fs, adc_nbits=16, pause=0.01):
...
@@ -165,12 +165,12 @@ def acq_channel(carrier, fmc, ch, adc_fs, adc_nbits=16, pause=0.01):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt_without_offset
(
item
,
adc_fs
,
adc_nbits
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt_without_offset
(
item
,
adc_fs
,
adc_nbits
)
for
item
in
channels_data
]
channel_data
=
channels_data
[
ch
-
1
::
4
]
channel_data
=
channels_data
[
ch
-
1
::
4
]
...
@@ -241,7 +241,11 @@ def main (default_directory = '.'):
...
@@ -241,7 +241,11 @@ def main (default_directory = '.'):
AWG_BAUD
=
57600
AWG_BAUD
=
57600
CALIBR_FILENAME
=
"calibration_data.txt"
CALIBR_FILENAME
=
"calibration_data.txt"
CALIBR_FILENAME
=
os
.
path
.
join
(
default_directory
,
CALIBR_FILENAME
)
CALIBR_BIN_FILENAME
=
"calibration_data.bin"
CALIBR_BIN_FILENAME
=
os
.
path
.
join
(
default_directory
,
CALIBR_BIN_FILENAME
)
EEPROM_BIN_FILENAME
=
"eeprom_content.out"
EEPROM_BIN_FILENAME
=
"eeprom_content.out"
EEPROM_BIN_FILENAME
=
os
.
path
.
join
(
default_directory
,
EEPROM_BIN_FILENAME
)
EEPROM_SIZE
=
8192
# in Bytes
EEPROM_SIZE
=
8192
# in Bytes
...
@@ -337,14 +341,25 @@ def main (default_directory = '.'):
...
@@ -337,14 +341,25 @@ def main (default_directory = '.'):
f_eeprom
.
close
()
f_eeprom
.
close
()
# Get calibration data
# Get calibration data
print
"Get calibration data from EEPROM."
#print("Extract calibration binary file to: %s"%(CALIBR_BIN_FILENAME))
eeprom_data
=
open
(
EEPROM_BIN_FILENAME
,
"rb"
)
.
read
()
cmd
=
'sdb-read -e 0x200 '
+
EEPROM_BIN_FILENAME
+
' calib > '
+
CALIBR_BIN_FILENAME
int_use_data
=
ipmi_get_internal_use_data
(
eeprom_data
)
print
(
"Exctract calibration binary file, cmd:
%
s"
%
(
cmd
))
os
.
system
(
cmd
)
print
"Get calibration data from binary file."
calibr_data
=
[]
f_calibr_data
=
open
(
CALIBR_BIN_FILENAME
,
"rb"
)
try
:
byte
=
f_calibr_data
.
read
(
1
)
while
byte
!=
""
:
calibr_data
.
append
(
ord
(
byte
))
byte
=
f_calibr_data
.
read
(
1
)
finally
:
f_eeprom
.
close
()
# Re-arrange correction data into 16-bit number (from bytes)
# Re-arrange correction data into 16-bit number (from bytes)
eeprom_corr_data
=
[]
eeprom_corr_data
=
[]
for
i
in
range
(
0
,
len
(
int_use
_data
),
2
):
for
i
in
range
(
0
,
len
(
calibr
_data
),
2
):
eeprom_corr_data
.
append
((
int_use_data
[
i
+
1
]
<<
8
)
+
(
int_use
_data
[
i
]))
eeprom_corr_data
.
append
((
calibr_data
[
i
+
1
]
<<
8
)
+
(
calibr
_data
[
i
]))
print
"0x
%04
X"
%
eeprom_corr_data
[
-
1
]
print
"0x
%04
X"
%
eeprom_corr_data
[
-
1
]
print
"Calibration data length (16-bit):
%
d"
%
len
(
eeprom_corr_data
)
print
"Calibration data length (16-bit):
%
d"
%
len
(
eeprom_corr_data
)
print
"Correction data from eeprom:"
print
"Correction data from eeprom:"
...
...
test/fmcadc100m14b4cha/python/test22.py
View file @
672b3205
...
@@ -91,12 +91,12 @@ def acq_channels(fmc, carrier):
...
@@ -91,12 +91,12 @@ def acq_channels(fmc, carrier):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
return
0
return
0
def
print_temp
(
temp
):
def
print_temp
(
temp
):
...
...
test/fmcadc100m14b4cha/python/test25.py
View file @
672b3205
...
@@ -174,12 +174,12 @@ def acq_channel(carrier, fmc, ch, adc_fs, adc_nbits=16, pause=0.01):
...
@@ -174,12 +174,12 @@ def acq_channel(carrier, fmc, ch, adc_fs, adc_nbits=16, pause=0.01):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt_without_offset
(
item
,
adc_fs
,
adc_nbits
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt_without_offset
(
item
,
adc_fs
,
adc_nbits
)
for
item
in
channels_data
]
channel_data
=
channels_data
[
ch
-
1
::
4
]
channel_data
=
channels_data
[
ch
-
1
::
4
]
...
...
test/fmcadc100m14b4cha/python/test27.py
View file @
672b3205
...
@@ -95,7 +95,7 @@ def acq_channels(fmc, carrier):
...
@@ -95,7 +95,7 @@ def acq_channels(fmc, carrier):
print
(
"Trigger position: 0x
%8
X"
%
trig_pos
)
print
(
"Trigger position: 0x
%8
X"
%
trig_pos
)
#carrier.print_irq_controller_regs()
#carrier.print_irq_controller_regs()
# Enable "DMA done" interrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
#carrier.print_irq_controller_regs()
#carrier.print_irq_controller_regs()
raw_input
(
"hit any key to start dma."
)
raw_input
(
"hit any key to start dma."
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
...
@@ -103,8 +103,8 @@ def acq_channels(fmc, carrier):
...
@@ -103,8 +103,8 @@ def acq_channels(fmc, carrier):
channels_data
=
carrier
.
get_data
(
0
,
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
(
0
,
ACQ_LENGTH
*
8
)
#for carrier_addr in range(0,10*4096, 4096):
#for carrier_addr in range(0,10*4096, 4096):
# channels_data = carrier.get_data(carrier_addr, 0x1000)
# channels_data = carrier.get_data(carrier_addr, 0x1000)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
return
channels_data
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test28.py
View file @
672b3205
...
@@ -156,7 +156,7 @@ def clear_ddr(carrier, verbose=False):
...
@@ -156,7 +156,7 @@ def clear_ddr(carrier, verbose=False):
pattern
=
0x0
pattern
=
0x0
length
=
2
**
27
-
(
128
*
4096
)
length
=
2
**
27
-
(
128
*
4096
)
# Enable "DMA done" interrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_dma_done_mask
(
1
)
carrier
.
enable_dma_done_irq
(
)
#carrier.print_irq_controller_regs()
#carrier.print_irq_controller_regs()
# Test number of dma transfer required (max dma size limitation of gnurabbit driver)
# Test number of dma transfer required (max dma size limitation of gnurabbit driver)
dma_required
=
int
(
math
.
ceil
((
MEMORY_SIZE
<<
3
)
/
float
(
254
*
DMA_ITEM_SIZE
*
DMA_MAX_ITEMS
)))
dma_required
=
int
(
math
.
ceil
((
MEMORY_SIZE
<<
3
)
/
float
(
254
*
DMA_ITEM_SIZE
*
DMA_MAX_ITEMS
)))
...
@@ -176,7 +176,7 @@ def clear_ddr(carrier, verbose=False):
...
@@ -176,7 +176,7 @@ def clear_ddr(carrier, verbose=False):
# Incerment dma start address
# Incerment dma start address
start_byte_addr
+=
dma_length
start_byte_addr
+=
dma_length
# Disable "DMA done" interrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_dma_done_mask
(
0
)
carrier
.
disable_dma_done_irq
(
)
# Returns calibration data from fmc eeprom
# Returns calibration data from fmc eeprom
...
@@ -206,7 +206,7 @@ def get_calibr_data(fmc, eeprom_bin_filename, calibr_bin_filename, verbose=False
...
@@ -206,7 +206,7 @@ def get_calibr_data(fmc, eeprom_bin_filename, calibr_bin_filename, verbose=False
# Get calibration data
# Get calibration data
#print("Extract calibration binary file to: %s"%(CALIBR_BIN_FILENAME))
#print("Extract calibration binary file to: %s"%(CALIBR_BIN_FILENAME))
cmd
=
'sdb-read -e 0x
1000 '
+
eeprom_bin_filename
+
' calibration.sd
b > '
+
calibr_bin_filename
cmd
=
'sdb-read -e 0x
200 '
+
eeprom_bin_filename
+
' cali
b > '
+
calibr_bin_filename
if
verbose
:
if
verbose
:
print
(
"Exctract calibration binary file, cmd:
%
s"
%
(
cmd
))
print
(
"Exctract calibration binary file, cmd:
%
s"
%
(
cmd
))
os
.
system
(
cmd
)
os
.
system
(
cmd
)
...
@@ -333,11 +333,11 @@ def make_acq(carrier, fmc, verbose=False):
...
@@ -333,11 +333,11 @@ def make_acq(carrier, fmc, verbose=False):
# Make sure no acquisition is running
# Make sure no acquisition is running
fmc
.
stop_acq
()
fmc
.
stop_acq
()
# Enables acquisition end interrupt
# Enables acquisition end interrupt
carrier
.
set_irq_acq_end_mask
(
1
)
fmc
.
enable_acq_end_irq
(
)
#
carrier.set_irq_trig_mask(1
)
#
fmc.enable_trig_irq(
)
if
verbose
:
if
verbose
:
print
(
"IRQ mask
:
%.8
X"
%
carrier
.
get_irq
_en_mask
())
print
(
"IRQ mask
:
%.8
X"
%
fmc
.
get_eic
_en_mask
())
print
(
"IRQ source :
%.8
X"
%
carrier
.
get_irq_source
())
print
(
"IRQ source :
%.8
X"
%
fmc
.
get_eic_src
())
# Start acquisition
# Start acquisition
if
verbose
:
if
verbose
:
print
(
"Starting acquisition..."
)
print
(
"Starting acquisition..."
)
...
@@ -352,20 +352,26 @@ def make_acq(carrier, fmc, verbose=False):
...
@@ -352,20 +352,26 @@ def make_acq(carrier, fmc, verbose=False):
###########################
###########################
# Wait for trigger interrupt
# Wait for trigger interrupt
#carrier.gnum.wait_irq
(
)
#carrier.gnum.wait_irq)
# Wait for acquisition end interrupt
# Wait for acquisition end interrupt
carrier
.
gnum
.
wait_irq
()
carrier
.
gnum
.
wait_irq
()
irq_src
=
carrier
.
get_irq_source
()
irq_src
=
fmc
.
get_eic_src
()
irq_vect
=
carrier
.
vic_get_current_vector_addr
()
if
verbose
:
if
verbose
:
print
(
"IRQ source :
%.8
X"
%
irq_src
)
print
(
"FMC EIC irq source :
%.8
X"
%
irq_src
)
if
(
irq_src
&
carrier
.
IRQ_SRC_ACQ_END
):
print
(
"VIC current vector : 0x
%08
X"
%
irq_vect
)
carrier
.
clear_irq_source
(
carrier
.
IRQ_SRC_ACQ_END
)
if
(
irq_vect
==
carrier
.
fmc_eic_addr
):
if
verbose
:
if
(
fmc
.
get_acq_end_status
()):
print
(
"IRQ source :
%.8
X"
%
carrier
.
get_irq_source
())
fmc
.
clear_acq_end_irq
()
carrier
.
vic_ack_current_vector
()
if
verbose
:
print
(
"IRQ source : 0x
%08
X"
%
fmc
.
get_eic_src
())
else
:
raise
PtsError
(
"Bad IRQ source."
)
else
:
else
:
raise
PtsError
(
"Bad IRQ
source. expected:0x08 got:0x
%02
X"
%
(
irq_src
))
raise
PtsError
(
"Bad IRQ
vector. expected:0x
%08
X got:0x
%08
X"
%
(
carrier
.
fmc_eic_addr
,
irq_vect
))
if
'IDLE'
!=
fmc
.
get_acq_fsm_state
():
if
'IDLE'
!=
fmc
.
get_acq_fsm_state
():
raise
PtsError
(
"Acq FSM not IDLE. Current state:
%
s"
%
fmc
.
get_acq_fsm_state
())
raise
PtsError
(
"Acq FSM not IDLE. Current state:
%
s"
%
fmc
.
get_acq_fsm_state
())
...
@@ -374,13 +380,13 @@ def make_acq(carrier, fmc, verbose=False):
...
@@ -374,13 +380,13 @@ def make_acq(carrier, fmc, verbose=False):
print
(
"Acquisition finished."
)
print
(
"Acquisition finished."
)
# Disables acquisition end interrupt
# Disables acquisition end interrupt
carrier
.
set_irq_acq_end_mask
(
0
)
fmc
.
disable_acq_end_irq
(
)
# Make a linked list dma
# Make a linked list dma
def
make_dma
(
carrier
,
start_byte_addr
,
length_bytes
,
in_range
,
verbose
=
False
):
def
make_dma
(
carrier
,
start_byte_addr
,
length_bytes
,
in_range
,
verbose
=
False
):
# Enable "DMA done" interrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_dma_done_mask
(
1
)
carrier
.
enable_dma_done_irq
(
)
#carrier.print_irq_controller_regs()
#carrier.print_irq_controller_regs()
# Test number of dma transfer required (max dma size limitation of gnurabbit driver)
# Test number of dma transfer required (max dma size limitation of gnurabbit driver)
dma_required
=
int
(
math
.
ceil
(
length_bytes
/
float
(
DMA_ITEM_SIZE
*
DMA_MAX_ITEMS
)))
dma_required
=
int
(
math
.
ceil
(
length_bytes
/
float
(
DMA_ITEM_SIZE
*
DMA_MAX_ITEMS
)))
...
@@ -402,7 +408,7 @@ def make_dma(carrier, start_byte_addr, length_bytes, in_range, verbose=False):
...
@@ -402,7 +408,7 @@ def make_dma(carrier, start_byte_addr, length_bytes, in_range, verbose=False):
# Incerment dma start address
# Incerment dma start address
start_byte_addr
+=
dma_length
start_byte_addr
+=
dma_length
# Disable "DMA done" interrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_dma_done_mask
(
0
)
carrier
.
disable_dma_done_irq
(
)
#carrier.print_irq_controller_regs()
#carrier.print_irq_controller_regs()
return
data
return
data
...
...
test/fmcadc100m14b4cha/python/test30.py
View file @
672b3205
...
@@ -103,12 +103,12 @@ def acq_channels(fmc, carrier, adc_fs, pause):
...
@@ -103,12 +103,12 @@ def acq_channels(fmc, carrier, adc_fs, pause):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
16
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
16
)
for
item
in
channels_data
]
return
channels_data
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test32.py
View file @
672b3205
...
@@ -114,12 +114,12 @@ def acq_channels(fmc, carrier, adc_fs, pause):
...
@@ -114,12 +114,12 @@ def acq_channels(fmc, carrier, adc_fs, pause):
return
1
return
1
# Retrieve data trough DMA
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
# Disable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x0
)
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
16
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
16
)
for
item
in
channels_data
]
return
channels_data
return
channels_data
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment