프리모드는 ST를 일반적인 카운터로 동작시키는 모드 입니다.
프리모드에서 사용 가능한 pid_ioctl함수의 명령어는 다음과 같습니다.
명령어 | 하위 명령어 | 설명 | |
---|---|---|---|
set | mode | free | 모드 설정: 프리모드 |
div | sec | 단위 설정: 초 | |
ms | 단위 설정: 밀리 초 | ||
us | 단위 설정: 마이크로 초 | ||
dir | up | 업카운터로 설정 | |
down | 다운카운터로 설정 | ||
count | [T] | 다운카운터 초기 값을 [T]로 설정 | |
reset | - | 초기화 | |
get | count | 카운트 값 읽기 | |
state | 상태 읽기 | ||
start | - | 시작 | |
stop | - | 정지 |
ST의 카운터 종류는 업카운터 또는 다운카운터로 설정할 수 있습니다.
초기 값은 업카운터 입니다.
구분 | 문법 |
---|---|
업카운터(UP) | pid_ioctl($pid, "set dir up"); |
다운카운터(DOWN) | pid_ioctl($pid, "set dir down"); |
프리모드에서는 다운카운터로 설정했을 때 카운터의 초기 값을 설정합니다.
카운트 설정 방법은 다음과 같습니다.
구분 | 문법 |
---|---|
프리모드 | pid_ioctl($pid, "set count T"); |
만약 업카운터일 때 T를 설정하면 해당 값은 반영되지 않습니다. 즉, 업카운터일 때 타이머 초기 값은 항상 0입니다. 다운카운터에서 설정 가능한 T의 범위는 다음과 같습니다.
구분 | T 설정 범위 |
---|---|
마이크로 초 단위 | 0 ~ (263 - 1) |
밀리 초 단위 | 0 ~ (263 - 1) / 1,000 |
초 단위 | 0 ~ (263 - 1) / 1,000,000 |
"get count"명령어는 ST의 현재 카운트 값을 읽는 명령어 입니다.
구분 | 문법 |
---|---|
프리모드 | pid_ioctl($pid, "get count"); |
프리모드에서의 ST값은 pid_ioctl함수의 "get count"명령으로 읽을 수 있습니다.
<?php
$tick = pid_ioctl($pid, "get count");
?>
이 예제는 ST를 업카운터로 설정하고 약 1초마다 ST값을 읽어와 출력합니다.
<?php
$pid = pid_open("/mmap/st0"); // 0번 ST 열기
pid_ioctl($pid, "set mode free"); // 프리모드 설정
pid_ioctl($pid, "set div sec"); // 단위 설정: 초
pid_ioctl($pid, "set dir up"); // 업카운터 설정
pid_ioctl($pid, "start"); // ST 시작
for($i=0; $i<10; $i++)
{
$value = pid_ioctl($pid, "get count"); // 카운트 값 읽기
echo "$value\r\n"; // 카운트 값 출력
sleep(1);
}
pid_close($pid);
?>
이 예제는 ST를 다운카운터로 설정하고 초기 값을 10초로 하여 약 1초마다 ST값을 읽어와 출력합니다.
<?php
$pid = pid_open("/mmap/st0"); // 0번 ST열기
pid_ioctl($pid, "set mode free"); // 프리모드 설정
pid_ioctl($pid, "set div sec"); // 단위 설정: 초
pid_ioctl($pid, "set dir down"); // 다운카운터 설정
pid_ioctl($pid, "set count 10"); // 카운트 값을 10으로 초기화
pid_ioctl($pid, "start"); // ST 시작
for($i = 0; $i < 10; $i++)
{
$value = pid_ioctl($pid, "get count"); // 카운트 값 읽기
echo "$value\r\n"; // 카운트 값 출력
sleep(1);
}
pid_close($pid);
?>