MCU - 인터럽트 (1)
인터럽트
인터럽트란, 프로그램이 수행되고 있는 동안에 어떤 조건이 발생하여 수행 중인 프로그램을 일시적으로 중지하게 만드는 조건이나 사건의 발생을 의미한다.
인터럽트는 사건에 대해 비동기적으로 반응한다.
인터럽트 프로그램 실행 과정
마이크로컨트롤러가 프로그램을 실행하는 과정은 한번에 하나의 명령어만 처리할 수 있다.
그러므로 인터럽트가 발생하면 현재 수행하던 Main 프로그램을 일시 중단하고 인터럽트 처리를 위한 ISR 프로그램을 수행한 후, 다시 원래 Main 프로그램으로 복귀하는 구조로 이루어진다.
Main Program이 비동기적으로 발생한 event에 대해 반응하여 프로그램을 수행할 수 있다.
이처럼 비동기적인 event에 대응하여 인터럽트를 처리하는 프로그램을 인터럽트 서비스 루틴 (Interrupt Service Routine) 또는 인터럽트 핸들러 (Interrupt Handler)라고 부른다.
Main Program을 기본 레벨에서의 수행, Foreground에서 수행하는 프로그램이라고 부른다.
ISR을 인터럽트 레벨에서 수행, Background에서 수행하는 프로그램이라고 부른다.
인터럽트의 구분
- 인터럽트 발생 원인에 따른 구분
1) 하드웨어에 의한 인터럽트
- 마이크로컨트롤러에 연결된 하드웨어에 의해 발생하는 인터럽트
- 내부 기능에 의해 발생하는 내부 인터럽트
- 외부 소자에 의해 발생하는 외부 인터럽트
2) 소프트웨어에 의한 인터럽트
- 정의되지 않은 명령의 실행, 연산 불가 명령 실행 (0으로 나누기)
- 위와 같은 소프트웨어적인 이상 동작에 의해 발생하는 인터럽트
- 인터럽트 발생 시, 처리 방식에 따른 구분
1) 일반적인 인터럽트
- 프로그래머가 인터럽트 요청을 무시할 수 있는 인터럽트를 말한다.
- 인터럽트 마스크 레지스터 또는 Interrupt Enable Register를 이용하여 설정할 수 있다.
- 각각의 레지스터를 개별적으로 설정하고, 전체 인터럽트 허용 레지스터를 설정해준다.
2) 차단 불가 인터럽트
- 프로그래머가 인터럽트 요청을 무시할 수 없는 인터럽트를 말한다.
- 전원 이상이나 비상 정지 스위치, 리셋 등과 같은 시스템에 치명적인 오류가 발생한 경우를 처리하기 위해 사용된다.