본문 바로가기

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리/10장: GIC(Generic Interrupt Controller)

[Arm프로세서] 인터럽트 콘트롤러의 기본 구조

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


그림 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 아키텍처의 구조와 원리' 저자>