18
4주차 주차 인터럽트 인터럽트 개념 개념 및 AVR AVR의 인터럽트 인터럽트 구조 구조 Next-Generation Networks Lab.

44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

44주차주차인터럽트인터럽트 개념개념 및및 AVRAVR의의 인터럽트인터럽트 구조구조

Next-Generation Networks Lab.

Page 2: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

1.11.1인터럽트의인터럽트의 개념개념

인터럽트(Interrupt) ?

사전적 의미는 ‘방해하다’ 또는 ‘중단시키다’ 이고 CPU가 주 작업(M i t k)을• 사전적 의미는 ‘방해하다’ 또는 ‘중단시키다’ 이고, CPU가 주 작업(Main task)을

하던 중에 방해되는 원인이 생겨서 잠시 멈추는 것.

• 예외(Exception) 혹은 트랩(Trap)이라고도 함

• 인터럽트는 발생한 요청을 처리하기 위하여 정상적인 프로그램 실행 순서를 벗

어나 발생한 요청을 처리하고 다시 원래의 프로그램으로 복귀하는 기법

2

Page 3: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

인터럽트의인터럽트의 33가지가지 요소요소 ((표표 77--1, 1, 표표 77--2)2)

번호 항목번 항목

1 무엇이 인터럽트를 발생시켰는가?

2 인터럽트 발생시 어떤 처리를 할 것인가?2 인터럽트 발생시 어떤 처리를 할 것인가?

3 인터럽트가 동시에 발생했을 때 어떻게 처리할 것인가?

번호 관련 용어

1 인터럽트 소스 (Interrupt Source)

2 인터럽트 벡터 (Interrupt Vector)인터럽 벡터 ( p )

3 인터럽트 우선 순위 (Interrupt Priority)

3

Page 4: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

인터럽트인터럽트 처리처리 과정과정

독서를 하다가 초인종이 울리면, (2) 현재 독서하고 있는 페이지를 저장하고,

(3) 초인종에 대한 처리를 한 후 (4) 다시 책의 읽던 부분으로 돌아와 읽음

1 2

3 4(3) 초인종에 대한 처리를 한 후, (4) 다시 책의 읽던 부분으로 돌아와 읽음

void main(void) {

3 4

while(true) {

책읽기( ); // 주 작업 (Task)

}1 2 4 }

}

인터럽 초인 초인 인터럽

1 2 4

인터럽트(초인종) { // 초인종 인터럽트

// 초인종이 울릴 때 할 일을 적는다.

}}

인터럽트(전화벨) { // 전화벨 인터럽트

// 전화벨이 울릴 때 할 일을 적는다

3

4

// 전화벨이 울릴 때 할 일을 적는다.

}

Page 5: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

1.2 1.2 인터럽트인터럽트 종류종류 ((그림그림 77--2)2)

1내부

maskable INTerrupt2

Non-Maskable Interrupt

2

① 인터럽트 발생 원인

② 인터럽트 차단 가능 3 순차적 확인

③ 인터럽트 검출 방법

3

바로 처리

보고서

5

Page 6: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

AVR의 인터럽트

• 하드웨어 인터럽트를 지원하고 외부 인터럽트를 8개 지원• 하드웨어 인터럽트를 지원하고, 외부 인터럽트를 8개 지원

• 모든 인터럽트 차단 가능

• 구현 방식: 인터럽트 벡터 방식

표 7 3 폴링 방식과 벡터 방식

항목 폴링 방식 벡터 방식

표 7-3 폴링 방식과 벡터 방식

하드웨어 구조 단순하다 복잡하다

응답 속도 느리다 빠르다응답 속 리다 빠 다

주변장치 개수 영향받음 영향받지 않음

우선순위 변경 쉽다 어렵다우선순위 변경 쉽다 어렵다

6

Page 7: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

1.3 1.3 인터럽트인터럽트 처리처리 과정과정 ((그림그림 77--3, p.246)3, p.246)

1 7

2 CPU Store Time CPU Recover Time

3 64

5

7

Page 8: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

다중다중 인터럽트인터럽트 처리과정처리과정

우선순위

8

Page 9: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

인터럽트인터럽트 프로그래밍의프로그래밍의 필요성필요성 ?? ?? 폴링폴링 방식방식

예제 7.1

포트 A의 7-segment에 초시계를 구현한다 포트 A의 7 segment에 초시계를 구현한다.

PE4에 연결된 Tact SW를 누르면 초시계가 ’00’으로 초기화된다.

이를 폴링(polling) 방식으로 구현한다. 이를 폴링(polling) 방식으로 구현한다.

Port A

CPU B d7-segment

CPU Boardg

(Decoder)

Tact Switch

Port E4

9

Tact Switch

Page 10: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

예제예제 77--1 Tact SW 1 Tact SW PE4 (PE4 (Polling Polling 방식방식))

typedef unsigned char INT8;typedef unsigned int INT16;

while(1){

for(i=0; i<6; i++)#define F_CPU 1000000UL

#include <avr/io.h>

for(i=0; i<6; i++){

for(j=0; j<10; j++){/

#include <util/delay.h>

int main (void)

{TactSW = PINE & 0x10;if(TactSW == 0x00)

{ i 0 j 0 }{INT8 i, j ;INT8 TactSW ;

{ i=0; j=0; }

PORTA = (i << 4) | j;

DDRA = 0xFF;DDRE = 0x00;

_delay_ms(1000);}

}}

return 0;}}

10

Page 11: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

인터럽트인터럽트 프로그래밍의프로그래밍의 필요성필요성 ?? ?? 인터럽트인터럽트

