인터럽트 콘트롤러가 필요한 이유를 알아봤으니 이어서 인터럽트 콘트롤러를 소개합니다. 다음 그림은 인터럽트 콘트롤러의 기본 구조도입니다.


그림 16.1 인터럽트 콘트롤러의 기본 구조

그림에서 가장 왼쪽에 있는 USB나 센서, 키보드는 외부 I/O 디바이스를 나타냅니다. 이와 같은 외부 I/O 디바이스에서 인터럽트 신호를 발생하면 인터럽트 콘트롤러가 받아서 처리합니다.

보다시피 인터럽트 콘트롤러는 CPU 옆에 달려 있습니다. 여러 외부 I/O 디바이스에서 올려준 인터럽트를 처리하는 일종의 창구로 다음과 같은 역할을 수행합니다. 

    “여러 외부 I/O 디바이스가 올려준 인터럽트를 받아 IRQ나 FIQ로 CPU에 전달”

이는 그림의 nIRQ나 nFIQ에 해당되며 인터럽트 콘트롤러와 CPU 사이의 인터페이스는 nIRQ나 nFIQ로 연결됩니다. 여기서 n은 IRQ나 FIQ가 다수 존재할 수 있다는 의미입니다.

이 밖에도 인터럽트 콘트롤러는 다음과 같은 기능을 수행합니다.

   ● 각각 인터럽트를 활성화 혹은 비활성화
   ● 각각 인터럽트의 우선 순위 레벨을 설정
   ● 각각 인터럽트를 처리한 타겟 프로세서 리스트 설정
   ● 각각 인터럽트를 논시큐어 혹은 시큐어로 설정
   ● peripheral 인터럽트를 level-sensitive 혹은 edge-triggered으로 설정

대부분 MCU나 SoC 업체에서 디자인한 인터럽트 콘트롤러는 위에서 언급한 기능을 지원합니다.

인터럽트 콘트롤러의 역할이 무엇인지 물어보면 다음과 같이 답할 수 있습니다. 

   ● CPU와 I/O 장치 사이에 존재
   ● I/O 장치가 유발한 인터럽트를 받아 CPU에게 전달

여기까지 인터럽트 콘트롤러를 소개했으니 다음 포스트에서는 Arm에서 제공하는 인터럽트 콘트롤러인 GIC를 배워 봅시다.

 

< '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리' 저자>

 
 

+ Recent posts