[2025~] Embedded/Free RTOS
[Free RTOS_013] 인터럽트
heylo
2025. 3. 7. 11:59
인터럽트 (Interrupt)
- 비동기적 이벤트의 발생을 처리하기 위한 메커니즘
- 인터럽트 발생시 문맥을 저장하고 ISR로 점프
- 활성, 비활성화 가능
비활성화 시간은 가능한 짧게 해야함
- 지연시간
비활성화 최대시간 + ISR 최소 명령시간
인터럽트
HW에서 발생하는 비동기적 이벤트 발생에 대해
CPU가 대응되는 SW적인 처리를 수행하는 매커니즘
대부분 많은 인터럽트는
해당 인터럽트가 언제 발생하라 지 모릅니다.
타이머 인터럽트처럼
언제 발생할지 예측할 수 있는 인터럽트도 더러 있습니다.
CPU는 인터럽트가 발생하면, 현재 작업을 멈추고
인터럽트를 처리하기 위한 ISR 인터럽트 서비스 루틴을 실행합니다.
인터럽트 서비스 루틴 = 인터럽트 핸들러
필요할 경우, 인터럽트가 HW에서 발생하더라도
ISR이 실행되지 않도록 할 수 있는데
이것을 인터럽트 비활성화 라고 합니다.
그 반대말은 인터럽트 활성화 입니다.
대부분의 임베디드 시스템에서는
인터럽트를 지원하는 다수의 HW들을 사용하므로
이를 위해 별도의 인터럽트를 관리하는 장치를 필요로 하는데
그 장치를 인터럽트 컨트롤러 라고 합니다.
이 장치는 HW 주변 장치 사이에서
인터럽트 신호 전달을 중계하는 역할을 수행합니다.
인터럽트를 비활성화하는 방법에는 두 가지가 있습니다.
첫째, CPU로 입력되는 인터럽트 신호를
CPU 스스로 마스킹하는 것입니다.
이처럼 하면, 외부에서 들어오는 인터럽트 요청이
내부적으로 처리되지 않습니다.
이 경우, 인터럽트 요청에 대한 처리가
거절된 것이 아니고, 잠시 보류된 것입니다.
이후 CPU의 인터럽트 마스킹이 해제되기만 하면
보류되었던 인터럽트 처리가 즉시 시작됩니다.
이 보류라는 용어는, 전문용어로 인터럽트 펜딩 (Interrupt Pending) 이라고 합니다.
인터럽트를 비활성화하는 두 번째 방법입니다.
인터럽트 컨트롤러에 입력으로 들어오는
개별적인 인터럽트 요청 신호를 마스킹하는 것입니다.
이 방법은 HW 주변장치를 필요할 경우,
개별적으로 비활성화 할 수 있다는 점이
첫 번째 방법이었던 CPU 인터럽트 비활성화 방법과 비교됩니다.