구현 목표
- switch1을 누를때마다 LED가 ON과 OFF를 반복
- switch2를 누르면 switch1을 누른 횟수를 LED로 표현
외부 인터럽트 관련 레지스터
- EIMSK (External Interrupt Mask Resister)
Interrupt0~7을 개별적으로 허용하는데 사용
SREG Resister의 Global Interrupt 허용비트 I비트가 1로 되어야 실제 허용 가능
- EIFR (External Interrupt Flag Resister)
Interrupt0~7에 신호가 입력되어 트리거 되었음을 표시
자동으로 값 변화(직접 건드릴 필요 없음)
강제로 0을 clear하려면 해당 비트에 1을 write
- EICRA (External Interrupt Control Resister A)
외부 인터럽트 INT0~3으로 입력되는 각각의 외부신호에 대한 trigger방법 결정
0b(ab)(cd)(ef)(gh) 두 비트가 하나의 인터럽트를 담당하여 3가지 방법의 트리거 방법 결정
- EICRB (External Interrupt Control Resister B)
외부 인터럽트 INT4~7으로 입력되는 각각의 외부신호에 대한 trigger방법 결정
0b(ab)(cd)(ef)(gh) 두 비트가 하나의 인터럽트를 담당하여 4가지 방법의 트리거 방법 결정
- SREG
I비트(7번 비트): Global Interrupt Enable
#define 전처리기를 이용하여 C언어 함수로 구현됨
sei(): 외부 인터럽트 전체 허가
cli(): 외부 인터럽트 전체 금지

* 오타 수정: 메인함수의 EICRB = 0x0A;에 대한 주석(상승에지에 트리거 된다. → 하강에지에 트리거 된다.)
'학습 > ATmega128' 카테고리의 다른 글
| 외부 인터럽트 #3 (0) | 2021.09.30 |
|---|---|
| 외부 인터럽트 #2 (0) | 2021.09.30 |
| FND제어 연습 #2 (0) | 2021.09.23 |
| FND제어 연습 #1 (0) | 2021.09.17 |
| LED제어 연습 (0) | 2021.09.11 |