设定数字 I/O


使用数字I/O前,必须先设定要按什么用途使用。为了设定使用pid_ioctl函数。

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

N1与N2显示要设定的数字I/O端口的范围。设定单一端口的情况可以省略N2。

设定输入/输出 设定

在types上课设定的数字I/O的种类如下。

类型 说明
in Digital Input
in_pu Digital Input: Pull-Up
in_pd Digital Input: Pull-Down
out - Digital Output
low Digital Output: default LOW
high Digital Output: default HIGH
out_pp - Digital Output: Push-Pull
low Digital Output: Push-Pull + default LOW
high Digital Output: Push-Pull + default HIGH
out_od - Digital Output: Open-Drain
low Digital Output: Open-Drain + default LOW
high Digital Output: Open-Drain + default HIGH

Input Port Pull-Up

需要把输入端口的闲置状态转为HIGH时使用。为了将输入端口上拉,将数字输入的TYPE设定为in_pu。

Input Port Pull-Down

需要把输入端口的闲置状态转为LOW时使用。为了将输入端口下拉,将数字输入的TYPE设定为in_pd。

Output Port Push-Pull

输出端口推拉是当输出端口状态ON时输出HIGH,当OFF时输出LOW的最基本的输出模式。 为了按输出端口推拉方式使用,将数字输出的TYPE设定为out_pp。

Output Port Open-Drain

在输出端口的外部想连接供电源时使用此方式。如使用此方式时,在外部不连接电源供应源,当PHPoC的输出为OFF时,端口外部输出会为LOW,但当其输出为ON时外部输出会为无法预知(UNKNOWN)状态。 因此需要利用外部电阻,对相应端口进行pull up。

为了按此方式使用需要将输出端口的TYPE设定为out_od。

LED设定

数字I/O可以通过LED设定。 可以在TYPE设定能的LED种类如下。

类型 说明
led_sts System Status LED
led_net0_act
/ led_net1_act
Activation of NET(net0 - wired, net1 - wireless) link LED:
- successfully established network link: LOW
- at the moment sending or receiving network data: HIGH
led_net0_link
/ led_net1_link
Network Link LED: connected to network - LOW
led_net0_rx
/ led_net1_rx
Network Receive LED: at the moment receiving data - LOW
led_net0_tx
/ led_net1_tx
Network Send LED: at the moment sending data - LOW

※ 各个LED type不能同时在两个以上的输出针ZHENJI上端口设定。

数字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");

数字I/O输出限制设定

通过pid_ioctl函数可限制或允许数字I/O的输出。当输出限制被设定时,在该设定解除前,相应端口的输出命令将不会被执行。

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

※ 注意: 数字I/O基本上是允许输出的状态。但使用了ST, UART, SPI和I2C等一起使用的设备被使用或按LED形态设定的I/O端口其输出端口将自动被设定。