add libs
This commit is contained in:
49
lib_gpio/tests/gpio_events_checker.py
Normal file
49
lib_gpio/tests/gpio_events_checker.py
Normal file
@@ -0,0 +1,49 @@
|
||||
# Copyright 2015-2021 XMOS LIMITED.
|
||||
# This Software is subject to the terms of the XMOS Public Licence: Version 1.
|
||||
import xmostest
|
||||
|
||||
class GPIOEventsChecker(xmostest.SimThread):
|
||||
"""
|
||||
This simulator thread will write to pins to allow xCORE to event.
|
||||
"""
|
||||
|
||||
def __init__(self, test_port, expected_test_port_data, num_clients,
|
||||
trigger_port):
|
||||
self._test_port = test_port
|
||||
self._expected_test_port_data = expected_test_port_data
|
||||
self._num_clients = num_clients
|
||||
self._trigger_port = trigger_port
|
||||
|
||||
print("Checking events on port %s with %d clients" % (self._test_port,
|
||||
self._num_clients))
|
||||
print("Using port %s as trigger" % (self._trigger_port))
|
||||
|
||||
def drive_port(self, xsi):
|
||||
# Check the xCORE is not trying to drive the port
|
||||
if xsi.is_port_driving(self._test_port):
|
||||
print("ERROR: xCORE driving port %s which expected to be input only"
|
||||
% (self._test_port))
|
||||
# Drive the test port
|
||||
xsi.drive_port_pins(self._test_port, self._expected_test_port_data)
|
||||
print("Checker driving port")
|
||||
# Flip bits of expected data for second part of test
|
||||
self._expected_test_port_data = ~self._expected_test_port_data
|
||||
# Delay driving new data to test port until num_client bits of
|
||||
# trigger_port go high
|
||||
expected_trigger_data = 0
|
||||
for i in range(0, self._num_clients):
|
||||
expected_trigger_data = (expected_trigger_data << 1) + 1
|
||||
print("Checker expecting 0x%x as trigger data" % (expected_trigger_data))
|
||||
while True:
|
||||
self.wait_for_port_pins_change([self._trigger_port])
|
||||
trigger_data = xsi.sample_port_pins(self._trigger_port)
|
||||
if trigger_data == expected_trigger_data:
|
||||
print("Checker received correct trigger")
|
||||
break
|
||||
# Drive the test port
|
||||
xsi.drive_port_pins(self._test_port, self._expected_test_port_data)
|
||||
print("Checker driving port")
|
||||
|
||||
def run(self):
|
||||
self.drive_port(self.xsi)
|
||||
print("Checker complete")
|
||||
Reference in New Issue
Block a user