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

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

io.num = PL_IO_NUM_1;		// Select the line
io.enabled = NO;				// Disable the output driver (the line will function as an input now)
while (io.state == HIGH);	// Wait until the line is pulled LOW externally

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

io.portnum = PL_IO_PORT_NUM_1;
io.portenabled = 0x0F;				// Configure the lower four lines as outputs;
											// the rest will be used as inputs

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

Имена линий и портов ввода-вывода определяют перечисления pl_io_num и pl_io_port_num соответственно.

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