임베디드 용어 사전
GPIO·인터럽트

NVIC

Cortex-M의 인터럽트 컨트롤러. 어떤 인터럽트를 받을지, 어느 것을 먼저 처리할지 정한다.

Nested Vectored Interrupt Controller. 이름의 Nested(중첩)Vectored(벡터) 가 핵심이다.

Vectored   인터럽트 번호로 핸들러 주소를 바로 찾는다 (분기 검사 불필요)
Nested     처리 중이라도 더 높은 우선순위가 오면 그것을 먼저 한다

우선순위 규칙

숫자가 작을수록 높다. 0 이 가장 급하다.

NVIC_SetPriority(TIM2_IRQn, 2);
NVIC_EnableIRQ(TIM2_IRQn);

우선순위 비트 수는 칩마다 다르다(보통 3~4비트). 상위 비트만 유효하므로 같은 값을 넣어도 칩이 다르면 결과가 다를 수 있다.

선점과 서브 우선순위

우선순위는 선점 그룹과 서브 그룹으로 나뉜다.

선점 우선순위   다르면 중첩(선점)이 일어난다
서브 우선순위   같은 선점 그룹 안에서 '동시에 대기 중일 때' 순서만 정한다

초기화 순서

우선순위를 먼저 정하고 나서 활성화한다. 순서를 바꾸면 설정 전에 인터럽트가 들어올 수 있다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 인터럽트와 NVIC — 하던 일을 멈추고 달려가기