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

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

Dim f As Byte
Dim x As low_high
io.num=PL_IO_NUM_0 'pre-select the clock line
For f=0 To 7
   ... '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)
Next f

Прямое управление портами выполняется методами io.portset и io.portget.

Обратите внимание: названия линий и портов ввода-вывода зависят от платформы и определяются перечислениями pl_io_num и pl_io_port_num соответственно. Объявления этих перечислений приведены в документации по платформе вашего устройства (например, для EM1000 она находится здесь).

Во многих устройствах часть линий ввода-вывода совмещена с входами и выходами специальных функциональных блоков (последовательных портов и т.п.). Пока такой блок включён, используемые им линии нельзя (не следует) изменять через объект io.

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