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