AVR 외부 인터럽트 (AVR External interrupt) 제어 레지스터 - AVR 이론

2013.01.05 14:18




현재 군 복무중인 상태입니다.


인터럽트가 무엇일까요?



인터럽트란 Main()에서 기존에 프로그램 처리중에 외부의 신호나 변화에 의해서 인터럽트가 발생되면 그 인터럽트에 대응하는 프로그램을 먼저 처리하고 다시 Main()으로 복귀하여 주 프로그램을 처리하는 과정입니다.


인터럽트는 흔히 게임하는 아들에게 부모님이 심부름을 시켜 아들이 시킨일을 다하고 면 원래하던 게임으로 돌아오는 과정으로 표현하곤합니다.


AVR에서는 타이머/카운터0번, 타이머/카운터1번, 외부인터럽트(INT)등 다양한 인터럽트가 있으며 각각 처리방식에 따라서 또 여러가지로 세분화 됩니다.

여기서는 간단한 AVR실험에 자주 사용하게 될 외부인터럽트에 대해서 다루도록 하겠습니다.


외부 인터럽트?


외부인터럽트는 여러가지가 있겠지만 스위치입력에 인터럽트라는 속성을 부여했다고 생각하면 되겠습니다.

앞에서 스위치입력으로 LED를 제어해 보았는데 처음에 1번 스위치를 눌렀다면 다른 스위치를 누른다고 해도 1번 스위치를 눌렀을 때 프로그램이 다 끝날때까지 다른스위치를 눌러도 해당 프로그램이 동작하지 않았습니다.

하지만 1번 스위치의 프로그램을 메인프로그램에 짜고, 다른 스위치에 인터럽트를 걸어둔다면 다른스위치를 눌렀을 때 메인프로그램을 잠시 멈추고 다른스위치를 눌렀을 때 프로그램을 먼저 동작시키겠죠!

외부인터럽틀를 사용하는데 사용하는 레지스터는 3가지가 있습니다. GIMSK, MCUCR, EIFR



EIFR (External Interrupt Flag Resister)


EIFR레지스터는 외부인터럽트 상태 레지스터인데 TINY2313의 경우 외부인터럽트핀이 INT1, INT0 두개뿐이기 때문에 INTF1과 INTF0 두개밖에 없습니다.

해당 레지스터는 인터럽트가 발생되면 발생된 비트가 1로 설정됩니다.

1로 설정된 후에 새로 인터럽트 신호를 받을려면 1로 설정된 비트를 0으로 클리어 시켜야 다시 인터럽트를 받을 수 있는 상태가 됩니다.

클리어는 해당비트에 1을 써주면 비트가 클리어 됩니다.



GIMSK (Genaral Interrupt Mask Register)


GIMSK의 경우 AVR에서 각각 인터럽트시 인터럽트를 사용하라고 허용하라고 설정하는 레지스터들이 있는데 GIMSK는 외부 인터럽트사용시에 외부인터럽트를 사용하라고 허락하는 레지스터입니다

각각 해당 레지스터 7번, 6번비트가 각각 INT1, INT0번핀의 인터럽트를 허용하는 비트이고,

외부인터럽트를 사용하고자 할때는 해당 비트에 1을 써주어야 합니다.

GIMSK레지스터는 AVR시리즈에 따라 다르지만 EIMSK(External Interrupt Mask Register)로 되어있는 시리즈도 있습니다.


MCUCR (MCU Control Register)


MCUCR레지스터는 다양한 기능이 있으나 외부 인터럽트 사용시에는 3~0번 비트만 사용됩니다.

설정값을 표로보면 1~0번 비트의 설정에 따라 인터럽트 핀 INT0번의 동작옵션을 설정 할 수 있고 3~2번 비트의 설정에 따라 INT1번의 동작옵션을 설정 할 수 있습니다.

 ISC01

 ISC00

상태 

0

0

Low 레벨 인터럽트 사용 

0

1

기능없음

1

0

하강 에지 인터럽트 사용 (Rising Edge)

1

1

상승 에지 인터럽트 사용 (Falling Edge)



 ISC11

 ISC10

 상태

0

0

Low 레벨 인터럽트 사용 

0

1

기능없음 

1

0

하강 에지 인터럽트 사용 (Rising Edge)

1

1

상승 에지 인터럽트 사용 (Falling Edge)


BinGoon AVR/AVR 연습, Tutorial , , , ,

  1. Blog Icon
    Hans

    강좌 잘보고있습니다 감사합니당!

  2. 감사드려요..^
    강좌라고 할 것도 없는데요.ㅎ
    계속해서 열심히 포스팅하겠습니다.

  3. Blog Icon
    Jin

    좋은 정보 감사해요 ^^ 잘 봤어요~

  4. 감사드립니다^ 더 유익한 포스팅으로 찾아올수 있도록 하겠습니다^

  5. Blog Icon
    Hyun

    atmega128이랑 tiny2313에서의 MCUCR의 역할이 틀린가요? 지금 128 데이터시트보고있는데 이론에서 설명되있는거랑 데이터시트에 표시되있는거랑 비트역할이 틀리네요

  6. 사용하시는 AVR에 따라서 차이는 있을 수 있습니다. 그리고 제 블로그에 설명되어있는 레지스터는 모두 Attiny2313기준으로 설명되어 있기때문에 참고하셔서 다른 AVR시리즈도 이해 하는데 도움이 되시기를 바랍니다. (거의 사용 및 응용에 주안점을 두고 있어서요.^^)

    다른 부분은 MCUCR외에도 외부인터럽트 레지스터가 Tiny2313에서는 GIMSK로 컴파일러에 정의되어 있다면, Mega128은 인터럽트를 지원하는 핀이 더욱 많아서 인지 EIMSK로 별도로 분리되어 있는 경우를 볼 수 있답니다.^

  7. Blog Icon
    avr_꿈나무

    감사합니다. 여기 저기 검색하다가 들어왔는데 이해하는데 정말 많은 도움이 되고 있습니다.

  8. 도움되서 다행입니다.^
    더 좋은 포스팅을 작성하도록 노력하겠습니다.^

  9. Blog Icon

    안녕하세요~ 늦깎이 BinGoon님 블로그 교육생예요

    MCUCR 레지스터에서

    1 0 하강엣지 falling edge
    1 1 상승엣지 rising edge

    글이 바뀌었네요

    영어도 모르는
    초보라 데이터 시트 비교하다가 혼란이^^

티스토리 툴바