토글출력모드


개요

이 모드는 다양한 지속시간을 갖는 하나 또는 여러개의 직사각형 펄스를 출력하는데 사용합니다. 이 모드에서 ST핀은 미리 정의된 시간 간격에 따라 출력이 토글됩니다.

ST의 출력파형은 다음에 따라 달라집니다:

다음은 ST 토글출력모드의 블록다이어그램 입니다.

st_set_toggle 01

명령어

명령어 하위 명령어 설명
set mode output toggle 모드 설정: 토글출력모드
div sec 단위 설정: 초
ms 단위 설정: 밀리 초
us 단위 설정: 마이크로 초
output od 오픈 드레인(Open-Drain)
pp 푸쉬 풀(Push-Pull)
low LOW 출력
high HIGH 출력
dev uio0 #pin 출력 핀 설정: uio0의 #pin
invert 0 정상(비 반전)출력
1 반전 출력
count [T1] ... [T8] 출력 타이밍 설정
delay [D] 출력 지연시간 설정
repc [N] 출력 횟수 설정
trigger from st# 트리거 대상 설정: st0 ~ st7
php 트리거 대상 설정: 없음
reset - 초기화
get state 상태 읽기
repc 남은 출력 횟수 읽기
start - 시작
stop - 정지

지연시간 설정

토글출력모드에서는 출력 전 지연시간을 줄 수 있습니다. 지연시간 설정 단위는 "set div"명령에 의한 단위가 사용됩니다. 지연시간 설정 방법은 다음과 같습니다.

명령어 문법
set delay pid_ioctl($pid, "set delay D");

반복횟수 설정

토글출력모드에서 이 명령어는 토글 신호의 반복횟수를 설정합니다.

명령어 문법 N의 범위
set repc pid_ioctl($pid, "set repc N"); 0 ~ 10억(1,000,000,000)

반복횟수의 기본값은 0입니다. 이 값이 0이면 반복횟수는 최대 반복횟수(10억)로 설정됩니다.
(카운트 값 설정의 예제 파형 참조)

카운트 값 설정

카운트 값 설정은 출력 타이밍을 조정하기 위해 사용합니다. 토글출력모드에서는 카운트 값을 최소 1개에서 최대 8개까지 설정할 수 있습니다. 설정 방법은 다음과 같습니다.

명령어 문법
set count pid_ioctl($pid, "set count T1 T2 … T8");

토글출력모드에서 가능한 카운트 값의 범위는 다음과 같습니다.

단위 설정 가능 범위(10㎲ ~ 30분)
마이크로 초 10 ~ 1,800,000,000
밀리 초 1 ~ 1,800,000
1 ~ 1,800

이 명령은 타이머 시작 전에 설정되어야 합니다. 그렇지 않은경우 에러가 발생합니다. 토글출력모드에서 카운트 값을 2개 이상 설정하면 이 값들은 출력 시점마다 순서대로 사용됩니다. 만약 반복횟수가 설정 한 카운트 값의 수 보다 많으면 다시 첫 번째 값부터 순서대로 사용됩니다. 아래 그림은 다음 조건하에서의 출력 파형을 보여줍니다.

st_set_toggle 04

출력 파형은 타이머가 시작되는 시점의 ST 출력핀의 상태에 따라 달라집니다. 다음 예는 ST 출력핀의 상태가 다를 때의 파형을 보여줍니다. 반복 횟수는 3회이고 카운트 값은 각각 T1, T2 그리고 T3입니다.

st_set_toggle 02

st_set_toggle 03

ST 출력핀의 상태는:

두개의 연속적인 토글 출력 사이의 지속시간(카운트 값)은 "set count"명령으로 설정합니다.

출력핀 설정

명령어 문법
set output dev D N pid_ioctl($pid, "set output dev uio0 0");

ST의 출력모드를 사용하기 전에 이 명령을 이용하여 출력핀을 지정해야 합니다. 디바이스 이름(예: uio0)과 핀 번호를 D와 N에 각각 지정합니다.

출력상태 설정 [low/high]

이 명령은 ST 출력핀에 즉시 LOW 또는 HIGH를 출력합니다.

명령어 문법 설명
set output low pid_ioctl($pid, "set output low"); ST 출력핀에 LOW출력
set output high pid_ioctl($pid, "set output high"); ST 출력핀에 HIGH출력

