본문 바로가기
한국으로/ARM

Interrupt Controller

by 영킴. 2018. 7. 29.

Interrupt Controller

ARM 코어에는 FIQ와 IRQ가 각각 하나씩만 존재한다. 하지만 인터럽스 소스들은 여러개가 있기 때문에, 코어 외부에 인터럽트 컨트롤러가 인터럽트 개수를 확장하고 운용한다.

인터럽트 컨트롤러의 역할

1. 인터럽트 소스 허용 여부 결정
2. 각 인터럽트의 우선순위 결정
3. IRQ, FIQ 결정


IRQ 핸들러 설계 예시

HandlerIRQ:
    sub lr, lr, #4
    stmfd sp!, {r0-r3, r12, lr}
    ldr r0, =ICCIAR_CPU0
    ldr r1, [r0]
    ldr r2, 0x3FF
    and r1, r1, r2
    ldr r0, =ISR_Vector
    ldr r2, [r0, r1, lsl #2]
    blx r2
    ldmfd sp!, {r0,-r3, r12, pc}^


핸들러는 스크래치 레지스터를 포함해 어떤 헤지스터도 훼손하면 안된다.
따라서 LR-4 위치로 복귀하고, ^옵션으로 PC와 SPSR을 동시에 복원시켜야 한다.





'한국으로 > ARM' 카테고리의 다른 글

MMU  (0) 2018.07.29
Cortex-A9 Coprocessor  (0) 2018.07.29
ARM Mode(모드) and Exception(예외)  (0) 2018.07.24
Tail Call  (0) 2018.07.24
정수 승격과 형변환 문제  (0) 2018.07.22
다중 메모리 이동: LDM, STM  (0) 2018.07.22
AAPCS와 레지스터 테이블  (0) 2018.07.21
ARM의 특수 용도 레지스터  (0) 2018.07.21