Управление линиями и портами с предварительным выбором
Управление линией ввода-вывода с предварительным выбором работает так: сначала вы выбираете нужную линию свойством io.num. Затем можно читать и устанавливать состояние этой линии свойством io.state. Выходной буфер линии включается и отключается свойством io.enabled (см. Управление выходными буферами). Пример кода:
low_high x = LOW; // Declare a variable of type low_high
io.num = PL_IO_NUM_5; // Select line #5
io.enabled = YES; // Enable this line
io.state = HIGH; // Set this line to HIGH
sys.debugprintline("I/O Line 5 State: " + io.state); // Print the state of the line
io.state = LOW; // Now set this line to LOW
sys.debugprintline("I/O Line 5 State: " + io.state); // Print the state of the line
io.enabled = NO; // Configure the line as input now
x = io.state; // Read the state of the line
sys.debugprintline("I/O Line 5 State: " + io.state); // Print the state of the line
Результат будет таким:
I/O Line 5 State: 1I/O Line 5 State: 0I/O Line 5 State: 1
То же самое можно делать с портами - для этого служат свойства io.portnum, io.portstate и io.portenabled:
io.portnum = PL_IO_PORT_NUM_2; // Select port #2
io.portenabled = 0xFF; // This means that every port line's output buffer
// will be enabled (&hFF=&b11111111)
io.portstate = 0x55; // Output &h55: port lines 0, 2, 4, and 6 will be at HIGH,
// the four remaining lines will be at LOW (&h55=&b01010101)
x = io.portstate; // Read the port state
sys.debugprintline("I/O Port 2: 0x%X", x); // Print the port state
x = io.portstate; // Read the port state
io.portstate = 0; // Output another value
sys.debugprintline("I/O Port 2: 0x%X", x); // Print the port state
x = io.portstate; // Read the port state
sys.debugprintline("I/O Port 2: 0x%X", x); // Print the port state
io.portenabled = 0; // Configure the port for input
x = io.portstate; // Read the port state
sys.debugprintline("I/O Port 2: 0x%X", x); // Print the port state
Результат будет таким:
I/O Port 2: 0x55I/O Port 2: 0x55I/O Port 2: 0x0I/O Port 2: 0xff
Такой способ управления линиями и портами устройства удобен, когда вы собираетесь многократно работать с одной и той же линией или портом. Производительность выше, потому что линия или порт выбирается один раз, а затем обращаться к ней можно сколько угодно раз.
Имена линий и портов ввода-вывода определяют перечисления pl_io_num и pl_io_port_num соответственно.
Ряд линий ввода-вывода может быть общим с входами и выходами блоков специальных функций (последовательных портов и т.д.). Пока блок специальной функции включён, линиями ввода-вывода, которые он использует, нельзя (не следует) управлять через объект io.