이번 포스트의 주제는 Cortex-M7의 Exception입니다.

Cortex-M7 Component 중 NVIC에 대해 살펴봤던 내용을 다시 떠올려볼까요?

Cortex-M7에는 Interrupt Controller가 Core 내부에 위치하고 있어서 빠른 처리가 가능하고 
이 Interrupt Controller를 NVIC(Nested Vectored Interrupt Controller)라 했었죠. 

 

여기서 Vectored의 의미는 Interrupt가 발생했을 때,
정해진 Vector Table을 참조해 ISR(Interrupt Service Routine)의 시작 주소로 바로 Branch할 수 있음을 의미하고
Nested의 의미는 Interrupt를 수행하다 더 높은 우선순위를 가진 다른 Interrupt가 발생하면
기존 Interrupt에 대한 처리를 중단하고 우선순위가 더 높은 Interrupt를 처리하는 것이라 했습니다.

 

위와 같은 Cortex-M7의 Interrupt Controller의 특징은 살펴본 적이 있지만
정확히 어떤 과정으로
Interrupt 처리가 이루어지는지는 살펴보지 않았기 때문에 이에 대해서 정리해 나가볼게요.
Interrupt 처리 과정을 보기 전에 이번 포스트에서는 어떤 Exception이 존재하는지 알아볼게요. 


- Exception Type

Exception Number Table

위 사진은 앞서 여러번 본 적 있는 Exception Number Table이에요.

Exception Number 1~15는 내부(internal) interrupts,
16~255는 외부(external) interrupts(1~240가지)로 구성이 될 수 있습니다.

외부 Interrupt의 경우, Cortex-M7을 가져다 시스템을 꾸미는 사람이 설정하는 것이기 때문에 정확히 Define되어 있지 않으니 여기서는 내부 Interrupt(Exception)의 종류에 대해서 정리하고 넘어갑시다.

 

참고로 Interrupt나 Exception이 막 혼용되서 사용되는데
ARM terminology에 따르면, exceptions 1-15 exceptions 라 불리고, exceptions 16-255 interrupts라 불린다 합니다.

 

· Reset

Cortex-M7을 ON 시키거나 Reset을 할 때 발생하는 Exception입니다.
Exception 중 가장 높은 고정 우선순위 -3을 가지고 있습니다.

 

· NMI(Non-Maskable Interrupt)

말 그대로 Masking처리할 수 없는 Interrupt입니다.

그만큼 Cortex-M7에 치명적인 예외상황이 발생했을 때 해당 Exception이 발생하겠네요. 

Exception 우선순위도 Reset 다음으로 높은 고정 우선순위 -2를 가집니다.

 

· HardFault

일반적인 Exception 처리를 할 수 없는 Fault를 의미합니다. 

Exception 우선순위로는 고정 우선순위 -1을 가집니다.

 

· MemManage

MPU(Memory Protection Unit)에서 특정 메모리 영역에 Access하는 것을 제한할 수 있죠.
예를 들어 특정 영역에서 Instruction Fetch를 금지한다거나 하는 것이요.

이렇게 MPU에서 Access제한을 걸어놓은 영역에 Access를 시도하는 경우 MemManage Exception이 발생하게 됩니다.

 

· Bus Fault

Instruction Fetch나 Data Read/Write등의 과정에서 Memory Access Error가 발생하는 경우 Bus Fault Exception이 발생하게 됩니다.

 

· Usage Fault

Undefined Instruction이나 divide-by-zero에 의해 발생된다고 합니다.

Cortex-M7측에 정의되어 있지 않은 Instruction을 지시하면 당연히 무슨 명령인지 모르니 Exception이 발생하겠네요.

 

· SVCall(SuperVisor Call)

SVC instruction에 의해 발생하는 Exception입니다.

Privileged Mode에서 어떤 할 일이 있어서  Privileged(SuperVisor) Mode로 들어가기 위해 SVC instruction을 사용하면 해당 Exception이 발생합니다.

 

· DebugMonitor

Debugging을 할 때, Breakpoint나 Watchpoint 등을 설정하여 진행하게 되는데
이런 Debug Event에 의해서 발생되는 Exception입니다.

 

· PendSV

Context Switching과 같은 OS기반 Software Exception이라고 하는데 이건 잘 이해가 안되네요 :(

 

· SysTick

System Tick Timer에 의해 발생되는 Exception으로
System Tick Timer는 System Timing Reference 생성을 위해 OS에 의해서 사용되는 Timer라고 합니다.

 


이번 포스트에서는 Exception Type에 대해서만 정리해봤습니다.
앞으로 이어지는 Exception에 대한 포스트에서는
고정된 우선순위를 가지는 Exception외에 Configurable 우선순위를 가지는 Exception들의 우선순위가 어떻게 결정되는지와 Exception 처리 과정을 정리해볼게요:)

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기