일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- down-casting
- 임베디드 초급
- AVR
- 임베디드시스템프로그래밍
- 피터슨 알고리즘
- 데커
- 외부인터럽트
- 2019년 회고
- 코딩
- AVR기초
- 리눅스 setvbuf
- 다운캐스팅
- 임베디드 입문
- peterson 알고리즘
- 데커 알고리즘
- setvbuf
- c언어 setvbuf
- 임계 영역
- 대구소프트웨어고등학교
- 데커 알고리듬
- Dekker
- 리눅스 기초
- 무래함의 비용
- 임베디드 시스템 프로그래밍
- 워치독 타이머
- 임베디드
- 아두이노
- up-casting
- 업캐스팅
- 임베디드 개발자
- Today
- Total
인성 좋은 인성이
AVR-외부인터럽트 본문
이 글의 내용은 ATmega328을 베이스로 합니다.
인터럽트란 무엇인가? 우선 인터럽트가 돌아가는 간단한 이해를 하고 있어야 인터럽트를 다룰 수 있다. 물론 인터럽트에 대한 이해가 없다고 인터럽트를 다루지 못한다는 것은 아니다. 하지만 인터럽트를 효율적으로 사용하기 위해서는 그 메커니즘을 이해할 필요가 있다.
인터럽트라는 개념은 기회가 된다면 자세하게 다루어 볼 생각이 있다. 다만 당장은 간단하게만 설명을 할 것이다. 인터럽트라는 것은 어떠한 특별한 이벤트가 발생했을때 발생하는 동작이라고 생각하면 된다. 즉 인터럽트는 평소에 동작하는 것이 아니라 일정한 조건이 충족될 때 동작하는 것이다.
그럼 언제 인터럽트를 활용해야 하는가? 사실 인터럽트는 사용하기 나름이다. 센서의 값을 받아올 때도 사용하고, 특정 동작을 내가 원할 때 실행시키기 위해서 사용하기도 한다. 결국 인터럽트가 돌아가는 메커니즘을 이해하고 적절하게 적용하는 것이 지해 로운 선택인 듯하다.
avr의 외부 인터럽트
avr은 외부 인터럽트를 컨트롤 하기위한 레지스터를 제공한다. 우리가 avr에서 외부인터럽트를 다루기 위한 레지스터는 많지 않다. EICRA, EIMSK 정도만 알아도 활용할 수는 있다.
EICRA : External Interrupt Control Register A

- bit가 8개가 존재한다. 여기에서 사용할 bit는 0~3bit로 4개만 사용한다. 외부 인터럽트는 외부로부터 들어오는 신호에 대해서 인터럽트가 발생되는 것이다. 그렇기 때문에 전용 포트로부터 전기적인 신호를 받아야 하고 ATmega328에서 지원하는 포트 개수가 2개 이기 때문에 0~3까지의 비트만 사용하는 것이다.
그럼 저 4bit 각각의 이용하는 방법을 알아보자. 우선 EICRA의 0~3bit의 역할은 "외부 신호가 들어올 건데 어느 시점에 인터럽트를 발생할래?" 하는 것이다. 0~1 bit는 INT0에 대한 세팅을, 2~3 bit는 INT1에 대한 셋팅을 한다. 각각 change, falling, rising으로 세팅할 수 있다.

EIMSK : External Interrupt Mask Register

- EIMSK는 2개의 bit를 사용한다. 각각 INT0, INT1의 Enable여부를 0,1로 세팅해준다.
'IT공부 > AVR' 카테고리의 다른 글
AVR-와치독 타이머 (0) | 2019.08.07 |
---|---|
AVR-타이머 (0) | 2019.08.04 |