使用数字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 |
需要把输入端口的闲置状态转为HIGH时使用。为了将输入端口上拉,将数字输入的TYPE设定为in_pu。
需要把输入端口的闲置状态转为LOW时使用。为了将输入端口下拉,将数字输入的TYPE设定为in_pd。
输出端口推拉是当输出端口状态ON时输出HIGH,当OFF时输出LOW的最基本的输出模式。 为了按输出端口推拉方式使用,将数字输出的TYPE设定为out_pp。
在输出端口的外部想连接供电源时使用此方式。如使用此方式时,在外部不连接电源供应源,当PHPoC的输出为OFF时,端口外部输出会为LOW,但当其输出为ON时外部输出会为无法预知(UNKNOWN)状态。 因此需要利用外部电阻,对相应端口进行pull up。
为了按此方式使用需要将输出端口的TYPE设定为out_od。
数字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上端口设定。
$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函数可限制或允许数字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端口其输出端口将自动被设定。