Did you know that you can navigate the posts by swiping left and right?

인터럽트 개념

15 Jan 2018 . category: tech . Comments
#interrupt #mechatronics #science knowledge

오늘 배운것은 인터럽트인데 그전에 간단한 atmega128이 I/O포트에 대해 설명하자면 여러가지 기능을 가진 핀들이 있고 각각의 레지스터를 가지고 있다. PORTx, DDRx, PINx (x는 포트 A,B,C,D,E,F,G를 나타냄) 3개의 레지스터를 가지고 있고 PORTx는 데이터 출력 레지스터, DDRx는 입출력 방향을 설정하는 레지스터, PINx는 포트 입력 레지스터이다.

인터럽트는 위의 레지스터들을 이용해서 내가 어떠한 정보를 레지스터에 읽기 혹은 쓰기의 명령을 내려 동작을 수행할때(즉 내용을 읽을때) 특정한 소스(조건)이 되면 바로 서비스루틴(내용)을 수행하게 하는 것이다.

(일하다가 높으신분(interrupt)이 뭐좀해라 하면 그걸 하는거다.)

첫번째로는 외부 인터럽트가 있는데 이 외부 인터럽트는 특정 PIN을 지정해서 수행하게 하는데 HIGH, LOW, 상승 edge, 하강 edge일때 인터럽트를 요구해주도록 설정할 수 있다. 주의할점은 내가 납땜을 스위치를 PORTC에 했었는데 포트 E에 타이머/카운터나 외부 인터럽트 혹은 USART 0, 외부메모리에 관련된 기능을 이미 갖고 있어서 스위치를 다시 PORTE로 옮겨야 했다. 다음부터 포트 핀의 기능을 미리 숙지하고 납땜하도록 해야겠다.

다음 인터럽트들은 타이머,통신등이 있는데 이건 나중에 다시 적기로하고 이 인터럽트를 무슨 효과가 있어서 쓰는가를 알아보면 시간이 정확하고 속도와 관계없이 조건에따라 바로 수행할 수 있다는 것이다. 폴링의 경우 정말 찰나의 순간에 내가 수행하고 싶은 작업을 지나칠 수 있지만 인터럽트를 사용하면 그 순간에 상관없이 조건만 충족되면 바로 수행되는 것이다.

그러면 이러한 인터럽트를 조절해주는 레지스터를 살펴보면 제어 레지스터, 마스크 레지스터, 상태 레지스터가 있다. TCCRx(제어 레지스터), TIMSK(마스크 레지스터), STEG(상태 레지스터) 이렇게 지정해서 쓰이는데 제어 레지스터는 이 인터럽트를 출력비교, 오버플로, 캡쳐 이렇게 세가지중 어떠한 경우에 쓸것인지 지정해 주는 것이고 마스크 레지스터는 어떠한 종류의 타이머/카운터를 수행할 것인지 인에이블 해주는 역할을 해준다. 이게 지정이 안되있으면 인터럽트는 수행이 될 수 없다. 상태 레지스터는 전역 인에이블이다. 전체적으로 인터럽트를 할것인지 안할것인지 지정해 줄 수 있다.

이렇게 간단히 인터럽트 개념을 적어보았고 코드에 쓸때에는

interrupt [source] void 이름(void)

이런식으로 쓰면된다.


Me

github를 이용해 만들어본 블로그입니다.