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

Управление линией ввода-вывода с предварительным выбором работает так: сначала вы выбираете нужную линию свойством io.num. Затем можно читать и устанавливать состояние этой линии свойством io.state. Выходной буфер линии включается и отключается свойством io.enabled (см. Управление выходными буферами). Пример кода:

low_high x = LOW;													// Declare a variable of type low_high
io.num = PL_IO_NUM_5;											// Select line #5
io.enabled = YES;      											// Enable this line
io.state = HIGH;       											// Set this line to HIGH
sys.debugprintline("I/O Line 5 State: " + io.state);	// Print the state of the line
io.state = LOW;													// Now set this line to LOW
sys.debugprintline("I/O Line 5 State: " + io.state);	// Print the state of the line
io.enabled = NO;													// Configure the line as input now
x = io.state;														// Read the state of the line
sys.debugprintline("I/O Line 5 State: " + io.state);	// Print the state of the line

Результат будет таким:

I/O Line 5 State: 1I/O Line 5 State: 0I/O Line 5 State: 1

То же самое можно делать с портами - для этого служат свойства io.portnum, io.portstate и io.portenabled:

io.portnum = PL_IO_PORT_NUM_2;					// Select port #2
io.portenabled = 0xFF;								// This means that every port line's output buffer
															// will be enabled (&hFF=&b11111111)
io.portstate = 0x55;									// Output &h55: port lines 0, 2, 4, and 6 will be at HIGH,
															// the four remaining lines will be at LOW (&h55=&b01010101)
x = io.portstate;										// Read the port state
sys.debugprintline("I/O Port 2: 0x%X", x);	// Print the port state
x = io.portstate;										// Read the port state
io.portstate = 0;										// Output another value
sys.debugprintline("I/O Port 2: 0x%X", x);	// Print the port state
x = io.portstate;										// Read the port state
sys.debugprintline("I/O Port 2: 0x%X", x);	// Print the port state
io.portenabled = 0;									// Configure the port for input
x = io.portstate;										// Read the port state
sys.debugprintline("I/O Port 2: 0x%X", x);	// Print the port state

Результат будет таким:

I/O Port 2: 0x55I/O Port 2: 0x55I/O Port 2: 0x0I/O Port 2: 0xff

Такой способ управления линиями и портами устройства удобен, когда вы собираетесь многократно работать с одной и той же линией или портом. Производительность выше, потому что линия или порт выбирается один раз, а затем обращаться к ней можно сколько угодно раз.

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

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

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