Interrupt @atmega

29
Edited and Added by 15기 김승호 First made by 12기 한재웅 Second made by 13 김범수 *

description

동아리 후배들에게 강의한 강의 자료입니다.

Transcript of Interrupt @atmega

Page 1: Interrupt @atmega

Edited and Added by 15기 김승호

First made by 12기 한재웅

Second made by 13 김범수

*

Page 2: Interrupt @atmega

*

1. 마이크로 프로세서 I/O포트에 대한 프로그램

방법

2. 왜 인터럽트를 써야 할까?

3. 외부 인터럽트

4. 타이머 카운트 인터럽트

5. CTC 모드 및 PWM 모드

6. 소스 코딩 및 퀴즈

7. 재미있는 과제 1,2

Page 3: Interrupt @atmega

*

1.폴링 방식

2.인터럽트 방식

어떠한 작업을 수행할 시에 외부에서 들어오는

이벤트로 인해 어떠한 작업을 시행될 때 이용되

는 방식 딱 두종류!

Page 4: Interrupt @atmega

*

*Polling : 명사(n) 1.투표 2.여론조사

*CPU가 특정 이벤트를 처리하기 위해 그 이벤트

가 발생할 때까지 모든 연산을 모니터링 하는데

쓴다.

*장점 : 단일 이벤트 시에 유용

*단점 : 다중 이벤트가 발생되면?

Page 5: Interrupt @atmega

*

*Interrupt : 동사(v) 1. 방해하다 2.중단하다

*특정 요구에 의해서 정상적인 프로그램의 실행

순서를 변경하여 요구한 작업을 먼저 수행한 후

에 다시 원래의 프로그램으로 복귀하는 방법.

*장점 : 다중처리를 효율적으로 할 수 있다.

*단점 : 쓸 때 약간의 머리를 써야한다.

Page 6: Interrupt @atmega

*

*우리가 쓰는 컴퓨터들은 한가지 일만 하지 않는

다. 즉, 다중 처리를 하고 있는 것이다.

*다중처리를 위해서는 많은 CPU 자원을 낭비하

는 Polling 방식보다는 Interrupt방식이 CPU를

효율적으로 사용할 수 있다!

*하지만 언제나 좋지는 않다.

Page 7: Interrupt @atmega

*

*C언어에서 함수랑 좀 비슷하지 않나..?

*함수와 인터럽트와 다른 점 ?

함수는 call할 때, 인터럽트는 인터럽트 걸릴 때

동작.

인터럽트 걸릴 때는 어떻게 조절하지?

Page 8: Interrupt @atmega

*

*Atmega128에는 외부 인터럽트 Port : 8개(INT)

외부에서 어떤 변화가 검출

이 될 때 요청이 되는 인터

럽트

사용레지스터 : EIMSK(External Interrupt Mask Register)

Page 9: Interrupt @atmega

*

ISC71 ISC70 ISC61 ISC60 ISC51 ISC50 ISC51 ISC50

ISCn1 ISCn0 인터럽트 Call 시점

0 0 INTn Low Level

0 1 INTn Any Change

1 0 INTn Falling Edge

1 1 INTn Rising Edge

Page 10: Interrupt @atmega

*

레지스터 설명

EICRA 외부 인터럽트 제어 레지스터(for INT0~INT3)

EICRB 외부 인터럽트 제어 레지스터(for INT4~INT4)

EIMSK 외부 인터럽트 마스크 레지스터

-8개의 외부 인터럽트를 인에이블시키는 비트

로 구성한다.

EIFR 외부 인터럽트 플래그 레지스터

-외부 인터럽의 발생여부를 나타냄

SREG 상태 레지스터

-BIT 7-I : 인터럽트를 쓰기 위해서 반드시 1로

셋되어야한다.

Page 11: Interrupt @atmega

*

*Register : 사전적 의미 – 등록하다. 신고하다. 기록

하다. 나타내다. 기억하다. 인식되다.

* 여기서의 의미 : 산술적, 논리적 연산이나 정보 해

석, 전송 등을 할 수 있는 일정 길이의 정보를 저장하

는 CPU내의 기억 장치. 저장 용량에는 제한되어 있으

나 주기억 장치에 비해서 접근 시간이 빠르고, 체계적

인 특징이 있다. 컴퓨터에는 산술 및 논리 연산의 결

과를 임시로 기억하는 누산기, 기억 주소나 장치의 주

소를 기억하는 주소 레지스터를 비롯하여 컴퓨터의

동작을 관리하는 각종 레지스터가 사용된다.

Page 12: Interrupt @atmega

*

• 타이머 : 일정한 시간 간격을 세는 것.

• 머신 사이클 : 명령어 하나를 수행하는데 걸리는

시간으로 타이머 모드에서 일정한 시간 간격이

머신 사이클의 시간 간격을 의미한다.

• IF Atmega128에 16Mhz 크리스탈이 있다

면, 1 머신 사이클의 간격은 62.5ns, 타이머는

62.5ns마다 작동한다.

Page 13: Interrupt @atmega

*

* 타이머 : 머신 사이클을 세는 것.

* 카운터 : 타이머에 Overflow가 일어날 때마다숫자를 세는 것

* 타이머 인터럽트 : 카운터를 이용하여 인터럽트를 작동시키는 스위치로 사용한 인터럽트

*타이머 인터럽트에는 크게 타이머 모드와 카운터 모드가 있다. 시간을 세는 기능을 타이머 모드, 숫자를 세는 기능을 카운터 모드.

