이 블로그 검색

2011년 12월 19일 월요일

Core Timer

Core timer는 주기적인 interrupts를 발생할 수 있는 programmable 32-bit interval
timer이다. 다른 peripherals와 다르게 core timer는 Blackfin core 안에 위치하며 core
clock 즉, CCLK로 동작한다.

다음은 Core Timer의 특징들을 요약 정리한 것이다.
1) 8-bit prescaler를 가진 32-bit timer.
2) CCLK로 동작.
3) 전용 high-priority interrupt channel.
4) Single-shot 또는 연속적인 동작.


다음은 Core timer에 대한 block diagram이다.

















[그림 4-1] Core Timer Block Diagram

Core timer는 임의의 chip pins와 직접적으로 상호작용하지 않는다.
우선, timer가 enabling되기 전에 TCOUNT register를 초기화해야 한다. 물론, 직접
TCOUNT register에 작성할 수도 있지만, TPERIOD register를 통하여 작성될 수도 있다.
[그림 4-2]는 Core timer Control Register TCNTL을 보여주고 있다.
[그림 4-2] TCNTL register.
TCNTL 안에 있는 TMREN bit를 setting함에 의해서 timer가 enabling되면, TCOUNT
register는 prescaler TSCALE이 만료될 때마다 한번 감소하게 된다. 즉, TSCALE +
CCLK clock cyles 1개마다 한번 감소한다. 예를 들면, TSCALE register의 값이 “0”이면,
TCOUNT register의 값은 모든 CCLK clock cycle마다 한번 감소하고, TSCALE이 “1”이
면, 모든 2개의 CCLK clock cycles마다 한번 감소한다.
TCOUNT register의 값이 “0”이 되면, interrupt가 발생하게 되고, TINT bit는 TCNTL
register안에서 set된다.
만일, TAUTORLD bit가 set되어 있다면, TCOUNT register는 TPERIOD register의 내용
을 다시 loading하고, counting을 시작한다. 그러나, 만일, TAUTORLD bit가 clear되어 있
다면, timer는 동작을 멈춘다.
또한, TMPWR=0일 때, TMREN=1이면, undefined 동작을 하는 데 주의하자.
Core timer interrupt request는 edge-sensitive이고, interrupt가 servicing되면 바로 자
동으로 hardware에 의해서 clearing된다.






예로 TPERIOD에 15000을 세팅하면 CCLK=400[MHz]이므로, 150[us]마다 Core Timer
Interrupt가 발생하게 된다

댓글 없음:

댓글 쓰기