-
Atmega128의 타이머/카운터 및 관련 레지스터AVR study 2013. 1. 25. 13:23반응형
ATmega 128의 타이머/카운터는 타이머/카운터0, 타이머/카운터1, 타이머/카운터2, 타이머/카운터3으로 총 4개가 있다.이 타이머/카운터는 비트수에 따라서 분류하는것이 일반적이다. 8비트는 타이머/카운터0, 타이머/카운터2 이고
16비트는 타이머/카운터1, 타이머/카운터3 이다.
8비트 타이머와 16비트 타이머의 큰 차이점은 8비트 타이머는 0xFF까지 셀 수 있고, 16비트 타이머는 0xFFFF까지 셀 수 있기 때문에 계수의 범위가 늘어나고 저주파 발생이 가능하다는 점이 있다.
그 중에서 8비트 타이머/카운터0과 타이머/카운터2의 차이점은 외부클럭 입력을 받아들인다는 점에서 차이가 있다.
타이머/카운터 관련 레지스터
1. 타이머/카운터 제어 레지스터(Timer/Counter Control Register) : TCCRn (n=0,2)
FOCn WGMn0 COMn1 COMn0 WGMn1 CSn2 CSn1 CSn0
FOCn : Force Output Compare
이 비트에 1을 쓰면 파형 생성 유닛에 즉각적인 비교일치를 전달한다.
WGMn1:0 : 파형 생성 모드를 결정하는 비트. Normal, PWM, Phase Correct, CTC, Fast PWM의 모드를 조정할 수 있다.
COMn1:0 : 비교일치 출력 모드로서 출력핀 OCn의 동작을 제어한다. 이 비트들 중 하나 이상의 비트가 set 되면 공유하는 범용 I/O핀의 기능을 대신한다. 이 때 OCn핀을 사용하기 위해서 공유 범용 I/O 핀의 방향을 출력으로 설정해야 한다.
CSn2:0 : 클록 선정 비트.
위의 표와 같이 프리스케일링(분주비 설정)을 할 수 있다.
2. 타이머/카운터 레지스터(Timer Counter Register) : TCNTn (n=0,2)
TCNT7
TCNT6
TCNT5
TCNT4
TCNT3
TCNT2
TCNT1
TCNT0
타이머/카운터 레지스터로 실제로 시스템 내부 클럭수에 따라서 카운팅 하는 레지스터이다.
비트를 적절하게 설정해서 시작 카운팅 숫자를 지정해줄 수 있다. 8비트 타이머/카운터 에서는 0~255까지의 숫자 범위 안에서
시작 카운팅 숫자를 지정할 수 있다. 예를 들어 TCNT0=0x06 이라고 레지스터 값을 지정해주면 6부터 카운팅이 시작된다.
3. 출력 비교 레지스터(Output Compare Register) : OCRn (n=0,2)
OCR7
OCR6
OCR5
OCR4
OCR3
OCR2
OCR1
OCR0
타이머/카운터 레지스터 TCNT 값과 비교해서 OC2 단자에 출력을 발생하기 위한 8비트 값을 저장하는 레지스터이다.
OCR 레지스터에서 주의할 점은 이중 버퍼 구조로 되어 있어서 사용자가 동작 중에 값을 수정한다 하더라도 바로 바뀌지 않고
TOP혹은 BOTTOM에 도달했을 때 변경된다. 따라서 Glitch가 발생하지 않는다. 그런데 항상 그런것은 아니다. PWM모드가 아닌 일반 CTC 모드에서는 이중 버퍼링 구조로 작동하지 않으므로 글리치가 발생할 수도 있다.
4. 타이머/카운터 인터럽트 플래그 레지스터(Timer/Counter Interrupt Flag Register) : TIFR
OCF2
TOV2
ICF1
OCF1A
OCF1B
TOV1
OCF0
TOV0
OCFn : 출력 비교 플래그. 타이머값 TNCTn과 비교 레지스터 값 OCRn이 같을 때 플래그 OCFn이 SET된다. 이 플래그는 해당 인터럽트 서비스루틴이 수행되면 자동으로 CLEAR된다.
TOVn : 타이머값 TCNTn에 오버플로우가 발생하면 플래그 TOVn이 SET된다. 이 플래그는 해당 인터럽트 서비스루틴이 수행되면 자동으로 CLEAR된다.
5. 타이머/카운터 인터럽트 마스크 레지스터(Timer/Counter Interrupt Mask Register) : TIMSK
OCIE2
TOIE2
TICIE1
OCIE1A
OCIE1B
TOIE1
OCIE0
TOIE0
OCIEn : 출력 비교일치 인터럽트 허용. (Output Compare Match Interrupt Enable)
OCIEn 비트와 SREG의 1비트가 SET 되면 출력 비교일치 인터럽트를 사용할 수 있게 된다.
TOIEn : 타이머 오버플로 인터럽트 허용 (Timer/Counter Overflow Interrupt Enable)
TOIEn 비트와 SREG의 1비트가 SET 되면 타이머 오버플로 인터럽트를 사용할 수 있게 된다.
6. 비동기 상태 레지스터(Asynchronous Status Register) : ASSR (타이머/카운터 0 에만 존재)
-
-
-
-
AS0
TCN0UB
OCR0UB
TCR0UB
외부 클럭에 의하여 비동기 모드로 동작하는 경우에 관련된 기능을 수행한다.
7. 특수기능 IO 레지스터(Special Function IO Register) : SFIOR
TSM
-
-
-
ACME
PUD
PSR0
PSR321
이외에도 SREG(AVR Status REGister)가 있는데 최상위 bit(I bit)을 SET 시키면 모든 인터럽트를 허용하게 된다.
반응형'AVR study' 카테고리의 다른 글
LCD란? LCD의 동작원리와 장단점 (1) 2013.01.27 [AVR]타이머/카운터 - LED패턴 변화 (0) 2013.01.26 [AVR]타이머/카운터 - 정확히 1초 주기로 LED 점등 (0) 2013.01.26 M.A.I 회사의 Atmega128 모듈, ISP 다운로더 구입기 (0) 2013.01.20 [AVR] 오버플로우 인터럽트를 이용한 카운터 - LED 제어 (0) 2013.01.20