Nested Vectored Interrupt Controller. 이름의 Nested(중첩) 와 Vectored(벡터) 가 핵심이다.
Vectored 인터럽트 번호로 핸들러 주소를 바로 찾는다 (분기 검사 불필요)
Nested 처리 중이라도 더 높은 우선순위가 오면 그것을 먼저 한다
우선순위 규칙
숫자가 작을수록 높다. 0 이 가장 급하다.
NVIC_SetPriority(TIM2_IRQn, 2);
NVIC_EnableIRQ(TIM2_IRQn);
우선순위 비트 수는 칩마다 다르다(보통 3~4비트). 상위 비트만 유효하므로 같은 값을 넣어도 칩이 다르면 결과가 다를 수 있다.
선점과 서브 우선순위
우선순위는 선점 그룹과 서브 그룹으로 나뉜다.
선점 우선순위 다르면 중첩(선점)이 일어난다
서브 우선순위 같은 선점 그룹 안에서 '동시에 대기 중일 때' 순서만 정한다
초기화 순서
우선순위를 먼저 정하고 나서 활성화한다. 순서를 바꾸면 설정 전에 인터럽트가 들어올 수 있다.