타이머(Timer)/카운터(Counter)의 CTC(Clear Timer of Compare Match Mode) 모드
타이머(Timer)/카운터(Counter)의 CTC(Clear Timer of Compare Match Mode) 모드
학습목표 - CTC 모드를 활용한 인터럽트의 레지스터를 이해하고 설정할 수 있다.
타이머(Timer)/카운터(Counter)의 CTC(Clear Timer of Compare Match Mode) 모드
CTC모드의 차이점은 설정 값을 정해주어 0에서부터 지정된 설정 값까지 카운트를 하게 된다.
TCNTn의 값이 OCRnx의 값과 일치하면 그 다음 클록 사이클에서 0으로 클리어되고 인터럽트(Interrupt)가 요청되게 된다.
TCNTn의 값이 차례로 증가... 증가... 증가..
if(TCNTn==OCRnx)
인터럽트 발생;
/*** 포트 설정 ***/
OC0A가 토글되는 것을 표시하기 위해서 PORTB의 7번 핀을 열어준다.
DDRB = 0x80;
/*** 레지스터 설정 ***/
- TCCRnA에서 TCT모드를 설정하여 주어야 한다. OCnA OCnB를 다 차단하고 예제를 수행해 보자. COMA/B를 다 0으로 세팅하여 진행. 앞에 4는 카운터 값에 도달했을 때 비트를 반전시키겠다는 의미이다.
TCCR0A = 0x42;
- 분주비는 일반모드와 동일하게 1024. 앞에 8은 토글되는 값을 강제로 내보내겠다는 의미이다.
TCCR0B = 0x85;
- 타이머 마스트는 TIMSK0 = 0x02 compare match mode
TIMSK0 = 0x02;
- TCNT와 비교할 OCR0A의 값은 최대치인 0xFF
OCR0A = 0xFF;
/*** 코드 ***/
<main.c>
#include <atm2560.h> |
*** LED가 61번 깜빡이고 나서 숫자가 바뀐다. 육안으로는 확인가능했지만 촬영하니 깜빡임이 느껴지지 않았다.