Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
44주차주차인터럽트인터럽트 개념개념 및및 AVRAVR의의 인터럽트인터럽트 구조구조
Next-Generation Networks Lab.
1.11.1인터럽트의인터럽트의 개념개념
인터럽트(Interrupt) ?
사전적 의미는 ‘방해하다’ 또는 ‘중단시키다’ 이고 CPU가 주 작업(M i t k)을• 사전적 의미는 ‘방해하다’ 또는 ‘중단시키다’ 이고, CPU가 주 작업(Main task)을
하던 중에 방해되는 원인이 생겨서 잠시 멈추는 것.
• 예외(Exception) 혹은 트랩(Trap)이라고도 함
• 인터럽트는 발생한 요청을 처리하기 위하여 정상적인 프로그램 실행 순서를 벗
어나 발생한 요청을 처리하고 다시 원래의 프로그램으로 복귀하는 기법
2
인터럽트의인터럽트의 33가지가지 요소요소 ((표표 77--1, 1, 표표 77--2)2)
번호 항목번 항목
1 무엇이 인터럽트를 발생시켰는가?
2 인터럽트 발생시 어떤 처리를 할 것인가?2 인터럽트 발생시 어떤 처리를 할 것인가?
3 인터럽트가 동시에 발생했을 때 어떻게 처리할 것인가?
번호 관련 용어
1 인터럽트 소스 (Interrupt Source)
2 인터럽트 벡터 (Interrupt Vector)인터럽 벡터 ( p )
3 인터럽트 우선 순위 (Interrupt Priority)
3
인터럽트인터럽트 처리처리 과정과정
독서를 하다가 초인종이 울리면, (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
// 전화벨이 울릴 때 할 일을 적는다.
}
1.2 1.2 인터럽트인터럽트 종류종류 ((그림그림 77--2)2)
1내부
maskable INTerrupt2
Non-Maskable Interrupt
2
① 인터럽트 발생 원인
② 인터럽트 차단 가능 3 순차적 확인
③ 인터럽트 검출 방법
3
바로 처리
보고서
5
AVR의 인터럽트
• 하드웨어 인터럽트를 지원하고 외부 인터럽트를 8개 지원• 하드웨어 인터럽트를 지원하고, 외부 인터럽트를 8개 지원
• 모든 인터럽트 차단 가능
• 구현 방식: 인터럽트 벡터 방식
표 7 3 폴링 방식과 벡터 방식
항목 폴링 방식 벡터 방식
표 7-3 폴링 방식과 벡터 방식
하드웨어 구조 단순하다 복잡하다
응답 속도 느리다 빠르다응답 속 리다 빠 다
주변장치 개수 영향받음 영향받지 않음
우선순위 변경 쉽다 어렵다우선순위 변경 쉽다 어렵다
6
1.3 1.3 인터럽트인터럽트 처리처리 과정과정 ((그림그림 77--3, p.246)3, p.246)
1 7
2 CPU Store Time CPU Recover Time
3 64
5
7
다중다중 인터럽트인터럽트 처리과정처리과정
우선순위
8
인터럽트인터럽트 프로그래밍의프로그래밍의 필요성필요성 ?? ?? 폴링폴링 방식방식
예제 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
예제예제 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
인터럽트인터럽트 프로그래밍의프로그래밍의 필요성필요성 ?? ?? 인터럽트인터럽트
예제 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
예제예제 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
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
표표 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
표표 77--6, 6, 표표 77--7 7 인터럽트인터럽트 벡터벡터
15
인터럽트인터럽트 서비스서비스 루틴루틴 관련관련 헤더파일헤더파일 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
ATmega128ATmega128의의 인터럽트인터럽트 처리처리 과정과정
① 인터럽트 요청 신호검출 EIFR
② 인터럽트 요청 허용 여부 판단 EIMSK, SREG
③ 인터럽트 벡터에 저장된 주소로 점프 표7-6에서 정해진 주소로③ 인터럽 벡터에 저장된 주 점 에서 정해진 주
점프하고 그 주소에는 인터럽트 서비스 함수가 위치한 메모리 주소
현④ 복귀 정보 저장 현재 사용중인 레지스터들을 스택(Stack)에 저장
인터럽트를 처리하면서도 레지스터를 사용해야 함
⑤ 인터럽트 서비스 루틴의 수행
램 복귀 저장했던 레지 터들을 복원⑥ 주프로그램으로 복귀 저장했던 레지스터들을 모두 복원
17
• Event #2가 발생하여 처리해도 Event #1의 흐름에 방해되지 않아야 함
• 비록 CPU Core는 하나지만 여러 개의 Event를 처리할 수 있는 능력을 갖추기비록 CPU Core는 하나지만 여러 개의 Event를 처리할 수 있는 능력을 갖추기
위해 Interrupt라는 하드웨어를 구현
• CPU는 하나의 main함수만 처리• CPU는 하나의 main함수만 처리
• main함수에서 호출하는 일반 함수는 발생시점이 예상되지만 인터럽트 처리함
수는 언제 발생할 지 예상할 수 없음수는 언제 발생할 지 예상할 수 없음
• CPU Core는 하나이므로 실제로는 하나의 서비스만 가능하지만 마치 여러 가지
서비스를 동시에 처리할 수 있는 것처럼 동작
• 인터럽트는 내부에 하드웨어적으로 구현되어 있어 소프트웨어 부담이 적음
• 인터럽트를 처리하는 함수는 가능한 짧아야 함. 길어지면 메인 함수의 동작에
영향을 줌
18