예제 7.2

포트 A의 7-segment에 초시계를 구현한다 포트 A의 7 segment에 초시계를 구현한다.

PE4에 연결된 Tact SW를 누르면 하강에지에서 초시계가 ’00’ 으로 초기화된다.

이를 인터럽트 방식으로 구현한다. 이를 인터럽트 방식으로 구현한다.

Port A

CPU B d7-segment

CPU Boardg

(Decoder)

Tact Switch

Port E4

11

Tact Switch

Page 12: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

예제예제 77--2 Tact SW 2 Tact SW INT4, INT4, 하강에지하강에지 감지감지

typedef unsigned char INT8;typedef unsigned int INT16;

//MCUCR |= 0x00;EICRB |= 0x02; // INT4 falling EIMSK |= 0x10; // INT4 enable

#define F_CPU 1000000UL

#include <avr/io.h>

EIMSK | 0x10; // INT4 enableEIFR |= 0x00; // Flag clearSREG |= 0x80; //sei();

/#include <util/delay.h>#include <avr/interrupt.h>

while(1){

for(i=0; i<6; i++)INT8 i, j ; // 전역변수로 선언 ??

ISR(INT4_vect) // INT4 interrupt function

{for(j=0; j<10; j++){

{ i=0; j=0; }

int main (void){

PORTA = (i << 4) | j;_delay_ms(1000);

}}{

DDRA = 0xFF; // 7-segmentDDRE = 0x00; // PE4 --> Tact SW// DDRE |= (0<<DDRE4);

}}return 0;}// DDRE |= (0<<DDRE4); }

12

Page 13: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

2. ATmega1282. ATmega128의의 인터럽트인터럽트 (표 7-4)

번호 인터럽트 종류 외/내부 개수 우선 순위

1 리셋 인터럽트 외부 1

높다2 외부 인터럽트 외부 8 높다

2 외부 인터럽트 외부 8

3 타이머/카운터 인터럽트 내부 14 낮다

4각종 통신 관련 인터럽트

(SPI, UART, TWI)내부 8

5그 밖의 인터럽트

(ADC, EEPROM, AC, SPM)내부 4

계 35

13

Page 14: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

표표 77--5 5 인터럽트인터럽트 벡터벡터 위치위치

- Fuse 비트에서 설정- Bootloader 사용 여부에 따라 설정

Bootloader를 사용하면 ‘0’

- MCUCR 레지스터에서 설정- ‘1’로 설정하면 Vector Start

Add 가 B tl d 영역으로 이동- Bootloader를 사용하면 0- Default는 ‘1’

Address가 Bootloader 영역으로 이동- Default는 ‘0’

$FFFE

Default $F004

$F002

$F000

$EFFE

$0004

$0002

14

$0002

$0000

Page 15: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

표표 77--6, 6, 표표 77--7 7 인터럽트인터럽트 벡터벡터

15

Page 16: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

인터럽트인터럽트 서비스서비스 루틴루틴 관련관련 헤더파일헤더파일 iom128.hiom128.h

/* Interrupt vectors */

/* External Interrupt Request 0 *// External Interrupt Request 0 /#define INT0_vect_num 1#define INT0_vect _VECTOR(1)#define SIG_INTERRUPT0 _VECTOR(1)

/* External Interrupt Request 1 */#define INT1 vect num 2#define INT1_vect_num 2#define INT1_vect _VECTOR(2)#define SIG_INTERRUPT1 _VECTOR(2)

#define _VECTORS_SIZE 140

16

Page 17: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

ATmega128ATmega128의의 인터럽트인터럽트 처리처리 과정과정

① 인터럽트 요청 신호검출 EIFR

② 인터럽트 요청 허용 여부 판단 EIMSK, SREG

③ 인터럽트 벡터에 저장된 주소로 점프 표7-6에서 정해진 주소로③ 인터럽 벡터에 저장된 주 점 에서 정해진 주

점프하고 그 주소에는 인터럽트 서비스 함수가 위치한 메모리 주소

현④ 복귀 정보 저장 현재 사용중인 레지스터들을 스택(Stack)에 저장

인터럽트를 처리하면서도 레지스터를 사용해야 함

⑤ 인터럽트 서비스 루틴의 수행

램 복귀 저장했던 레지 터들을 복원⑥ 주프로그램으로 복귀 저장했던 레지스터들을 모두 복원

17

Page 18: 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 44주차주차 인터럽트인터럽트개념개념및및AVRAVR의의인터럽트인터럽트구조구조

• Event #2가 발생하여 처리해도 Event #1의 흐름에 방해되지 않아야 함

• 비록 CPU Core는 하나지만 여러 개의 Event를 처리할 수 있는 능력을 갖추기비록 CPU Core는 하나지만 여러 개의 Event를 처리할 수 있는 능력을 갖추기

위해 Interrupt라는 하드웨어를 구현

• CPU는 하나의 main함수만 처리• CPU는 하나의 main함수만 처리

• main함수에서 호출하는 일반 함수는 발생시점이 예상되지만 인터럽트 처리함

수는 언제 발생할 지 예상할 수 없음수는 언제 발생할 지 예상할 수 없음

• CPU Core는 하나이므로 실제로는 하나의 서비스만 가능하지만 마치 여러 가지

서비스를 동시에 처리할 수 있는 것처럼 동작

• 인터럽트는 내부에 하드웨어적으로 구현되어 있어 소프트웨어 부담이 적음

• 인터럽트를 처리하는 함수는 가능한 짧아야 함. 길어지면 메인 함수의 동작에

영향을 줌

18