50 lines
2.1 KiB
Python
50 lines
2.1 KiB
Python
# 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")
|