18
AVR STUDY 2주차 타이머 카운터 인터럽트

AVR timer/counter

Embed Size (px)

DESCRIPTION

AVR timer/counter

Citation preview

Page 1: AVR timer/counter

AVR STUDY 2주차

타이머 카운터 인터럽트

Page 2: AVR timer/counter

INTERRUPT란?

★ CPU 외부/내부의 하드웨어적인 요구에 의해서 프로그램의 실행 순서를 변경하여 보다 시급한 작업을 먼저 수행한 후에 다시 원래의 위치로 복귀하는 작업 ★ ISR = Interrupt Service Routine

Page 3: AVR timer/counter

왜 인터럽트를 사용하는가?

★ 1초마다 숫자 증가 필요

Page 4: AVR timer/counter

왜 인터럽트를 사용하는가?

★ 저번 시간에 사용했던 방법은 delay

Page 5: AVR timer/counter

왜 인터럽트를 사용하는가?

Page 6: AVR timer/counter

ATMEGA128의 인터럽트

★ 총 4개의 인터럽트 ★ 8비트 타이머/카운터 0,2 0x00 ~ 0xFF ★ 8비트 관련 레지스터 TCNT, TCCR, OCR, ASSR, TIMSK, TIFR, SFIOR ★ 16비트 타이머/카운터 1,3 0x0000 ~ 0xFFFF ★ 16비트 관련 레지스터 TCNT, TCCRnA, TCCRnB, TCCRnC, OCRnA~OCRnC, ICR, TIMSK, ETIMSK, TIFR, ETIFR, SFIOR ★ 인터럽트의 다양한 모드 일반모드, CTC 모드, Fast PWM MODE. PC PWM MOCE

Page 7: AVR timer/counter

8비트 타이머/카운터0 일반모드

★ 알아야 할 함수 cli() sei() ISR(TIMER0_OVF_vect) ★ 알아야 할 레지스터 TCCR0 TCNT0 TIMSK

Page 8: AVR timer/counter

cli() & sei() & ISR(TIMER0_OVF_vect)

★ cli() = CLear Interrupt flag 모든 인터럽트를 비활성화시키는 함수 ★ sei() = SEt Interrupt mask. 설정된 인터럽트들을 모두 활성화시키는 함수 ★ ISR(TIMER0_OVF_vect) WinAVR 레퍼런스의 avr/interrupt.h

Page 9: AVR timer/counter

TCCR0

★ Timer/Counter0 Control Register

★ FOC0 = 0 // 사용 안 하는 bit

Page 10: AVR timer/counter

TCCR0

Page 11: AVR timer/counter

TCCR0

★ 타이머/카운터0 분주비(prescaler) ★ TCCR0=0x05 //0000101 CLKtos/128 (from prescaler)

Page 12: AVR timer/counter

TCNT0

★ Timer/Counter Register

★ Count되는 수치가 저장되는 레지스터

Page 13: AVR timer/counter

TIMSK

★ Timer/Counter Interrupt Mask Register

★ 출력비교 인터럽트, 오버플로우 인터럽트 등을 결정 ★ TIMSK=0x01;

Page 14: AVR timer/counter

TCCR0 & TCNT0 & TIMSK

Page 15: AVR timer/counter

예제

8비트 타이머로는 1초 불가능 16비트 타이머에서 가능

Page 16: AVR timer/counter

CODE

Page 17: AVR timer/counter

예제 (1/2)

Page 18: AVR timer/counter

예제 (2/2)