forked from M-Labs/artiq
test_spi: drain errors and be more strict on where we expect errors
This commit is contained in:
parent
579168f06f
commit
f68c24094f
|
@ -2,6 +2,10 @@ from artiq.experiment import *
|
||||||
from artiq.test.hardware_testbench import ExperimentCase
|
from artiq.test.hardware_testbench import ExperimentCase
|
||||||
|
|
||||||
|
|
||||||
|
class WrongError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Collision(EnvExperiment):
|
class Collision(EnvExperiment):
|
||||||
def build(self):
|
def build(self):
|
||||||
self.setattr_device("core")
|
self.setattr_device("core")
|
||||||
|
@ -11,7 +15,10 @@ class Collision(EnvExperiment):
|
||||||
def run(self):
|
def run(self):
|
||||||
self.core.break_realtime()
|
self.core.break_realtime()
|
||||||
t = now_mu()
|
t = now_mu()
|
||||||
self.spi0.set_config_mu()
|
try:
|
||||||
|
self.spi0.set_config_mu()
|
||||||
|
except RTIOBusy:
|
||||||
|
raise WrongError()
|
||||||
at_mu(t)
|
at_mu(t)
|
||||||
self.spi0.set_config_mu()
|
self.spi0.set_config_mu()
|
||||||
|
|
||||||
|
@ -24,18 +31,49 @@ class Busy(EnvExperiment):
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
def run(self):
|
def run(self):
|
||||||
self.core.break_realtime()
|
try:
|
||||||
t = now_mu()
|
self.core.break_realtime()
|
||||||
self.spi0.set_config_mu()
|
self.spi0.set_config_mu()
|
||||||
at_mu(t + self.spi0.ref_period_mu)
|
t = now_mu()
|
||||||
self.spi0.set_config_mu() # causes the error
|
self.spi0.set_config_mu()
|
||||||
self.led.on()
|
at_mu(t + self.spi0.ref_period_mu)
|
||||||
self.led.sync() # registers the error
|
self.spi0.set_config_mu() # causes the error
|
||||||
self.core.break_realtime()
|
self.led.on()
|
||||||
|
self.led.sync() # registers the error
|
||||||
|
self.core.break_realtime()
|
||||||
|
except RTIOBusy:
|
||||||
|
raise WrongError() # we don't expect RTIOBusy so far
|
||||||
self.spi0.set_config_mu() # raises the error
|
self.spi0.set_config_mu() # raises the error
|
||||||
|
|
||||||
|
|
||||||
|
class DrainErrors(EnvExperiment):
|
||||||
|
def build(self):
|
||||||
|
self.setattr_device("core")
|
||||||
|
self.setattr_device("spi0")
|
||||||
|
self.setattr_device("led")
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def run(self):
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
self.core.break_realtime()
|
||||||
|
delay(100*us)
|
||||||
|
self.spi0.set_config_mu()
|
||||||
|
self.led.on()
|
||||||
|
self.led.sync()
|
||||||
|
self.core.break_realtime()
|
||||||
|
self.spi0.set_config_mu()
|
||||||
|
self.led.off()
|
||||||
|
return
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SPITest(ExperimentCase):
|
class SPITest(ExperimentCase):
|
||||||
|
def tearDown(self):
|
||||||
|
self.execute(DrainErrors)
|
||||||
|
ExperimentCase.tearDown(self)
|
||||||
|
|
||||||
def test_collision(self):
|
def test_collision(self):
|
||||||
with self.assertRaises(RTIOCollision):
|
with self.assertRaises(RTIOCollision):
|
||||||
self.execute(Collision)
|
self.execute(Collision)
|
||||||
|
|
Loading…
Reference in New Issue