自由模式是将ST启动为一般计数模式的模式。
在自由模式中可使用的pid_ioctl函数的命令如下。
命令 | 下级命令 | 说明 | |
---|---|---|---|
set | mode | free | set mode: free mode |
div | sec | set unit: second | |
ms | set unit: millisecond | ||
us | set unit: microsecond | ||
dir | up | set counter direction: up counter | |
down | set counter direction: down counter | ||
count | [T] | set the starting count value in down counter mode | |
reset | - | reset | |
get | count | get count value | |
state | get current state | ||
start | - | start | |
stop | - | stop |
ST的技术种类可设定为上计数器和下计数器。初始值是上计数器。
说明 | 语法 |
---|---|
up counter | pid_ioctl($pid, "set dir up"); |
down counter | pid_ioctl($pid, "set dir down"); |
在自由模式中设定为下计数器时,设定计数器的初始值。
计数器的设定方法如下。
命令 | 语法 |
---|---|
set count | pid_ioctl($pid, "set count T"); |
如果上计数时设定T,相应值不会被反映。即,上计数时定时初始值一向为0。下计数种可设定的T的范围如下。
区分 | T设定范围 |
---|---|
Microsecond | 0 ~ (263 - 1) |
milisecond | 0 ~ (263 - 1) / 1,000 |
second | 0 ~ (263 - 1) / 1,000,000 |
"get count"命令是读取ST的当前计算值的命令。
命令 | 语法 |
---|---|
get count | pid_ioctl($pid, "get count"); |
在自由模式中可将ST的值可读取pid_ioctl函数的"get count"命令。
$tick = pid_ioctl($pid, "get count");
此例是设定为上计数后每1秒来读取ST值来输出。
$pid = pid_open("/mmap/st0"); // open ST 0
pid_ioctl($pid, "set mode free"); // set mode: free
pid_ioctl($pid, "set div sec"); // set unit: second
pid_ioctl($pid, "set dir up"); // set direction: up counter
pid_ioctl($pid, "start"); // start ST
for($i=0; $i<10; $i++)
{
$value = pid_ioctl($pid, "get count"); // read the count value
echo "$value\r\n"; // print the count value
sleep(1);
}
pid_close($pid);
此例是将ST设定为下计数后设定初始值为10秒,每1秒读取ST值来输出。
$pid = pid_open("/mmap/st0"); // open ST 0
pid_ioctl($pid, "set mode free"); // set mode: free
pid_ioctl($pid, "set div sec"); // set unit: second
pid_ioctl($pid, "set dir down"); // set direction: down counter
pid_ioctl($pid, "set count 10"); // set count value: 10
pid_ioctl($pid, "start"); // start ST
for($i = 0; $i < 10; $i++)
{
$value = pid_ioctl($pid, "get count"); // read the count value
echo "$value\r\n"; // print the count value
sleep(1);
}
pid_close($pid);