Управление линиями и портами без предварительного выбора
Управление линиями ввода-вывода без предварительного выбора удобно, когда нужно работать сразу с несколькими линиями. Для этого служат методы io.lineset, io.lineget и io.invert. Номер линии передаётся в них напрямую, параметром, поэтому предварительно выбирать линию свойством io.num не нужно. Более того, выполнение этих методов не меняет значение io.num.
Вот пример последовательного вывода тактового сигнала и данных. Линия тактирования - PL_IO_NUM_0, линия данных - PL_IO_NUM_1. Обратите внимание на реализацию: линия тактирования выбирается один раз, а затем переводится в LOW и HIGH свойством io.state. Линия данных при этом обновляется методом io.lineset. Переменная x якобы содержит бит данных для вывода (откуда x берёт данные, не показано).
byte x = 0;
io.num = PL_IO_NUM_0; // Pre-select the clock line
for (byte i = 0; i < 8; i++) { // Obtain the value of the next bit, put it into x (not shown)
io.state = LOW; // Set the clock line LOW (the clock line has already been preselected)
io.lineset(PL_IO_NUM_1, x); // Output the next data bit
io.state = HIGH; // Set the clock line HIGH (the clock line has already been preselected)
}
Прямое управление портами выполняется методами io.portset и io.portget.
Имена линий и портов ввода-вывода определяют перечисления pl_io_num и pl_io_port_num соответственно.
Ряд линий ввода-вывода может быть общим с входами и выходами блоков специальных функций (последовательных портов и т.д.). Пока блок специальной функции включён, линиями ввода-вывода, которые он использует, нельзя (не следует) управлять через объект io.