반전출력이 활성화되어 있으면 이 명령에 의한 출력 또한 반전되어 출력됩니다.

출력타입 설정 [od/pp]

이 명령은 ST 출력핀의 출력타입을 설정합니다.

명령어 문법 설명
set output pp pid_ioctl($pid, "set output pp"); 출력타입을 푸쉬-풀로 설정
set output od pid_ioctl($pid, "set output od"); 출력타입을 오픈-드레인으로 설정

출력타입의 기본값은 푸쉬-풀입니다.

반전출력 설정 [invert 0/1]

이 명령은 반전출력의 활성화/비활성화를 설정합니다.

명령어 문법 설명
set output invert 0 pid_ioctl($pid, "set output invert 0"); 반전출력 비활성화
set output invert 1 pid_ioctl($pid, "set output invert 1"); 반전출력 활성화

반전출력이 활성화되어 있으면:

반전출력 활성상태가 바뀌면(반전출력 활성화 또는 비활성화) ST 출력핀의 상태는 즉시 토글됩니다.

반전출력의 기본상태는 비활성화상태 입니다.

다음은 반전출력모드의 활성화/비활성화에 따른 파형의 차이를 보여줍니다. 반복 횟수는 3회이고 카운트 값은 각각 T1, T2 그리고 T3입니다. 타이머 시작 전 "set output high"명령이 사용되었습니다.

st_set_toggle_07

위 그림에서 보는것과 같이 반전출력이 활성화되면 "set output high"명령에 의한 출력이 LOW가 됩니다.

트리거 설정

트리거는 ST를 출력모드로 사용할 때 시작 시점을 동기화 하기 위해 사용합니다. 이 때 ST의 시작 시점은 트리거 대상과 동기화 되며 트리거 대상은 또 다른 ST만 설정이 가능합니다. ST의 트리거 설정 방법은 다음과 같습니다.

구분 문법
ST(st0/1…) pid_ioctl($pid, "set trigger from st0");
php pid_ioctl($pid, "set trigger from php");

ST의 트리거 설정 기본 값은 "대상 없음(php)" 입니다.

남은 출력 횟수 읽기

"get repc"명령어는 ST의 남은 출력 횟수를 확인하는 명령어 입니다.

구분 문법
남은 출력 횟수 pid_ioctl($pid, "get repc");

토글출력모드 사용 예

토글출력모드는 ST의 출력신호를 반전시키는 모드 입니다.

토글출력모드 사용

<?php
$pid = pid_open("/mmap/st0");               // 0번 ST 열기
pid_ioctl($pid, "set div sec");             // 단위 설정: 초
pid_ioctl($pid, "set mode output toggle");  // 토글출력모드 설정
pid_ioctl($pid, "set output dev uio0 0");   // 출력 핀 설정: uio0의 0번
pid_ioctl($pid, "set repc 1");              // 출력 횟수 설정: 1회
pid_ioctl($pid, "set count 1");             // T1 설정: 1초
pid_ioctl($pid, "start");                   // ST 시작
while(pid_ioctl($pid, "get state"));
pid_close($pid);
?>

toggle모드에서의 "set count"는 ST의 시작시점부터 토글신호를 내보내는 시점까지의 시간을 의미합니다. 위 예제를 실행했을 때 ST의 출력 결과는 다음과 같습니다.

st_set_toggle 05

반복적 토글출력모드

<?php
$pid = pid_open("/mmap/st0");               // 0번 ST 열기
pid_ioctl($pid, "set div sec");             // 단위 설정: 초
pid_ioctl($pid, "set mode output toggle");  // 토글출력모드 설정
pid_ioctl($pid, "set output dev uio0 0");   // 출력 핀 설정: uio0의 0번 핀
pid_ioctl($pid, "set repc 3");              // 출력 횟수 설정: 3
pid_ioctl($pid, "set count 1 2 1");         // 카운트 값 설정: 1, 2, 1
pid_ioctl($pid, "start");                   // ST 시작
while(pid_ioctl($pid, "get state"));
pid_close($pid);
?>

위 예제에서는"set repc"명령어로 토글 출력 횟수를 3회로 설정하고 토글 출력 타이밍을 위해 "set count"로 T1, T2 및 T3를 각각 1, 2 그리고 1초로 설정했습니다. 위 예제를 실행했을 때 ST출력 결과는 다음과 같습니다.

st_set_toggle 06