Page 14: Interrupt @atmega

* CLOCK(falling Edge 일 때)

• 타이머가 1증가하는 시점

• 카운터가 1 증가하는 시점(overflow 될때, 이 기준이 바뀔 수도 있다.)

Page 15: Interrupt @atmega

*

*타이머 모드

*일정한 간격의 시간을 세는 것

*Ex)100M 달리기할 때의 스톱워치

*카운트 모드

*일정한 간격과 관계 없이 숫자만을 세는 것

*Ex)계수기, 놀이공원 입장객들 체크할 때

Page 16: Interrupt @atmega

*

*TCNT(Timer/Counter Register)

*총 4개의 타이머/카운터가 있다.

*Timer/Counter0,2(8bit)

*Timer/Counter1,3(16bit)

Timer는 머신 사이클 마다 카운트된 값을 레지스터

에 보관한다.

Counter(0,2) : TCNT0/2 레지스터에 저장

Counter(1,3) : TCNT1/3H와 TCNT1/3L 레지스

터에 저장(16비트이기 때문에)

Page 17: Interrupt @atmega

*

*OCR(Timer/Counter Output Compare Register)

*오버플로(Overflow)가 일어나는 시점을 변경할 경우그 시점을 명시해주는 레지스터

*Timer/Counter0,2(8bit)

*Timer/Counter1,3(16bit)

Timer는 머신 사이클 마다 카운트된 값을 OCR값과 비교한다.

Counter(0,2) : OCR0/2 레지스터에 저장

Counter(1,3) : OCR1/3A,B,C H와 OCR1/3A,B,C L 레지스터에 저장(16비트이기 때문에)

Page 18: Interrupt @atmega

*

*TCCR0 (Timer/Counter0 Control Register)

Page 19: Interrupt @atmega

*

*CS : 분주비 설정

Page 20: Interrupt @atmega

*

*TIMSK(Timer/Counter Interrupt Mask Register)

*인터럽트 Enable

Page 21: Interrupt @atmega

*

*모든 타이머/카운터에 대한 Enable/Disable Commmad

Page 22: Interrupt @atmega

*

*타이머/카운터 레지스터인 TCNT1H:TCNT1L (타이머1 기준)가 overflow될 때, 요청되는 인터

럽트

Page 23: Interrupt @atmega

*

*방금 그림에서 65535번 카운트를 했다면 모든 레지스터에 ‘1’로 채워지고, 이 때 1을 더하면 최상위비트 자리에서 올림수가 발생, 이때가 overflow이다.

Page 24: Interrupt @atmega

*

*CTC(Clear Time on Compare Match) Mode

*OCR값과 TCNT값이 맞으면 인터럽트가 호출되고

TCNT값이 리셋된다. OC0 출력파형은 인터럽트

마다 Toggle된다.

Page 25: Interrupt @atmega

*

*높은 주파수의 PWM 파형을 발생하는 유용하다.

*비반전 비교 출력모드에서 TCNT0 값은 계속하여 OCR0과비교되어 일치하면 OC0 핀을 통해 0이 출력되고, TCNT0 값이 0이 되면 1을 출력된다.

Page 26: Interrupt @atmega

*

#include <mega8.h>

Unsigned char led= 0xFE;

Void main(void)

{

DDRC=0xFF;

PORTC= led;

TIMSK = 0x01; // 문제 1 : 이 레지스터가 하는 일은?

TCCR0= 0x07; // 문제 2 : 이 레지스터가 하는 일은?

TCNT0= 0x00; // 문제3 : 이 레지스터가 하는 일은?

SREG = 0x80; // 문제 4 : 이 레지스터가 하는 일은?

//문제 5 : 이 레지스터들로 인해 생기는 인터럽트

while(1);

}

Intrrupt [TIM0_OVF] void timer_int0(void)

{

led<<=1;

led |= 0x01;

if(led == 0xFF) led = 0xFE;

PORTC = led;

}

문제1 : Timer Count Interrupt Mask 레지스터, 인터럽트를 키고 끄는 역할을 한다.0x01 - 타이머 0 오버플로우 모드 ON문제2 : Timer Count Control Register타이머 모드를 제어한다.0x07 : normal 모드, 1024분주

문제3 : Timer Count Register 0x00: 첫 카운터 값은 00H문제4 : SREG 전역 인터럽트 인에이블

문제5: (1/16)us*1024분주*(256-0) = 0.0163초

마다 인터럽트 발생하여, LED 왼쪽으로 순차 점멸

Page 27: Interrupt @atmega

*

*Timer1 오버플로우 인터럽트를 이용하여 1초에

LED가 1초에 한 번 꺼졌다 켜졌다 하게 하기.

1. 16MHz 동작속도를 가지고 있다.

2. 분주비를 이용

3. TCNT1H와 TCNT1L의 초기값은 0(65536번

카운트해야 Overflow 발생)

4. TCCR1B 레지스터 하위 3비트의 값과 계산식

을 적을 것(분주비)

Page 28: Interrupt @atmega

*

*인터럽트(CTC모드)를 사용하여 3개의 LED 패턴

만들기(눈에서 인식할 수 있을만큼)

1. 조건 1 : 스위치 1, 2, 3을 누를 때마다 패턴이

바뀌어야함.

2. 조건 2 : 인터럽트에서 Delay를 사용하면 안

됨.

Page 29: Interrupt @atmega