Управление линиями и портами без предварительного выбора

Управление линиями ввода-вывода без предварительного выбора удобно, когда нужно работать сразу с несколькими линиями. Для этого служат методы 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.

Исходный материал Tibbo обновлён 16 марта 2023Оригинал на docs.tibbo.com · Сообщить об ошибке