타이머/카운터는 모두 인터럽트와 PWM 출력 기능이 있다.
오버플로 인터럽트(OVF)는 카운터 값이 오버플로 될 때 발생한다.
출력비고 인터럽트(COMP)는 카운터 값이 출력비교 레지스터와 일치 할때 발생한다.
PWM 기능은 출력비교 기능을 이용해서 출력비교 신호의 주기와 듀티비를 가변 할 수 있는 출력신호를 발생한다.
타이머/카운터1, 3은 외부 트리거 신호에 의하여 현재의 카운터 값을 캡처하는 입력 캡처 인터럽트(CAPT)가 있다.
◆ 타이머/카운터 인터럽트 벡터
Vector NO. | Program Address | IAR Source | Interrupt Definition |
10 | 0x0012 | #pragma vector = TIMER2_COMP_vect | Timer/Counter2 Compare Match |
11 | 0x0014 | #pragma vector = TIMER2_OVF_vect | Timer/Counter2 Overflow |
12 | 0x0016 | #pragma vector = TIMER1_CAPT_vect | Timer/Counter1 Caputer Event |
13 | 0x0018 | #pragma vector = TIMER1_COMPA_vect | Timer/Counter1 Compare Match A |
14 | 0x001A | #pragma vector = TIMER1_COMPB_vect | Timer/Counter1 Compare Match B |
15 | 0x001C | #pragma vector = TIMER1_OVF_vect | Timer/Counter1 Overflow |
16 | 0x001E | #pragma vector = TIMER0_COMP_vect | Timer/Counter0 Caputer Event |
17 | 0x0020 | #pragma vector = TIMER0_OVF_vect | Timer/Counter0 Overflow |
25 | 0x0030 | #pragma vector = TIMER1_COMPC_vect | Timer/Counter1 Compare Match C |
26 | 0x0032 | #pragma vector = TIMER3_CAPT_vect | Timer/Counter3 Capture Event |
27 | 0x0034 | #pragma vector = TIMER3_COMPA_vect | Timer/Counter3 Compare Match A |
28 | 0x0036 | #pragma vector = TIMER3_COMPB_vect | Timer/Counter3 Compare Match B |
29 | 0x0038 | #pragma vector = TIMER3_COMPC_vect | Timer/Counter3 Compare Match C |
30 | 0x003A | #pragma vector = TIMER3_OVF_vect | Timer/Counter3 Overflow |
◆ 타이머/카운터 레지스터
8비트 타이머/카운터
타이머/카운터 0, 2 은 8비트 카운터이고 10비트 프리스케일러 기능이 있다.
오버플로 인터럽트(일반모드 - Normal Mode)는 타이머/카운터 레지스터(TCNT0)가 업 카운터하다가 오버플러(0xFF -> 0x00)가 되면 발생한다. 타이머/카운터 제어 레지스터(TCCR0)로 모드를 선택한다.
파형발생 모드비트(WGM01:00)에 의한 동작모드를 선택한다.
[#M_TCCR0(Time/Counter Control Register) <-|TCCR0(Time/Counter Control Register) <-|TCCR0(Time/Counter Control Register) : 타이머/카운터0 제어 레지스터
이 레지스터는 타이머/카운터0 을 어떠한 방식으로 사용할 것인가를 설정하기 위한 레지스터이다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
FOC0 | WGM00 | COM01 | COM00 | WGM00 | CS02 |
CS01 |
CS00 |
W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
- FOC0(Force Output Compare) -> 강제 출력 비교 비트
PWM 모드가 아닌 경우에만 유효함.
1로 설정하면 강제로 즉시 OC0 단자에 출력비교가 매치(match)된 것과 같은 출력을 내보내며,
이 출력신호의 동작은 COM01;00 비트에 의하여 결정된다.
- WGM01:00(Waveform Generation Mode) -> 파형 발생 모드 비트
카운터의 동작순서를 제어하여 어떤 파형을 발생하는지를 결정한다.
- COM01:00(Compare Match Output Mode) -> 비교 일치 출력 모드 비트
OC0 핀의 동작을 설정한다.
- CS02:00(Clock Select) -> 클럭 선택 비트
프리스케일러(prescaler)를 사용한 클럭의 분주비를 선택한다.
ATmega64 자료
CS02 | CS01 | CS00 | Description |
0 | 0 | 0 | No clock source |
0 | 0 | 1 | clk/1(No prescaling) |
0 | 1 | 0 | clk/8 |
0 | 1 | 1 | clk/32 |
1 | 0 | 0 | clk/64 |
1 | 0 | 1 | clk/128 |
1 | 1 | 0 | clk/256 |
1 | 1 | 1 | clk/1024 |
TCNT0(Time/Counter Register) : 타이머/카운터0 레지스터
이 레지스터는 8비트 카운터 값을 저장하고 있는 레지스터로서 값이 0x00 부터 증가하여 0xFF(256)로 되었다가 0x01이 증가하면 TCNT0 레지스터의 값은 0x00으로 초기화된다.
그리고 최상의 비트가 오버플로가 발생하면 TOV0 비트를 세트되게 하는 기능이다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TCNT0 | |||||||
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
OCR0(Output Compare Register) : 타이머/카운터0 출력비교 레지스터
이 레지스터는 TCNT0 값과 비교하여 OC0 단자에 출력신호를 발생한기 위한 8비트 값을 저장하는 레지스터이다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OCR0 | |||||||
W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
ASSR(Asynchronous Status Register) : 비동기 상태 레지스터
이 레지스터는 타이머/카운터0 이 외부 클럭에 의하여 비동기 모드로 동작하는 경우에 관련된 기능을 수행한다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | - | - | - | AS0 | TCN0UB | OCR0UB | TCR0UB |
R | R | R | R | R/W | R | R | R |
- AS0(Asynchronous Timer/Counter 0)
타이머/카운터0 의 클럭 소스를 선택하는 비트
AS0=0으로 설정하면 내부 클럭 clk/0가 선택되어 동기 모드로 동작
AS0=1로 설정하면 외부의 크리스탈 오실레이터로부터 TOSC1 단자에 입력되는 클럭이 선택되어 비동기 모드로 동작
- TCN0UB(Timer/Counter 0 Update Busy)
외부에서 TOSC1 단자로 입력되는 클럭에 의하여 비동기로 동작하고 있을 때 TCNT0 레지스터에 새로운 값을 라이트하면 이 비트가 1로 세트
이 값이 임시 레지스터로 부터 TCNT0 레지스터에 옮겨져서 TCNT0의 라이트가 완료되면 이 비트는 다시 자동적으로 0이 된다.
- OCR0UB(Output Compare Register 0 Update Busy)
외부에서 TOSC1 단자로 입력되는 클럭에 의하여 비동기로 동작하고 있을 때 OCR0 레지스터에 새로운 값을 라이트하면 이 비트가 1로 세트
이 값이 임시 레지스터로 부터 OCR0 레지스터에 옮겨져서 OCR0의 라이트가 완료되면 이 비트는 다시 자동적으로 0이 된다.
- TCR0UB(Timer/Counter Control Register 0 Update Busy)
외부에서 TOSC1 단자로 입력되는 클럭에 의하여 비동기로 동작하고 있을 때 TCCR0 레지스터에 새로운 값을 라이트하면 이 비트가 1로 세트
이 값이 임시 레지스터로 부터 TCCR0 레지스터에 옮겨져서 TCCR0 의 라이트가 완료되면 이 비트는 다시 자동적으로 0이 된다.
타이머/카운터를 동기모드와 비동기모드로 스위칭하는 경우에는 뜻하지 않은 부작용이 나타날 수 있으므로 다음과 같은 절차로 수행한다.
① TIMSK 레지스터의 OCIE0 및 TOIE0 비트를 0으로 하여 인터럽트를 금지한다.
② ASSR 레지스터의 AS0 비트 값을 원하는대로 설정한다.
③ TCNT0, OCR0, TCCR0 레지스터의 값을 원하는대로 설정한다.
④ ASSR 레지스터의 TCN0UB, OCR0UB, TCR0UB 비트가 0이 될때까지 기다린다.
⑤ TIFR 레지스터의 OCF0 및 TOV0 비트를 0으로 클리어 한다.
⑥ 필요하다면 다시 TIMSK 레지스터의 OCIE0 및 TOIE0 비트를 1로 하여 인터럽트를 허용상태로 한다.
TIMSK(Time/Counter Interrupt Mask Register) : 타이머/카운터 인터럽트 마스크 레지스터
이 레지스터는 타이머/카운터 0 인터럽트를 사용할 수 있도록 설정하기 위한 레지스터이다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OCIE2 | TOIE2 | TICIE1 | OCIE1A | OCIE1B | TOIE1 | OCIE0 | TOIE0 |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
이것이 1로 설정되고 상태 레지스터(SREG)의 I=1로 설정되면 타이머/카운터0 의 출력비교 인터럽트가 허용상태로 된다.
출력비교 인터럽트가 발생되어 TIFR 레지스터의 OCF0 비트가 1로 되면 이 인터럽트가 처리된다.
- TOIE0(Timer/Counter0 Overflow Interrupt Enable)
이것이 1로 설정되고 상태 레지스터(SREG)의 I=1로 설정되면 타이머/카운터0 의 오버플로우 인터럽트가 허용상태로 된다.
오버플로우 인터럽트가 발생되어 TIFR 레지스터의 TOV0 비트가 1로 되면 이 인터럽트가 처리된다.
TIFR(Time/Counter Interrupt Flag Register) : 타이머/카운터 인터럽트 플래그 레지스터
이 레지스터는 타이머/카운터0~2 가 발생하는 인터럽트 플래그를 저장하는 레지스터이다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OCF2 | TOV2 | ICF1 | OCF1A | OCF1B | TOV1 | OCF0 | TOV0 |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
타이머/카운터0 의 TCNT0 레지스터와 출력비교 레지스터 OCR0의 값을 비교하여 이것이 같으면 이 비트가 1로 셋트 되면서 출력비교 인터럽트가 요청된다.
이 인터럽트가 처리되기 시작하면 이는 다시 자동적으로 0 으로 클리어 한다.
- TOV0(Timer/Counter0 Overflow Flag)
타이머/카운터0 에서 오버플로우가 발생되면 이 비트가 1로 셋트되면서 오버플로우 인터럽트가 요청된다.
이 인터럽크가 처리되기 시작하면 자동적으로 0으로 클리어 한다.
PC PWM 모드에서는 타이머/카운터0 이 0x00 에서 계수방향을 바꿀 때 이 비트가 셋트된다.
SFIOR(Special Function IO Register) : 특수 기능 I/O 레지스터
이 레지스터는
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TSM | - | - | - | ACME | PUD | PSR0 | PSR321 |
R/W | R | R | R | R/W | R/W | R/W | R/W |
모든 타이머/카운터들을 동기화 시키는 기능을 수행한다.
TSM 비트를 1로 하면 PSR0, PSR321 비트에 라이트한 값을 유지하여 대응하는 프리스케일러 리셋 신호를 발생하고, 이는 해당 타이머/카운터의 동작을 정시켜 이것들을 똑같은 값으로 설정할 수 있도록 해준다.
TSM 비트를 0으로 하면 PSR0, PSR321 비트는 하드웨어 적으로 클리어 되면 타이머/카운터들이 동시에 카운팅 동작을 시작한다.
- PSR0(Prescaler Reset Timer/Counter 0)
프리스케일러를 리셋시키며 동작후에 자동적으로 클리어 된다.
그러나 타이머/카운터0이 비동기 모드로 동작하고 있을 때 이를 1로 하면 이것은 프리스케일러가 리셋될 때까지 유지되며, TSM=1이면 하드웨어에 의하여 자동적으로 클리어 되지 않는다.
_M#]
16비트 타이머/카운터
타이머/카운터 1, 3 은 16비트 카운터이고 10비트 프리스케일러 기능이 있다.
오버플로 인터럽트(일반모드 - Normal Mode)는 타이머/카운터 레지스터(TCNT1, TCNT3)가 업 카운터하다가 오버플러(0xFFFF -> 0x0000)가 되면 발생한다. 타이머/카운터 제어 레지스터(TCCR1A과 TCCR1B, TCCR3A과 TCCR3B)로 모드를 선택한다.
WGM13:10 = 0000(WGM33:30 = 0000)으로 설정하면 일반모드(Normal)가 된다.
[#M_TCCR1:3A(Time/Counter1:3 Control Register A)|TCCR1:3A(Time/Counter1:3 Control Register A)|TCCR1:3A(Time/Counter1:3 Control Register A) : 타이머/카운터1, 3 제어 레지스터 A
이 레지스터는 타이머/카운터1, 3 의 동작 모드를 설정하고 출력비교 단자의 파형 발생에 관한 동작을 지정하는 등의 기능을 수행한다.
TCCR1A -
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
COM1A1 | COM1A0 | COM1B1 | COM1B0 | COM1C1 | COM1C0 | WGM11 | WGM10 |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
COM3A1 | COM3A0 | COM3B1 | COM3B0 | COM3C1 | COM3C0 | WGM31 | WGM30 |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
OCnA, OCnB, OCnC 핀의 동작을 설정한다.
이들 출력 핀의 동작은 타이머/카운터1, 3의 동작 모드에 따라 달라진다.
- WGM(Waveform Generation Mode)
TCCR1B, TCCR3B 레지스터의 WGMn3~n2 비트와 결합하여 타이머/카운터1, 3의 동작 모드를 결정한다.
TCCR1:3B(Time/Counter1:3 Control Register B) : 타이머/카운터1, 3 제어 레지스터 B
이 레지스터는 타이머/카운터1,3 의 입력 캡쳐에 관련된 기능을 설정하거나 프리스케일러의 분주비를 설정하는 기능을 수행한다.
TCCR1B -
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ICNC1 | ICNS1 | - | WGM13 | WGM12 | CS12 | CS11 | CS10 |
R/W | R/W | R | R/W | R/W | R/W | R/W | R/W |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ICNC3 | ICNS3 | - | WGM33 | WGM32 | CS32 | CS31 | CS30 |
R/W | R/W | R | R/W | R/W | R/W | R/W | R/W |
입력캡쳐 단자 ICPn으로 입력되는 캡쳐신호를 위한 노이즈 제거회로가 작동하도록 설정한다.
이를 1로 설정하면 노이즈 제거회로가 작동하여 신호가 필터링되며, 이렇게 하면 입력캡쳐 신호가 시스템 클럭의 4주기 만큼 지연되어 동작하게
- ICNSn(Input Capture Edge Select)
입력캡쳐 단자 ICPn으로 입력되는 신호의 에지를 선택한다.
1로 설정하면 캡쳐신호가 상승 에지(rising or positive edge) 일때 캡쳐가 수행된다.
0로 설정하면 캡쳐신호가 하강 에지(falling or negative edge) 일때 캡쳐가 수행된다.
이와 같이 캡쳐신호가 입력되면 현재의 카운터 값이 입력켭쳐 레지스터 ICRn에 저장되며, 동신에 ICFn=1로 되면서 입력캡쳐 인터럽트가 요청된다. 어떤 동작 모드에서는 ICRn 레지스터의 값이 TOP으로 사용되기도 한다.
- WGMn3~2(Waveform Generation Mode)
TCCRnA 레지스터의 WGMn1~0 비트와 결합하여 타이머/카운터1, 3의 동작 모드를 결정하는 기능을 수행한다.
- CSn2~0(Clock Select)
클럭 소스 또는 프리스케일러(prescaler)의 분주비를 선택한다.
ATmega64 자료
CS02 | CS01 | CS00 | Description |
0 | 0 | 0 | No clock source |
0 | 0 | 1 | clk/1(No prescaling) |
0 | 1 | 0 | clk/8 |
0 | 1 | 1 | clk/64 |
1 | 0 | 0 | clk/256 |
1 | 0 | 1 | clk/1024 |
1 | 1 | 0 | External clock source on Tn pin. Clock on falling edge |
1 | 1 | 1 | External clock source on Tn pin. Clock on rising edge |
TCCR1:3C(Time/Counter1:3 Control Register C) : 타이머/카운터1, 3 제어 레지스터 C
이 레지스터는 타이머/카운터1,3 의 비교출력 단자와 관련된 기능을 설정한다.
TCCR1C -
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
FOC1A | FOC1B | FOC1C | - | - | - | - | - |
W | W | W | R | R | R | R | R |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
FOC3A | FOC3B | FOC3C | - | - | - | - | - |
W | W | W | R | R | R | R | R |
PWM 모드가 아닌 경우에만 유효함.
1로 설정하면 강제로 즉시 OCnx 단자에 출력비교가 매치(match)된 것과 같은 출력을 내보내며,
이 출력신호의 동작은 COMnx1~0 비트에 의하여 결정된다.
이렇게 강제로 만들어진 출력비교 매치는 OCnx 단자에 신호만을 출력할 뿐이며, 해당 인터럽트를 발생하지도 않고 CTC 모드에서 TCNTn 레지스터를 클리어 시키지도 않는다. 따라서 특별한 경우가 아니면 이 비트는 0으로 설정한다.
TCNT1:3H - TCNT1:3L(Time/Counter1:3 Control) : 타이머/카운터1, 3 레지스터
이 레지스터는 타이머/카운터1, 3 의 16비트 카운터 값을 저장하고 있는 레지스터로서 8비트씩 2차례로 나누어 액세스해야 한다.
이 레지스터는 언제나 리드 및 라이트 동작이 가능하지만 카운터가 동작하고 있을 때 이 값을 수정하면 TCNTn 값과 OCRn 값을 비교하여 출력신호를 발생하는 비교매치 기능에 문제를 제기 할 수도 있다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TCNT1H | |||||||
TCNT1L | |||||||
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TCNT3H | |||||||
TCNT3L | |||||||
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
OCR1:3(A:B:C)H : OCR1:3(A:B:C)L(Output Compare Register1:3 (A:B:C)) : 타이머/카운터1, 3 출력비교 레지스터 A, B, C
이 레지스터는 타이머/카운터 레지스터 TCNTn 값과 비교하여 OCnx 단자에 출력신호를 발생하기 위한 16비트 값을 저장하는 레지스터 이다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OCR1(A:B:C)H | |||||||
OCR1(A:B:C)L | |||||||
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OCR3(A:B:C)H | |||||||
OCR3(A:B:C)L | |||||||
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
ICR1:3H - ICR1:3L(Input Capture Register1:3) : 타이머/카운터1, 3 입력 캡쳐 레지스터
이 레지스터는 입력캡쳐 신호에 의하여 타이머/카운터 레지스터 TCNTn 값을 캡쳐하여 저장하는 16비트 레지스터이다.
이 ICRn 레지스터는 일부의 동작 모드에서 TOP으로 사용되기도 한다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ICR1H | |||||||
ICR1L | |||||||
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ICR3H | |||||||
ICR3L | |||||||
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
TIMSK(Time/Counter Interrupt Mask Register) : 타이머/카운터 인터럽트 마스크 레지스터
이 레지스터는 타이머/카운터 0~2가 발생하는 인터럽트를 개별적으로 허용하는 기능을 수행하는 레지스터이다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OCIE2 | TOIE2 | TICIE1 | OCIE1A | OCIE1B | TOIE1 | OCIE0 | TOIE0 |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
이것이 1로 설정되고 상태 레지스터(SREG)의 I=1로 설정되면 타이머/카운터1 의 입력캡쳐 인터럽트가 허용상태로 된다.
- OCIE1x(Timer/Counter1 Output Compare Match A, B Interrupt Enable)
이것이 1로 설정되고 상태 레지스터(SREG)의 I=1로 설정되면 타이머/카운터1 의 출력비교 인터럽트 A, B가 허용상태로 된다.
타이머/카운터1의 OCIE1C 비트는 이 레지스터에 있지 않고 ETIMSK 레지스터에 포함되어 있다.
- TOIE1(Timer/Counter1 Overflow Interrupt Enable)
이것이 1로 설정되고 상태 레지스터(SREG)의 I=1로 설정되면 타이머/카운터1 의 오버플로우 인터럽트가 허용상태로 된다.
ETIMSK(Extended Timer/Counter Interrupt Mask Register) : 타이머/카운터 인터럽트 마스크 확장 레지스터
이 레지스터는 타이머/카운터1, 3 이 발생하는 인터럽트를 개별적으로 허용하는 기능을 수행한다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | - | TICIE3 | OCIE3A | OCIE3B | TOIE3 | OC3EC | OCIE1C |
R | R | R/W | R/W | R/W | R/W | R/W | R/W |
이것이 1로 설정되고 상태 레지스터(SREG)의 I=1로 설정되면 타이머/카운터3의 입력캡쳐 인터럽트가 허용상태로 된다.
- OCIE3x(Timer/Counter3 Output Compare Match A, B, C Interrupt Enable)
이것이 1로 설정되고 상태 레지스터(SREG)의 I=1로 설정되면 타이머/카운터3 의 출력비교 인터럽트 A, B, C가 허용상태로 된다.
- TOIE3(Timer/Counter3 Overflow Interrupt Enable)
이것이 1로 설정되고 상태 레지스터(SREG)의 I=1로 설정되면 타이머/카운터3 의 오버플로우 인터럽트가 허용상태로 된다.
- OCIE1C(Timer/Counter1 Output Compare Match C Interrupt Enable)
이것이 1로 설정되고 상태 레지스터(SREG)의 I=1로 설정되면 타이머/카운터1 의 출력비교 인터럽트 C가 허용상태로 된다.
TIFR(Time/Counter Interrupt Flag Register) : 타이머/카운터 인터럽트 플래그 레지스터
이 레지스터는 타이머/카운터0~2가 발생하는 인터럽트 플래그를 저장하는 레지스터이다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OCF2 | TOV2 | ICF1 | OCF1A | OCF1B | TOV1 | OCF0 | TOV0 |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
타이머/카운터1의 입력캡쳐 신호 또는 아날로그 비교기로 부터의 신호에 의하여 켭쳐 동작이 수행될 때 이 비트가 1로 셋트되면서 입력캡쳐 인터럽트가 요청된다.
또한 ICR1 레지스터가 TOP으로 사용되는 동작 모드에서는 TCNT1의 값이 TOP으로 될 때 이 인터럽트가 발생한다.
이 인터럽트가 처리되기 시작하면 이는 자동적으로 0으로 클리어된다.
- OCF1x(Timer/Counter1 Output Compare A, B Match Flag)
타이머/카운터1의 TCNT1 레지스터와 출력비교 레지스터 OCR1x의 값을 비교하여 이것이 같으면 이 비트가 1로 셋트 되면서 출력비교 인터럽트가 요청된다.
이 인터럽트가 처리되기 시작하면 이는 자동적으로 0으로 클리어 한다.
- TOV1(Timer/Counter1 Overflow Flag)
타이머/카운터1 에서 오버플로우가 발생되면 이 비트가 1로 셋트되면서 오버플로우 인터럽트가 요청된다.
이 인터럽크가 처리되기 시작하면 이는 자동적으로 0으로 클리어 한다.
PC PWM 모드에서는 타이머/카운터1 이 0x00에서 계수방향을 바꿀 때 이 비트가 셋트된다.
ETIFR(Extended Timer/Counter Interrupt Flag Register) : 타이머/카운터 인터럽트 플래그 확장 레지스터
이 레지스터는 타이머/카운터1, 3가 발생하는 인터럽트 플래그를 저장하는 레지스터이다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | - | ICF3 | OCF3A | OCF3B | TOV3 | OCF3C | OCF1C |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
타이머/카운터3의 입력캡쳐 신호에 의하여 켭쳐 동작이 수행될 때 이 비트가 1로 셋트되면서 입력캡쳐 인터럽트가 요청된다.
또한 ICR3 레지스터가 TOP으로 사용되는 동작 모드에서는 TCNT3의 값이 TOP으로 될 때 이 인터럽트가 발생한다.
이 인터럽트가 처리되기 시작하면 이는 자동적으로 0으로 클리어된다.
- OCF3x(Timer/Counter3 Output Compare A, B, C Match Flag)
타이머/카운터3의 TCNT3 레지스터와 출력비교 레지스터 OCR3x의 값을 비교하여 이것이 같으면 이 비트가 1로 셋트 되면서 출력비교 인터럽트가 요청된다.
이 인터럽트가 처리되기 시작하면 이는 자동적으로 0으로 클리어 한다.
- TOV3(Timer/Counter3 Overflow Flag)
타이머/카운터3 에서 오버플로우가 발생되면 이 비트가 1로 셋트되면서 오버플로우 인터럽트가 요청된다.
이 인터럽크가 처리되기 시작하면 이는 자동적으로 0으로 클리어 한다.
PC PWM 모드에서는 타이머/카운터3 이 0x00에서 계수방향을 바꿀 때 이 비트가 셋트된다.
- OCF1C(Timer/Counter1 Output Compare C Match Flag)
타이머/카운터1의 TCNT1 레지스터와 출력비교 레지스터 OCR1C의 값을 비교하여 이것이 같으면 이 비트가 1로 셋트 되면서 출력비교 인터럽트가 요청된다.
이 인터럽트가 처리되기 시작하면 이는 자동적으로 0으로 클리어 한다.
SFIOR(Special Function IO Register) : 특수 기능 I/O 레지스터
이 레지스터는
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TSM | - | - | - | ACME | PUD | PSR0 | PSR321 |
R/W | R | R | R | R/W | R/W | R/W | R/W |
모든 타이머/카운터들을 동기화 시키는 기능을 수행한다.
TSM 비트를 1로 하면 PSR0, PSR321 비트에 라이트한 값을 유지하여 대응하는 프리스케일러 리셋 신호를 발생하고, 이는 해당 타이머/카운터의 동작을 정시켜 이것들을 똑같은 값으로 설정할 수 있도록 해준다.
TSM 비트를 0으로 하면 PSR0, PSR321 비트는 하드웨어 적으로 클리어 되면 타이머/카운터들이 동시에 카운팅 동작을 시작한다.
- PSR321(Prescaler Reset Timer/Counter 3, 2, 1)
타이머/카운터1~3이 공통적으로 사용하고 있는 프리스케일러를 리셋시키며, TSM=1로 되어 있지 않으면 동작후에 자동적으로 클리어 한다.
'소프트웨어 > AVR' 카테고리의 다른 글
내부 EEPROM 읽기/쓰기 (0) | 2011.09.28 |
---|---|
직렬통신[USART] (0) | 2011.09.27 |
인터럽트[Interrupt] (0) | 2011.09.26 |
LCD 제어 (0) | 2011.09.21 |
입.출력 포트(I/O) (0) | 2011.09.21 |