본문 바로가기

잡다한 IT/ARM

ARM에서 인터럽트 처리 과정

인터럽트의 개요


■ Interrupt


디바이스가 입력/출력/에러의 상황에 대한 프로세서의 처리를 요구하는 것.


■ IRQ Pin


인터럽트 요구를 위해 디바이스 별로 한 개씩 갖고 있는 하드웨어 신호 핀.


■ Interrupt Number


각 인터럽트 별로 할당된 번호. 한 개의 디바이스가 여러 개의 번호를 소유 할 수 있다.


■ Interrupt Service Routine


각 인터럽트에 대한 서비스 함수


■ Interrupt Vector


인터럽트 번호와 인터럽트 서비스 루틴의 순서쌍


■ Interrupt Vector Table


Interrupt Vector 를 모아 놓은 참조 테이블


■ Interrupt Controller


각 디바이스 별 인터럽트 요구를 일차적으로 처리하여 가장 우선 순위가 높은 인터럽트를 프로세서에게 처리 요구하는 장치




ARM에서 인터럽트가 처리되어지는 과정


1. 디바이스에 의한 인터럽트 요구


2. 인터럽트 컨트롤러에 의한 IRQ 발생


3. IRQ Exception 발생


4. IRQ 모드 변경 및 IRQ Exception Vector 로 분기


5. IRQ Handler 로 분기


6. Prologue ( 레지스터 Set을 저장)


7. Get Interrupt Number


8. Get ISR address ( From Interrupt Vector Table)


9. Call ISR


10. Epilogue ( 저장된 레지스터 Set 을 복구)


11. Return from Exception



Exception Vector Table


예외 

모드 

벡터주소 

리셋 

SVC 

0x00000000 

정의되지 않은 명령어 

UND 

0x00000004 

Supervisor call 

SVC 

0x00000008 

프리페치 중단(명령어 페치 메모리 폴트) 

Abort 

0x0000000C 

데이터 중단(데이터 접근 메모리 폴트) 

Abort 

0x00000010 

IRQ 

IRQ 

0x00000018 

FIQ 

FIQ 

0x00000010 


※ 0x00000014 는 비어있다.

※ 0x00000018 은 IRQ Handler 가 된다.

반응형

'잡다한 IT > ARM' 카테고리의 다른 글

부트로더 동작 과정  (0) 2018.08.30
ARM 레지스터 간단한 설명  (0) 2018.08.03
ARM 아키텍쳐 특징  (0) 2018.08.03
Aligned Access & Unaligned Access  (0) 2018.07.19
ARM의 Register  (0) 2018.07.11