2008년 7월 17일 목요일

ARM 인터럽트 컨트롤러

주변 장치나 디바이스가 실행되려고 할 때, 이것은 프로세서에게 인터럽트를 발생시킨다. 인터럽트 컨트롤러란 인터럽트 컨트롤러 레지스터 안에 있는 해당 비트를 1로 설정함으로써 특정 시간에 어떤 주변 장치나 디바이스가 프로세서에게 인터럽트를 발생시킬수 있도록 할 지에 대한 소프트웨어 정책을 제공한다.

ARM 프로세서에서 사용할 수 있는 2가지 인터럽트 컨트롤러로는 표준 인터럽트 컨트롤러와 백터 인터럽트 컨트롤러(VIC, Vector Interrupt Controller)가 있다.

표준 인처럽트 컨트롤러는 외부 다바이스가 서비스를 요청하면, 그 인터럽트 신호를 프로세서 코어에게 보낸다. 이 컨트롤러는 각 디바이스나 디바이스 세트의 요청을 무시할지, 수렴할 지에 대해 프로그램적으로 설정할 수 있다. 인터럽트 핸들러는 인터럽트 컨트롤러 안에 있는 디바이스 비드맵 레지스터를 읽은 후 어떤 디바이스가 서비스를 요청 했는지를 결정한다.

VIC는 표준 인터럽트 컨트롤러보다 강력한 기능을 가지고, 인터럽트에 우선순위를 부여하여 어떤 디바이스가 인터럽트를 발생시켰는지를 쉽게 결정할 수 있다. VIC는 운선순위와 각 인터럽트에 대한 핸들러 주소를 살펴본 후, 새로운 인터럽트가 현재 실행되고 있는 인터럽트 핸들러보다 우선순위가 높은 경우에만 프로세서에게 인터럽트 신호를 보낸다. VIC는 다비이스를 위한 핸들러 주소를 읽어들이기 위해 표준 인터럽트 익셉션 핸들러를 호출하거나 디바이스를 위해 직접 핸들러로 분기한다.

댓글 없음: