Управление выходными буферами

С точки зрения управления линиями и портами ввода-вывода существует два вида устройств Tibbo и соответствующих платформ: без управления выходным буфером и с ним. Эту информацию можно найти в документации по платформе вашего устройства (например, для EM1000 она находится здесь).

В устройствах без управления выходным буфером выходной драйвер каждой линии ввода-вывода всегда включён. Чтобы использовать такую линию как вход, установите её в HIGH. После этого можно читать состояние линии. Если линия не подключена или внешний сигнал не тянет её в LOW, вы прочитаете HIGH. Если внешний сигнал тянет линию в LOW, вы прочитаете LOW. Внешнее подтягивание линии в LOW при выходном драйвере в состоянии HIGH линию не повредит.

В следующем примере кода мы ждём, пока линия №1 перейдёт в LOW:

io.num=PL_IO_NUM_1 'select the line
io.state=HIGH 'set it to HIGH so we can use it as an input
While io.state=HIGH 'wait until the line is pulled LOW externally
Wend

В устройствах с явным управлением выходным буфером нужно определить, чем будет линия - выходом (io.enabled = 1 - YES) или входом (io.enabled = 0 - NO). Попытка прочитать линию в режиме выхода просто вернёт состояние её собственного выходного драйвера. Внешнее воздействие на линию, работающую как выход, может необратимо повредить устройство. Для таких устройств приведённый выше код нужно изменить так:

io.num=PL_IO_NUM_1 'select the line
io.enabled=NO 'disable the output driver (line will function as an input now)
While io.state=HIGH 'wait until the line is pulled LOW externally
Wend

Порты состоят из отдельных линий, поэтому всё сказанное относится и к портам. Важно понимать, что каждая линия порта настраивается как вход или выход независимо. Следовательно, порт не обязан быть «только выходами» или «только входами». Вот пример, в котором нижняя половина линий порта настроена на выход, а остальные линии работают как входы:

'This is an example for devices with explicit output buffer control
io.portnum=PL_IO_PORT_1
io.portenabled= &h0F 'configure lower 4 lines as outputs, the rest will be used as inputs

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

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

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