Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC ADC 100M 14b 4cha - Testing
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
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
FMC ADC 100M 14b 4cha - Testing
Commits
fea8c6d4
Commit
fea8c6d4
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
5c7369f1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
319 additions
and
365 deletions
+319
-365
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.
test/fmcadc100m14b4cha/python/fmc_adc.py
View file @
fea8c6d4
...
...
@@ -29,6 +29,7 @@ from si57x import *
# Import register maps
from
utc_core_regs
import
*
from
fmc_adc_eic_regs
import
*
from
fmcadc100m_csr
import
*
...
...
@@ -57,11 +58,12 @@ class FmcAdc100mOperationError(Exception):
class
CFmcAdc100m
:
UTC_CORE_ADDR
=
0x0
FMC_EIC_ADDR
=
0x0
UTC_CORE_ADDR
=
0x100
# FOR SVEC ONLY
DDR_DAT_ADDR
=
0x
01
00
DDR_ADR_ADDR
=
0x
0
200
DDR_DAT_ADDR
=
0x
10
00
DDR_ADR_ADDR
=
0x200
FMC_SYS_I2C_ADDR
=
0x1000
EEPROM_ADDR
=
0x50
...
...
@@ -115,6 +117,7 @@ class CFmcAdc100m:
try
:
# 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
.
fmc_sys_i2c
=
COpenCoresI2C
(
self
.
bus
,
self
.
adc_core_offset
+
self
.
FMC_SYS_I2C_ADDR
,
249
)
...
...
@@ -205,6 +208,83 @@ class CFmcAdc100m:
print
(
"Test pattern :
%.4
X"
)
%
self
.
adc_cfg
.
get_testpat
()
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
...
...
test/fmcadc100m14b4cha/python/fmc_adc_demo.py
View file @
fea8c6d4
...
...
@@ -233,8 +233,9 @@ if __name__ == "__main__":
sine
=
SineWaveform
()
carrier
=
CFmcAdc100mSpec
(
spec
,
0x1
)
# Enable DMA interrupts (finished, error)
carrier
.
set_irq_en_mask
(
0x3
)
# Enable DMA interrupts
carrier
.
enable_dma_done_irq
()
carrier
.
enable_dma_error_irq
()
# Set UTC
current_time
=
time
.
time
()
...
...
test/fmcadc100m14b4cha/python/fmc_adc_spec.py
View file @
fea8c6d4
This diff is collapsed.
Click to expand it.
test/fmcadc100m14b4cha/python/test07.py
View file @
fea8c6d4
...
...
@@ -93,12 +93,12 @@ def acq_channels(fmc, carrier):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
,
False
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test08.py
View file @
fea8c6d4
...
...
@@ -97,12 +97,12 @@ def get_channels_mean(fmc, carrier):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
,
False
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
# calculate mean value for each channel
channels_mean
=
[]
...
...
test/fmcadc100m14b4cha/python/test09.py
View file @
fea8c6d4
...
...
@@ -141,12 +141,12 @@ def acq_channels(fmc, carrier):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
1.0
,
16
)
for
item
in
channels_data
]
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test11.py
View file @
fea8c6d4
...
...
@@ -171,7 +171,9 @@ def main (default_directory='.'):
sine
=
SineWaveform
()
# 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
fmc_adc_init
(
spec
,
fmc
)
...
...
test/fmcadc100m14b4cha/python/test12.py
View file @
fea8c6d4
...
...
@@ -104,12 +104,12 @@ def acq_channels(fmc, carrier, adc_fs, pause):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
16
)
for
item
in
channels_data
]
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test15.py
View file @
fea8c6d4
...
...
@@ -146,12 +146,12 @@ def acq_get_data(spec_fmc, fmc, adc_fs, adc_nbits=16):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
spec_fmc
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
spec_fmc
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
spec_fmc
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
spec_fmc
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
spec_fmc
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
adc_nbits
)
for
item
in
channels_data
]
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test16.py
View file @
fea8c6d4
...
...
@@ -117,12 +117,12 @@ def acq_channels(fmc, spec_fmc):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
spec_fmc
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
spec_fmc
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
spec_fmc
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
spec_fmc
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
spec_fmc
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test17.py
View file @
fea8c6d4
...
...
@@ -216,7 +216,7 @@ def main (default_directory = '.'):
print
"GN4124 local bus freq: "
,
carrier
.
gnum
.
get_local_bus_freq
()
# Enable "DMA finished" IRQ
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
# Initialise fmc adc
fmc_adc_init
(
spec
,
fmc
)
...
...
test/fmcadc100m14b4cha/python/test19.py
View file @
fea8c6d4
...
...
@@ -191,12 +191,12 @@ def acq_channel(carrier, fmc, ch, adc_fs, adc_nbits=16, pause=0.01):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
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)
...
...
test/fmcadc100m14b4cha/python/test20.py
View file @
fea8c6d4
...
...
@@ -165,12 +165,12 @@ def acq_channel(carrier, fmc, ch, adc_fs, adc_nbits=16, pause=0.01):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
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
]
...
...
@@ -241,7 +241,11 @@ def main (default_directory = '.'):
AWG_BAUD
=
57600
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
=
os
.
path
.
join
(
default_directory
,
EEPROM_BIN_FILENAME
)
EEPROM_SIZE
=
8192
# in Bytes
...
...
@@ -337,14 +341,25 @@ def main (default_directory = '.'):
f_eeprom
.
close
()
# Get calibration data
print
"Get calibration data from EEPROM."
eeprom_data
=
open
(
EEPROM_BIN_FILENAME
,
"rb"
)
.
read
()
int_use_data
=
ipmi_get_internal_use_data
(
eeprom_data
)
#print("Extract calibration binary file to: %s"%(CALIBR_BIN_FILENAME))
cmd
=
'sdb-read -e 0x200 '
+
EEPROM_BIN_FILENAME
+
' calib > '
+
CALIBR_BIN_FILENAME
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)
eeprom_corr_data
=
[]
for
i
in
range
(
0
,
len
(
int_use
_data
),
2
):
eeprom_corr_data
.
append
((
int_use_data
[
i
+
1
]
<<
8
)
+
(
int_use
_data
[
i
]))
for
i
in
range
(
0
,
len
(
calibr
_data
),
2
):
eeprom_corr_data
.
append
((
calibr_data
[
i
+
1
]
<<
8
)
+
(
calibr
_data
[
i
]))
print
"0x
%04
X"
%
eeprom_corr_data
[
-
1
]
print
"Calibration data length (16-bit):
%
d"
%
len
(
eeprom_corr_data
)
print
"Correction data from eeprom:"
...
...
test/fmcadc100m14b4cha/python/test22.py
View file @
fea8c6d4
...
...
@@ -91,12 +91,12 @@ def acq_channels(fmc, carrier):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
return
0
def
print_temp
(
temp
):
...
...
test/fmcadc100m14b4cha/python/test25.py
View file @
fea8c6d4
...
...
@@ -174,12 +174,12 @@ def acq_channel(carrier, fmc, ch, adc_fs, adc_nbits=16, pause=0.01):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
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
]
...
...
test/fmcadc100m14b4cha/python/test27.py
View file @
fea8c6d4
...
...
@@ -95,7 +95,7 @@ def acq_channels(fmc, carrier):
print
(
"Trigger position: 0x
%8
X"
%
trig_pos
)
#carrier.print_irq_controller_regs()
# Enable "DMA done" interrupt
carrier
.
set_irq_en_mask
(
0x1
)
carrier
.
enable_dma_done_irq
(
)
#carrier.print_irq_controller_regs()
raw_input
(
"hit any key to start dma."
)
# Read ACQ_LENGTH samples after the trigger for all channels
...
...
@@ -103,8 +103,8 @@ def acq_channels(fmc, carrier):
channels_data
=
carrier
.
get_data
(
0
,
ACQ_LENGTH
*
8
)
#for carrier_addr in range(0,10*4096, 4096):
# channels_data = carrier.get_data(carrier_addr, 0x1000)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test28.py
View file @
fea8c6d4
...
...
@@ -156,7 +156,7 @@ def clear_ddr(carrier, verbose=False):
pattern
=
0x0
length
=
2
**
27
-
(
128
*
4096
)
# Enable "DMA done" interrupt
carrier
.
set_irq_dma_done_mask
(
1
)
carrier
.
enable_dma_done_irq
(
)
#carrier.print_irq_controller_regs()
# 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
)))
...
...
@@ -176,7 +176,7 @@ def clear_ddr(carrier, verbose=False):
# Incerment dma start address
start_byte_addr
+=
dma_length
# Disable "DMA done" interrupt
carrier
.
set_irq_dma_done_mask
(
0
)
carrier
.
disable_dma_done_irq
(
)
# Returns calibration data from fmc eeprom
...
...
@@ -206,7 +206,7 @@ def get_calibr_data(fmc, eeprom_bin_filename, calibr_bin_filename, verbose=False
# Get calibration data
#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
:
print
(
"Exctract calibration binary file, cmd:
%
s"
%
(
cmd
))
os
.
system
(
cmd
)
...
...
@@ -333,11 +333,11 @@ def make_acq(carrier, fmc, verbose=False):
# Make sure no acquisition is running
fmc
.
stop_acq
()
# Enables acquisition end interrupt
carrier
.
set_irq_acq_end_mask
(
1
)
#
carrier.set_irq_trig_mask(1
)
fmc
.
enable_acq_end_irq
(
)
#
fmc.enable_trig_irq(
)
if
verbose
:
print
(
"IRQ mask
:
%.8
X"
%
carrier
.
get_irq
_en_mask
())
print
(
"IRQ source :
%.8
X"
%
carrier
.
get_irq_source
())
print
(
"IRQ mask
:
%.8
X"
%
fmc
.
get_eic
_en_mask
())
print
(
"IRQ source :
%.8
X"
%
fmc
.
get_eic_src
())
# Start acquisition
if
verbose
:
print
(
"Starting acquisition..."
)
...
...
@@ -352,20 +352,26 @@ def make_acq(carrier, fmc, verbose=False):
###########################
# Wait for trigger interrupt
#carrier.gnum.wait_irq
(
)
#carrier.gnum.wait_irq)
# Wait for acquisition end interrupt
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
:
print
(
"IRQ source :
%.8
X"
%
irq_src
)
if
(
irq_src
&
carrier
.
IRQ_SRC_ACQ_END
):
carrier
.
clear_irq_source
(
carrier
.
IRQ_SRC_ACQ_END
)
if
verbose
:
print
(
"IRQ source :
%.8
X"
%
carrier
.
get_irq_source
())
print
(
"FMC EIC irq source :
%.8
X"
%
irq_src
)
print
(
"VIC current vector : 0x
%08
X"
%
irq_vect
)
if
(
irq_vect
==
carrier
.
fmc_eic_addr
):
if
(
fmc
.
get_acq_end_status
()):
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
:
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
():
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):
print
(
"Acquisition finished."
)
# Disables acquisition end interrupt
carrier
.
set_irq_acq_end_mask
(
0
)
fmc
.
disable_acq_end_irq
(
)
# Make a linked list dma
def
make_dma
(
carrier
,
start_byte_addr
,
length_bytes
,
in_range
,
verbose
=
False
):
# Enable "DMA done" interrupt
carrier
.
set_irq_dma_done_mask
(
1
)
carrier
.
enable_dma_done_irq
(
)
#carrier.print_irq_controller_regs()
# 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
)))
...
...
@@ -402,7 +408,7 @@ def make_dma(carrier, start_byte_addr, length_bytes, in_range, verbose=False):
# Incerment dma start address
start_byte_addr
+=
dma_length
# Disable "DMA done" interrupt
carrier
.
set_irq_dma_done_mask
(
0
)
carrier
.
disable_dma_done_irq
(
)
#carrier.print_irq_controller_regs()
return
data
...
...
test/fmcadc100m14b4cha/python/test30.py
View file @
fea8c6d4
...
...
@@ -103,12 +103,12 @@ def acq_channels(fmc, carrier, adc_fs, pause):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
16
)
for
item
in
channels_data
]
return
channels_data
...
...
test/fmcadc100m14b4cha/python/test32.py
View file @
fea8c6d4
...
...
@@ -114,12 +114,12 @@ def acq_channels(fmc, carrier, adc_fs, pause):
return
1
# Retrieve data trough DMA
trig_pos
=
fmc
.
get_trig_pos
()
# Enable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x1
)
# Enable "DMA done" interrupt
carrier
.
enable_dma_done_irq
(
)
# Read ACQ_LENGTH samples after the trigger for all channels
channels_data
=
carrier
.
get_data
((
trig_pos
<<
3
),
ACQ_LENGTH
*
8
)
# Disable "DMA done" i
i
nterrupt
carrier
.
set_irq_en_mask
(
0x0
)
# Disable "DMA done" interrupt
carrier
.
disable_dma_done_irq
(
)
channels_data
=
[
hex2signed
(
item
)
for
item
in
channels_data
]
channels_data
=
[
digital2volt
(
item
,
adc_fs
,
16
)
for
item
in
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