본문 바로가기
Embedded System/AVR

[AVR] 인터럽트 (Interrupt) (1)

by goatlab 2022. 6. 9.
728x90
반응형
SMALL

인터럽트 (Interrupt)

 

​인터럽트는 본래 '방해하다', ' 중단시키다'라는 사전적 뜻을 가졌다. AVR에서도 마찬가지로  ​어떠한 주 작업을 하던 도중에 방해하는 원인이 생겨서 작업을 멈추는 것을 의미한다.  하지만 주 작업이 멈춘다고해도 방해가 되는 원인이 사라지면 다시금 복귀하여 원래의 주 작업을 수행하는 기법을 인터럽트라고 한다.

 

중요한 요소

 

 

- 인터럽트 소스 : 어떤 장치가 인터럽트를 발생하였는지 

- 인터럽트 벡터 : 인터럽트 발생 시 어떤 처리를 할지

- 인터럽트 우선순위 : 인터럽트가 두 개 이상 발생 시 어떤 방식으로 언제 처리할지

 

인터럽트 흐름도

 

 

 

인터럽트 종류

 

1) 발생 원인 : 하드웨어와 소프트웨어 (하드웨어의 외부 인터럽트 또는 내부 인터럽트) 

2) 차단 여부 : 차단 가능 (INT), 차단 불가능 (NMI) ​

3) 확인 가능 : 폴링 (Polling), 벡터 (Vector)

 

여기서, AVR이 지원하는 것은 외부 인터럽트 차단 가능 인터럽트 (INT), 벡터 (Vector)이다.

 

발생 원인 인터럽트

 

인터럽트를 발생 원인에 따라서 하드웨어 인터럽트와 소프트웨어 인터럽트로 나눌 수 있다. 여기서 하드웨어 인터럽트는 다시 외부 인터럽트와 내부 인터럽트로 나뉘게 된다.

 

외부 인터럽트 : 전원, 입출력 장치, 주변 장치 등과 같은 외부 장치에 의해서 발생하는 인터럽트로 전원 이상, CPU 동작 이상, 타이머 오버 플로우, A/D 변환 완료, 시리얼 통신 수신 완료 등과 같은 인터럽트가 있다.

 

AVR에서는 내부 인터럽트를 지원하지 않기 때문에 모든 인터럽트는 외부 인터럽트라고 생각하면 된다.

 

차단 여부 인터럽트

 

인터럽트의 차단 여부에 따라서 인터럽트가 발생했을 때 무시할 수 있는 (차단할 수 있는) 인터럽트인 차단 가능 인터럽트 (INT) 와 차단이 불가능한 인터럽트 (NMI)로 나뉘게 된다. 

 

AVR에서는 차단 불가능한 인터럽트 (NMI)을 지원하지 않으므로 모든 인터럽트는 차단 가능한 INT라고 생각하면 된다.

 

확인 가능 인터럽트

 

인터럽트를 확인하는 방법에 따라서 차례대로 장치를 검사하기 때문에 하드웨어 구조가 단순하여 쉽게 만들 수 있고 우선 순위를 쉽게 바꿀 수 있다. 하지만, 모든 장치를 검사해야하기 때문에 장치의 수에 영향을 받고 응답속도가 느린 폴링 방식과 하드웨어 구조가 복잡해 만들기는 쉽지 않지만 응답 속도가 매우 빠르고 장치 수에 거의 영향을 받지 않는 벡터 방식이 있다.

 

AVR에서는 빠른 응답 속도가 요구되는 벡터 방식을 택하고 있다.

 

AVR은 인터럽트를 차단이 가능한데, 이를 다시 허용하는 것도 가능하다. 전체 인터럽트를 모두 허용/차단할 수 있고 개별적으로 특정한 인터럽트만 허용, 차단할 수 도 있다.

 

단, 개별적으로 허용/차단 하는 경우는 각각의 레지스터 설정을 변경해주어야 하는 번거로움이 있다. 그러나 전체 인터럽트 허용/차단은 EI (Enable Interrupt), DI (Disable Interrupt)라는 명령을 사용하여 구현할 수 있다. AVR에서는 EI 명령을 SEI DI 명령을 CLI로 명령어를 실행하며, 이와 같은 명령어 대신에 SREG 레지스터의 I 비트를 세트/클리어를 실행해도 동일한 결과를 가져온다. C언어에서는 sei(), cli()로 사용한다.

728x90
반응형
LIST

'Embedded System > AVR' 카테고리의 다른 글

[AVR] 인터럽트 (Interrupt) (3)  (0) 2022.06.09
[AVR] 인터럽트 (Interrupt) (2)  (0) 2022.06.09
[AVR] CTC 비교매치 모드 인터럽트  (0) 2022.06.09
[AVR] JMOD-128-1  (0) 2022.06.09
[AVR] 타이머 (Timer)  (0) 2022.06.02