8. Interrupt Mechanism

[Polling vs Interrupt]

 

) Polling (폴링) : 계속 체크하는 것을 Default로 합니다.

 

) Interrupt (인터럽트) : 리퀘스트가 들어왔을 때에만 그에 따른 대응을 합니다.

 

Polling Interrupt
Slow Fast
Wasting CPU Time Efficient
Scales Badly Scales Well

) 교수가 교실에서 돌아다니면서 학생 각각을 "도움이 필요한가요?" 라고 물어보면서 체크하는 것을 Polling

) 교수가 할 일을 하고 있다가 학생이 도와달라고 요청이 들어왔을 때, 그 요청을 도와주는 것을 Interrupt

 

이전 챕터에서 했던 실습에서

https://shanate.tistory.com/entry/7-VGA-Peripheral-2

 

UART에서 값이 들어왔는지 판별을 하기 위해서 Polling을 사용하였고 값이 들어왔을 때 그에 따른 대응을 하였습니다.

따라서 위 실습은 Polling을 기반으로 한 코딩입니다.

 

 

 

[Exception AND Interruption]

 

- Exception

) 현재 프로그램을 중단시키는 이벤트

) 어떠한 일을 해야만 하는 것

이 두 가지를 Exception이라고 하며, 이 Exception은 내부에 의해서 발생할 수도 있고, 외부에 의해서 발생할 수도 있습니다.

 

- Exception Handler

: 이벤트가 발생하면 실행되는 코드로써 Exception을 조율합니다.

 

Context Saving : 하던 일을 잠시 저장해두고 멈추는 것.

Context Restoring : 원래 하던 일을 불러오는 것.

 

 

[Interrupt Preemption]

) 인터럽트 사이에서의 우선순위.

) 먼저 들어온 인터럽트를 처리하고 있는 도중에, 최우선순위에 해당하는 인터럽트가 들어왔다면, 현재 인터럽트도 중단시킨 후에 최우선순위 인터럽트를 먼저 수행합니다.

 

 

NVIC가 Interrupt와 관련된 것들을 총괄합니다.

 

NVIC는 다음과 같이 메모리 맵 안에 있습니다.

즉, NVIC를 설정하기 위해서는 0xE000_E1000 ~ 0xE000_ECFF에 접근하면 됩니다.

 

ISER

) 1 : Enable one or more interrupts

) 0 : No effect

) 켜고자 하는 인터럽트에 해당하는 비트

ICER

) 1 : Clear one or more interrupts

) 0 : No effect

) 끄고자 하는 인터럽트에 해당하는 비트

※ 두 개로 나눠서 사용할까? ISER 하나만 가지고 1로 스위치를 올리고 0으로 다시 끄는 것이 덜 복잡하지 않을까?

→ 절차의 간소화를 위해서 ISER과 ICER로 나누게 됩니다. 단순 Enable/Disable을 케이스로 나눔으로써 1을 다시 0으로 변경하고 할 필요가 없음을 말합니다.

 

 

 

 

해당 NVIC를 사용해서 Polling이 아닌 Interrupt를 통해 지난 챕터를 똑같이 구현하는 것이 이번 챕터의 목표입니다.

인터럽트를 사용하기 위해서는 하드웨어와 소프트웨어 처리를 해야만 합니다.

)하드웨어 모듈 자체가 인터럽트를 지원해야만 합니다. ex) UART, TIMER, ...

 

 

 

 

 

 

 

////

해당 코드 또한 추후 수정 후 포스팅 예정.

 

 

 

 

 

p.s

100 퍼센트 완성된 코드를 올리지 않는 이유는

누군가에게는 학점과 직결되는 과제일 수도 있는 것이기 때문이며, 이 코드를 통해 손쉽게 학점을 얻는, 혹은 레포트를 작성하는 것을 예방하기 위해서입니다. 저 또한 이 코드를 작성하기까지 소위 머리 깨지면서 해당 강의를 이해하고 계속 반복해서 들으며 얻은 것이며 아직도 완벽하게 이해하지 못 한 부분도 존재하기 때문에 포스팅들 사이사이 완벽하게 설명을 하지 못 한 부분, 그리고 설명하지 않은 부분이 있습니다.

해당 사항들은 이후 챕터들을 써내려가는 도중에도 중간중간 수정 및 보완을 할 예정입니다.

'IDEC > Cortex - M0' 카테고리의 다른 글

7. VGA Peripheral (2)  (0) 2023.07.24
6. VGA Peripheral (1)  (0) 2023.07.20
5. Timer / GPIO / 7-Segment Peripherals  (0) 2023.07.19
4. AHB UART Peripheral  (0) 2023.07.19
3. AMBA 3 AHB-LITE Bus Architecture  (0) 2023.07.14