외부 인터럽트



인터럽트란?


 MCU에서 입력을 받아들이는 방법에는 두가지가 있는데, 하나는 사용자가 명령어를 사용하여 입력핀의 값을 계속 또는 주기적으로 읽어서 변화를 알아내는 폴링(polling)방식이고, 다른 하나는 MCU 자체가 하드웨어적으로 그 변화를 체크하여 변화 시에만 일정한 동작을 하는 인터럽트(interrupt)방식이다.  


아래 그림은 인터럽트의 개념도를 그림으로 나타냈다.

인터럽트는 외부 또는 내부에서 인터럽트 소스(즉 원인)에 의하여 MCU에게 인터럽트신호가 전달되면 MCU는 미리 정해진 작업(인터럽트 서비스 루틴)을 실행한다. 인터럽트가 발생했을때 MCU는 지금까지 하던 프로그램을 일단 중지시키고 사용자에의해 정해진 인터럽트 서비스 루틴을 실행하게 되며, 그 루틴의 실행이 종료되면 다시 원래 실행하던 프로그램으로 돌아가 하던일을 계속하게 된다.

그리고 인터럽트 벡터 테이블이라는것이 존재한다.

인터럽트 벡터 테이블은 각각의 인터럽트 핸들러의 시작 번지를  모아 놓은 것이라고 정의한다.



그렇다면 폴링방식과 인터럽트방식의 차이점은 무엇일까?

폴링 방식에서는 입력핀의 변화를 확인하기위하여 입력핀의 값을 계속 읽을 필요가 있지만 인터럽트 방식에서는 하드웨어적인 변화가 있으면 자동적으로MCU에게 신호가 전달되는 방식이기 때문에 직접 입력핀의 값을 읽을 필요가 없다. 또한 폴링방식은 모든 경우의 입력 또는 값의 변화에 대응하여 처리가 가능하지만 인터럽트 방식은 하드웨어적으로 지원되는 몇개의 입력 또는 값의 변화에만 대응처리가 가능하며 처리속도는 일반적인 경우에 인터럽트 방식이 폴링방식보다 더 빠르다.

 

다시 정리한다면

인터럽트를 발생시킬 수 있도록 만들어진 것(외부 입력 핀, 타이머, 시리얼 포트 등) - 인터럽트 소스(interrupt source)

인터럽트 발생시 분기장소 즉 시작위치를 기록해 놓은 특정번지들의 내용 - 인터럽트 벡터 테이블(interrupt vector table)

인터럽트가 발생 하였을 때 그 인터럽트를 처리하는 프로그램 - 인터럽트 서비스 루틴(interrupt service routine)

라고 한다.




+ Recent posts