Настройка цифрового ввода/вывода (I/O)


Перед использованием цифрового ввода/вывода (I/O) необходимо настроить каждый порт. Для настройки используется команда pid_ioctl.

pid_ioctl($pid, "set N1[-N2] mode TYPE");

N1 и N2 указывают диапазон нескольких портов. В случае настройки только одного порта, возможно использовать только N1.

Настройки ввода/вывода

Доступны следующие типы i/o:

Тип Описание
in Цифровой ввод
in_pu Цифровой ввод: Pull-Up
in_pd Цифровой ввод: Pull-Down
out - Цифровой вывод
low Цифровой вывод: по умолчанию LOW
high Цифровой вывод: по умолчанию HIGH
out_pp - Цифровой вывод: Push-Pull
low Цифровой вывод: Push-Pull + по умолчанию LOW
high Цифровой вывод: Push-Pull + по умолчанию HIGH
out_od - Цифровой вывод: Open-Drain
low Цифровой вывод: Open-Drain + по умолчанию LOW
high Цифровой вывод: Open-Drain + по умолчанию HIGH

Входной порт, режим Pull-Up

Pull-Up по умолчанию выдает состояние входного порта как HIGH. Для этого установите TYPЕ входного порта на in_pu.

Входной порт, режим Pull-Down

Pull-Down по умолчанию имеет состояние порта в LOW. Для этого установите TYPE входного порта на in_pd.

Выходной порт, режим Push-Pull

Push-Pull - это базовый режим вывода, который делает состояние включёного выходного порта HIGH, а выключенного - LOW. Для этого установите TYPE выходного порта на out_pp.

Выходной порт с Open-Drain

Можно использовать, если вы хотите подключить внешний источник питания к выходному порту. Если при настройке порта для Open-Drain вы не подключаете какой-либо внешний источник питания, то состояние выходного порта будет LOW, когда порт выключен. При включенном порте состояние будет UNKNOWN.
Таким образом, вам нужно вытащить пин с внешним резистором.

Для этого установите TYPE вызодного порта на out_od.

Настройка светоида (LED)

Цифровые I/O порты могут быть настроены на один из типов светоидов (LED). Доступны следующие типы LED:

Тип Описание
led_sts LED-индикатор состояния системы
led_net0_act
/ led_net1_act
Активация индикатора NET(net0 - проводной, net1 - беспроводной) link LED:
- успешно установлена сетевая ссылка: LOW
- в настоящий момент передача или получение данных сети: HIGH
led_net0_link
/ led_net1_link
LED-индикатор сетевой ссылки: подключен к сети - LOW
led_net0_rx
/ led_net1_rx
LED-индикатор сети приема: на момент получения данных - LOW
led_net0_tx
/ led_net1_tx
LED-индикатор сети отправки: на момент отправки - LOW

※ Каждый тип LED не может быть установлен на 2 или более выходных контакта.

Пример настройки цифрового I/O

$pid = pid_open("/mmap/uio0");                // open UIO 0
pid_ioctl($pid, "set 0 mode in");             // set port 0 to input
pid_ioctl($pid, "set 1 mode in_pu");          // set port 1 to input: pull-up
pid_ioctl($pid, "set 2 mode in_pd");          // set port 2 to input: pull-down
pid_ioctl($pid, "set 3-6 mode out");          // set port 3 ~ 6 to output
// set port 7 ~ 9 to output with default high
pid_ioctl($pid, "set 7-9 mode out high");
// set port 10 to output with default low
pid_ioctl($pid, "set 10 mode out low");
// set port 11 to output: push-pull with default high
pid_ioctl($pid, "set 11 mode out_pp high");
// set port 12 to output: open-drain with default low
pid_ioctl($pid, "set 12 mode out_od low");
// set port 13 to network link LED
pid_ioctl($pid, "set 13 mode led_net0_link");
// set port 14 to network receive LED
pid_ioctl($pid, "set 14 mode led_net0_rx");
// set port 15 to network send LED
pid_ioctl($pid, "set 15 mode led_net0_tx");

Настройка блокировки выхода

Вы можете заблокировать или разблокировать управление выходными портами при помощи команды pid_ioctl. Когда выходная блокировка включена, выходные порты не могут быть управляемы до тех пор, пока они не будут разблокировать.

pid_ioctl($pid, "set N1[-N2] lock");    // lock
pid_ioctl($pid, "set N1[-N2] unlock");  // unlock

※ Внимание: Цифровые I/O порты могут могут быть контролируемы по умолчанию. Однако, блокировка вывода автоматически включается портами, которые используются совместно с ST, UART, SPI и I2C (если они используются).