Cortex-m3 개발하면서.. 알게된 거다.. 보통 AIC를 통해서 우리는 인터럽트를 걸어왔다.
인터럽트에는.. 크게 하드웨어, 소프트웨어가 존재한다.. ( 누구나 알겠지만..)
보통 우리가 작성하는 인터럽트의 경우 대부분이 소프트웨어 인터럽트가 된다..
이 때 우리는 생각해 본다.. 인터럽트 상태에서 인터럽트가 되나? 된다..!! 단 하드웨어가 지원이 되어야 한다..
인터럽트 컨트롤은 O/S가 컨트롤하기에는.. 복잡하다..왜? 아무때나.. 들어오니깐..!!
즉.. 시스템에서 호출(System call)이나 함수 호출의 경우.. 우리는 마지막 사용 주소를 저장한다..
스택이라 불리는 녀석에게..
인터럽트도 똑같다.. 인터럽트가 발생하면.. 발생 바로 직전의 주소를 저장하게 된다..
하지만.. 여기서 문제는.. 대부분의 시스템 이나 함수의 호출은 메모리에 저장한다.. 따라서..깊이(Depth)는
메모리가 허용하는 만큼.. 내려갈 수가 있다..
헌데..인터럽트는?? -- 어떻게 하느냐? 하드웨어가 한다..왜냐고? 위에도 썼다..아무때나 들어온다..
즉, 언제 어디서 들어올 지 알 수가 없다.. =_=;; 그건 소프트웨어로 어떻게 할 수 있는 문제가 아니다.
따라서.. 하드웨어에서 처리를 해준다... 그리고 Nested Interrupt가 나온다..
즉,.. 인터럽트에 우선순위가 있는 것이다.. 우선순위는 많이 들어보았을 거라고 생각한다..(cf, 라운드 로빈)
네스트 인터럽트.. 인터럽트 덩어리라는 것이다.. 인터럽트가 묶여 있는데.. 어떻게 컨트롤 하겠냐는 것이다.
즉.. 인터럽트라는 개념이.. CPU 갈취(선점)을 초울트라..파워로 하겠다는 것이다..
그러면.. CPU는 하나고.. 인터럽트는 계속 들어온다면..어떻게 되겠는가? 이상해지겠지..
그걸 조정하는게.. nested interrupt control 에서 한다.. 즉, 낮은 우선순위의 인터럽트가 수행 중인데. 그 보다
높은 우선순위를 가지는 인터럽트가 들어오면, 낮은 우선순위의 인터럽트는 선점을 당한다..
이건 당연히 이렇게 되어야지 좀더 real-time에 맞게되는데.. == (내가 무슨말 하는지 모르겠음..ㄷㄷ)
흠흠.. 정리하자면.. 인터럽트를 발생시킬 수 있는 모든 컨트롤을 nested interrupt control에 묶어서.. 내가
사용하고자 하는 녀석에 우선순위를 부여한다.. 중요한 것은 높게.. 덜 중요한 것은 중간 정도로 해서..
이런 과정을 nested interrupt control에서 할 수 있고, 이걸 함으로써, 인터럽트가 꼬이지 않게 만들어 줄 수
있다. 흠.. 뭐.. 어찌됐건..
요즘 나오는 MCU의 경우, nested interrupt를 사용한다..AIC가 아니가..==
그래서 짜증난다..ㅋ








