마이크로컨트롤러에서 가장 많이 쓰이는 기능은 Interrupt, counter, Timer라고 한다.

 오늘은 Interrupt에 대해 공부를 했다.

 Interrupt란?

 Interrupt는 마이크로컨트롤러의 내 외부로부터 오는 신호로 기존에 실행하고 있던 작업을 멈추고 요청된 작업(interrupt Service Routine)을 모두 실행한 뒤에 다시 중지되었던 기존의 작업으로 돌아가는 것을 말한다.

 이를 실생활과 비교해보면 다음과 같이 나타낼 수 있다.

실생활 인터럽트
시험 공부를 한고 있다.  메인 프로그램 실행 중
 엄마가 심부름을 시킨다. 인터럽트 발생
 책갈피를 꽂아둔다. 복귀 주소 저장
심부름을 다녀온다. 인터럽트 처리
책갈피가 꽂힌 부분을 편다. 복귀 주소 로드
다시 시험 공부를 한다.  메인 프로그램 계속 실행

  ATmeaga128에는 35개의 인터럽트가 있다. 그리고 각 인터럽트에 부여된 번호를 인터럽트 벡터라고 하며 인터럽트 벡터 번호가 낮을수록 우선순위가 높다. 동시에 인터럽트 요청이 있을 때 우선순위가 가장 높은 하나의 인터럽트만 실행된다.

 인터럽트는 ATmega128에서 자세히 알 수 있다.

http://www.kjit.bme.hu/images/stories/targyak/jarmufedelzeti_rendszerek/atmel_atmega128_manual.pdf

 

외부 인터럽트

 ATmega128은 8개의 외부 인터럽트 INT0 ~ INT7을 지원한다. 외부 인터럽트는 INT0 ~ INT7핀의 트리거 동작으로 인터럽트가 발생된다. 이 말은 INT0 ~ INT7핀으로 지정된 핀으로 스위치 입력 등의 입력을 주면 미리 설정된 트리거 동작(Falling edge, Rising edge, Low Level)에 따라 인터럽트가 발생된다는 뜻이다.

 ATmeaga128의 외부 인터럽트 핀 번호는 PD0 {INT0}, PD1 {INT1}, PD2 {INT2}, PD3 {INT3}, PE4 {INT4}, PE5 {INT5}, PE6 {INT6}, PE7 {INT7}이다.

 아래 그림을 보면 쉽게 찾을 수 있다.

ATmega128 핀배치도

외부 인터럽트 관련 레지스터

EICRA(External Interrupt Control Register A)

 외부 인터럽트 INT0 ~ INT3과 관련된 레지스터로 외부 인터럽트 INT4 ~ INT7은 EICRB에서 설정을 한다.

 EICRA는 외부 인터럽트의 감지 방법을 결정할 수 있다. 

 외부 인터럽트의 감지 신호는 다음 그림과 같이 3가지가 있다.

Falling Edge
Rising Edge
Low Level

 위의 3가지 신호에 따라 인터럽트 발동 조건을 설정할 수 있다.

 EICRA의 비트 별 역할은 다음과 같다.

비트 7 6 5 4 3 2 1 0
EICRA ISC31 ISC30 ISC21 ISC20 ISC11 ISC10 ISC01 ISC00
R/W R/W R/W R/W R/W R/W R/W R/W R/W
초기값 0 0 0 0 0 0 0 0

 INTn 인터럽트(n = 0,1,2,3)의 감지 방법을 ISCn1과 ISCn0 (n = 3,2,1,0)의 두 비트로 정할 수 있다.

 인터럽트 감지 제어를 위한 비트 설정은 다음 표에 따라야 한다.

ISCn1 ISCn0 설명
0 0 INTn 핀의 Low Level 신호가 인터럽트 요구
0 1 예약
1 0 Falling edge에서 인터럽트 비동기적 발생
1 1 Rising edge에서 인터럽트 비동기적 발생

EICRB(External Interrupt Control Register B)

기본적인 내용은 EICRA와 같고 INT4 ~ INT7의 인터럽트를 설정할 수 있다.

EIMSK(External Interrupt Mask Register)

 INT0 ~ INT7 외부 인터럽트를 개별적으로 허용하는 데 사용된다. 사용할 외부 인터럽트 비트를 1로 설정하면 외부 인터럽트가 허용되고 0으로 설정하면 인터럽트가 허용되지 않는다. 단 SREG(Status Register)의 I 비트가 1로 set 된 상태여야 한다.

EICRA(External Interrupt Control Register A)

비트 7 6 5 4 3 2 1 0
EIMSK INT7 INT6 INT5 INT4 INT3 INT2 INT1 INT0
R/W R/W R/W R/W R/W R/W R/W R/W R/W
초기값 0 0 0 0 0 0 0 0

SREG(Status Register)

ATMeaga128의 상태 및 연산 명령 실행에 대한 결과를 포함하는 레지스터로 모든 ALU 연산 수행 후 자동으로 갱신된다. 외부 인터럽트나 ATmega128의 35개의 인터럽트를 허용할 때에는 SREG 레지스터의 최상위 비트인 I 비트만 1이나 0으로 쓰면 된다. 

EIFR(External Interrupt Flag Register)

 외부 인터럽트가 요청되면 해당 플래그 비트가 set 된다. 해당 플래그 비트는 인터럽트 서비스 루틴이 수행하면 자동으로 clear 된다.

'Study' 카테고리의 다른 글

웹 애플리케이션  (0) 2019.05.28

+ Recent posts