29
Edited and Added by 15 기 기기기 First made by 12 기 기기기 Second made by 13 기기기 * Interrupt @Atmega

Interrupt @atmega

Embed Size (px)

DESCRIPTION

후배들에게 가르친 세미나입니다.

Citation preview

Page 1: Interrupt @atmega

Edited and Added by 15 기 김승호First made by 12 기 한재웅

Second made by 13 김범수

*Interrupt @At-mega

Page 2: Interrupt @atmega

*목차

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

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

3. 외부 인터럽트4. 타이머 카운트 인터럽트5. CTC 모드 및 PWM 모드6. 소스 코딩 및 퀴즈7. 재미있는 과제 1,2

Page 3: Interrupt @atmega

*Micro Processor 프로그래밍 분류

1.폴링 방식2.인터럽트 방식

어떠한 작업을 수행할 시에 외부에서 들어오는 이벤트로 인해 어떠한 작업을 시행될 때 이용되는 방식 딱 두종류 !

Page 4: Interrupt @atmega

*Polling method

*Polling : 명사 (n) 1. 투표 2. 여론조사*CPU 가 특정 이벤트를 처리하기 위해 그 이벤트가

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

*장점 : 단일 이벤트 시에 유용*단점 : 다중 이벤트가 발생되면 ?

Page 5: Interrupt @atmega

*Interrupt method

*Interrupt : 동사 (v) 1. 방해하다 2. 중단하다*특정 요구에 의해서 정상적인 프로그램의

실행순서를 변경하여 요구한 작업을 먼저 수행한 후에 다시 원래의 프로그램으로 복귀하는 방법 .

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

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

Page 6: Interrupt @atmega

*Why should we use the Interrupt

method?

*우리가 쓰는 컴퓨터들은 한가지 일만 하지 않는다 . 즉 , 다중 처리를 하고 있는 것이다 .

*다중처리를 위해서는 많은 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

*타이머 / 카운터 0 제어 레지스터

*TCCR0 (Timer/Counter0 Control Register)

Page 19: Interrupt @atmega

*TCCR

*CS : 분주비 설정

Page 20: Interrupt @atmega

*타이머 / 카운터 0 인터럽트 마스크 레지스터

*TIMSK(Timer/Counter Interrupt Mask Register)

*인터럽트 Enable

Page 21: Interrupt @atmega

*타이머 / 카운터 인터럽트 전역 Enable Com-

mand

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

Page 22: Interrupt @atmega

*Overflow Inter-rupt

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

Page 23: Interrupt @atmega

*Overflow Inter-rupt

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

Page 24: Interrupt @atmega

*CTC mode

*CTC(Clear Time on Compare Match) Mode

*OCR 값과 TCNT 값이 맞으면 인터럽트가 호출되고 TCNT 값이 리셋된다 . OC0 출력파형은 인터럽트마다 Toggle 된다 .

Page 25: Interrupt @atmega

*Fast PWM Mode

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

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

Page 26: Interrupt @atmega

*LED 제어 소스 코딩 & 퀴즈 !

#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

*과제 1

*Timer1 오버플로우 인터럽트를 이용하여 1 초에 LED 가 1 초에 한 번 꺼졌다 켜졌다 하게 하기 .

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

2. 분주비를 이용3. TCNT1H 와 TCNT1L 의 초기값은 0(65536 번

카운트해야 Overflow 발생 )

4. TCCR1B 레지스터 하위 3 비트의 값과 계산식을 적을 것 ( 분주비 )

Page 28: Interrupt @atmega

*과제 2

*인터럽트 (CTC 모드 ) 를 사용하여 3 개의 LED 패턴 만들기 (눈에서 인식할 수 있을만큼 )

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

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

Page 29: Interrupt @atmega

Q & A