CPU Timer에 대하여 소스 및 구조차원에서 접근한다.
출처 : http://blog.naver.com/zeratool2/80106355498
위의 내용과 함께 보충하여 설명한다.
28335는 CPU Timer 0/1/2 세 개의 모듈을 가지고 있다. 내부 구조는 모두 동일하다.
DSP에 OS를 포팅 시켜서 RTOS로 사용할 경우, CPU Timer2는 BIOS스케쥴링에 사용하게 되어 Timer0과 Timer1만을 사용할 수 있다.
CPU타이머는 PLL을 거친 SYSCLKOUT을 공급받아 돌아가게 된다. 이와 관련된 소스차원의 간략한 글을 올려놓았으니 참고하자.
동작원리를 설명한다
-TDDRH:TDDR(16bit:16bit)와 PSCH:PSC는 AVR의 프리스케일러와 같다.
-타이머가 가동되면 PSCH:PSC는 TDDRH:TDDR의 값을 그대로 복사해오고, SYSCLKOUT 한 클럭당 1씩 Down-Counting을 한다.
-Down-Counting으로 1씩 빼다가 0이 넘어가면 TIMH:TIM에 1클럭의 신호를 보낸다.
-TIMH:TIM 또한 타이머가 가동되면서 PRDH:PRD의 값을 복사해오고, 대기중에 PSCH:PSC로부터 넘어오는 한 클럭당 1씩 DOWN-Counting을 한다.
-Down-Counting에 의해 0이 넘어가는 순간 TINT에 신호를 보내고 인터럽트가 발생한다.
위를 종합하여 인터럽트 주기는
(1/SYSCLKOUT)*(TDDRH:TDDR+1)*(PRDH:PRD+1)
이 된다. (1/SYSCLKOUT)은 1클럭당 주기임을 알아두자.
레지스터 표이다.
TIMERxTCR 레지스터이다.
15 |
인터럽트가 요청 됐는지의 유무를 표시해준다. 1이면 인터럽트가 요청된 것이다. 여기에 1을 써주어 강제 클리어 할 수 있다. |
14 |
1을 입력하면 타이머 인터럽트를 사용할 수 있다. |
11-10 |
JTAG와 같은 에뮬레이터를 사용할 때 쓰는 옵션이다. 컴파일러에서 브레이크 포인트를 걸고 실행했을 때, 브레이크 포인트를 만나면 아래와 같이 작동한다. 00 일 때 : TIMH:TIM의 바로 다음 카운팅에서 타이머가 멈춘다. 01 일 때 : TIMH:TIM이 0까지 감소한 후 타이머가 멈춘다 10or11 : 브레이크 포인트를 만나더라도 타이머는 계속 카운팅을 한다. |
5 |
1만 쓸 수 있으며 1을 쓸 경우, TIM이 PRD의 값을 다시 복사해 온다. 0밖에 읽히지 않는다.
이게 무슨 의미를 가질까? TIM단계의 카운팅을 새로 한다는 뜻이겠지만 어떤 때 쓰이는지 모르겟다. |
4 |
1을 쓰면 타이머가 멈춘다. 0을 써주면 즉시 타이머가 카운팅을 시작한다. |
다음 글에서는 소스코드 분석