대학교

마이크로프로세서 - (8) 인터럽트

매 석 2023. 11. 6. 20:58
반응형

폴링과 인터럽트

- 폴링

코드 나열 순서에 의해 실행 순서 결정

모든 코드는 동일한 실행 우선 순위를 가짐

정해진 순서에 따라 실행되는 구조로 하드웨어의 지원이 필요

코드 작성과 이해가 쉬움

- 인터럽트

우선 순위에 따라 실행 순서 결정

인터럽트에 따라 서로 다른 실행 우선 순위 가짐

우선 순위 높은 코드 먼저 실행되는 구조로 하드웨어에 의해 우선 순위에 따른 처리 지원

코드 작성과 이해가 복잡하고 어려움

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

인터럽트 발생 시 현재 코드 정지하고 ISR로 즉시 이동해 인터럽트를 먼저 처리한다.

동시에 여러 개의 인터럽트 발생 시 우선 순위 높은 인터럽트를 우선 처리한다.

 

ATmega128의 인터럽트

35개의 언터럽트를 사용할 수 있다.

인터럽트 벡터 : 인터럽트 발생했을 때 처리가 옮겨질 ISR의 메모리 주소

인터럽트 벡터 테이블 : 인터럽트 벡터를 모아놓은 테이블

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

 

위와 같이 35개가 있고, 벡터 번호가 우선 순위를 의미한다. 즉 RESET이 우선 순위가 가장 높다.

인터럽트 처리 순서

  1. 인터럽트 발생
  2. 인터럽트 벡터 테이블의 해당 인터럽트 벡터가 저장된 인터럽트 벡터 테이블 위치로 이동
  3. 인터럽트 벡터 값에 해당하는 ISR로 이동
  4. ISR 처리
  5. 인터럽트 처리 전에 수행하던 전의 코드로 되돌아감

인터럽트 조건

  1. 전역적 인터럽트 비트 세트

- 상태 레지스터 SREG의 7번 'I'비트가 세트되어야 한다. sei()

2. 개별 인터럽트 활성화 비트 세트

- 35개 각각의 개별 인터럽트가 존재, 기본값은 비활성화이다.

3. 인터럽트 발생 조건을 충족해야 한다.

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

- SREG 상태 레지스터

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

비트마다 여러 기능이 존재한다. 특히 7번 비트는 전역적인 인터럽트 발생에 관한 내용이다.

- ISR 코드

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

반환값이 없고 매개변수의 데이터 형이 없는 함수이다.

코드 상에서 따로 ISR을 호출하지 않고 하드웨어에 의해 호출되는 형식이다.

그렇기에 코드만 보면 잘 이해가 되지 않기에 이 특성을 알아야 한다.

처리할 인터럽트의 종류는 매개변수로 구분할 수 있다.

아래 표를 참고하여 어떤 인터럽트가 어떤 이름인지 확인할 수 있다.

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

 

- 인터럽트 사용 시 주의사항

  1. 중첩된 인터럽트

- 인터럽트는 인터럽트될 수 없다.

- ISR 실행 도중 발생한 인터럽트는 처리되지 못한다.

- ISR은 가능한 짧게 작성해야 한다.

2. 인터럽트 우선순위

- 번호가 낮은 인터럽트가 우선순위가 높다.

- 우선순위가 높은 인터럽트가 먼저 처리된다.

- 우선순위가 가장 높은 인터럽트는 리셋 인터럽트이다.

3. 최적화 방지의 필요성

- ISR은 코드 내에서 호출되지 않기에 메인코드와 무관한 코드로 관주될 수 있다.

- ISR에서 값을 변경하는 변수는 'volatile' 키워드를 사용해야 한다.

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

 

외부 인터럽트

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

위에서 봤던 35개 중에 RESET을 제외하고 가장 우선순위가 높은 인터럽트이다.

범용 입출력 핀의 값이나 상태 변화 시에 인터럽트가 발생한다.

해당 8개로만 외부 인터럽트를 발생시킬 수 있다.

- EIMSK 레지스터

외부 인터럽트 활성화 레지스터

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

- EICRA 레지스터

인터럽트 발생 시점 결정 (INT0~INT3)

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

- EICRB 레지스터

인터럽트 발생 시점 결정(INT4~INT7)

상승 에지와 하강 에지에서 모두 인터럽트가 발생하는 옵션이 존재한다.

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