프리모드


프리모드는 ST를 일반적인 카운터로 동작시키는 모드 입니다.

st_set_free

프리모드에서 사용 가능한 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);
?>