1.XMOS Timer 소개Timer는 XMOS에서 제공하는 자원으로 여타 CPU에서 제공하는 Timer 또는 Tick과 같이 일정 시간 마다 1씩 증가하는 일종의 카운터 입니다. 여타 CPU의 Timer와 마찬가지고 이것을 사용하여 프로그램 동작 지연, 일정 시간 간격으로 동작 등과 같은 일을 할 수 있습니다.
2. XMOS Timer 특징(1) 10ns 단위의 구분이 가능합니다.
(2) XC에서 Timer에 접근하는 문법을 제공합니다.
(3) XMOS 한 Core 당 10개의 Timer를 제공합니다.
3. XMOS Timer 사용(1) Timer 선언XC에서는 Timer를 사용하기 위해 선언을 해야 합니다. 선언을 하는 방법은 변수 선언과 유사하며 선언 방법은 다음과 같습니다.
timer t;
① ②
① 식별자 t가 Timer를 사용하기 위한 것임을 알려줍니다.
② Timer에 접근할 때는 식별자 t를 사용할 것임을 알려줍니다.
(2) Timer 값 읽어 오기Timer의 동작은 Timer 값을 얻어오는 것 하나 뿐입니다.
- Timer 값 읽기(Timer 식별자) :> 변수
[예제]다음은 Timer로부터 값을 읽어오는 예제입니다. 실행하면 현재 Timer의 값을 읽어 화면에 출력합니다.
#include <print.h>#include <platform.h>int main(void) { timer tTimer; unsigned iTimeVal; tTimer :> iTimeVal; printstr("Timer Value ="); printint(iTimeVal); return 0;}(3) 시간 대기XC는 Timer를 이용해 일정 시간 동안 프로그램 대기를 할 수 있는 문법을 제공합니다. 우선 이해를 위한 예제는 다음과 같습니다.
[예제]다음은 프로그램 동작 중 잠시 1초간 동작을 멈추는 예제이다.
#include <print.h>
#include <platform.h>
int main(void) {
timer tTimer;
unsigned iTimeVal;
printstrln("Program Start.\n");
printstrln("1 sec delay\n");
tTimer :> iTimeVal;
tTimer when timerafter(iTimeVal+100000000) :> iTimeVal;
printstrln("Done.\n");
return 0;
}
위 예제에서 1초간 대기를 하는 부분은 다음과 같습니다.
tTimer when timerafter(iTimeVal+100000000) :> iTimeVal;
이 문법은 Timer로부터 값을 가져오는 부분에 조건을 붙힌 경우로 코드 의미 그대로 tTimer 값이 (iTimeVal+100000000)이상일 때 iTimeVal에 tTimer 값을 넣는다는 의미입니다. 그리고 이 조건이 맞지 않을 경우에는 프로그램은 계속 대기하게 됩니다.
위 예제의 동작을 정리하면 다음과 같습니다.
① iTimeVal에 tTimer의 타이머 값을 가져옵니다.
② iTimeVal의 값을 기준으로 즉 n 시점을 시작으로 100000000 만큼의 시간이 지날 때까지 프로그램을 대기한 후 iTimeVal에 tTimer의 타이머 값을 가져오도록 합니다.
③ 결과적으로 ①시점에서 100000000 만큼의 시간이 지난 ③ 시점에서 다시 프로그램이 동작합니다. (이 때 Timer 값은 10ns에 1씩 증가하므로 100000000은 1000000 us, 1000ms, 1s이므로 즉 1초가 된다.)
최근 덧글