AVR 컨트롤러 - 인터럽트(Interrupt)
학습목표
- 인터럽트의 개념을 이해하고 LED를 활용하여 코딩을 할 수 있다.
P/131, Interrupt
정상적인 프로그램의 실행순서를 변경하기 보다 수행이 시급한 작업을 수행한 후에 원래의 프로그램으로 복귀하는 것을 Interrupt라 한다.
인터럽트의 종류
인터럽트를 나누는 방법은 총 3가지이다. 3가지 방법과 중요한 인터럽트는 다음과 같다.
1. 인터럽트 발생 원인에 따른 분류 - 외부 인터럽트
2. 인터럽트 발생시 마이크로프로세서의 반응 방식에 따른 분류 - 차단 가능 인터럽트
3. 인터럽트를 요구한 입/출력 기기를 확인하는 방법에 따른 분류 - 벡터형 인터럽트
외부 인터럽트: 외부 마이크로 프로세서에서 신호가 들어와 인터럽트가 수행되는 방식이다.
//DMA: Direct Memory Access
차단 가능 인터럽트: 인터럽트가 걸린 상태에서 다른 인터럽트가 수행되는 것을 허용하지 않는 인터럽트이다.
벡터형 인터럽트:
인터럽트도 실행우선순위를 설정하여 실행시킬 수 있다.
인터럽트의 처리 과정
1. 인터럽트 요청 신호의 검출
2. 인터럽트 우선순위 제어 및 허용 여부 판단
3. 인터럽트 처리루틴의 시작 번지 확인
4. 복귀주소 및 레지스터를 저장
5. 인터럽트 서비스 루틴을 실행
6. 인터럽트 서비스 루틴을 종료하고 원래의 주프로그램으로 복귀
SREG &= 0x7F;
=> SREG = SREG & 0x7F;
EIMSK를 셋해준다.
define작업부터 우선 해주자.
SREG = 0x5F;
EICRA = 0x69;
EICRB = 0x6A;
EIMSK = 0x3D;
DDRD = 0x0E;
DDRA = 0xFF;
트리거 방식(p/145)
스위치를 뗄 때 입력 값이 들어가도록 해보자.
/*** 셋 & 리셋 코딩 ***/
마스크(리셋)
&= 0xFF
해당 비트만 변동
|= 0x(원하는 비트에 1)
interrupt는 외부요인에 작동하기 때문에 메인함수에서 따로 호출할 필요가 없다.
<코 드>
/**** Main.c ****/
|
/*** SMART.h ***/
/* 인터럽트 사용을 위한 레지스터 */
#define EICRA (*((volatile unsigned char*)0x69))
#define EICRB (*((volatile unsigned char*)0x6A))
#define EIMSK (*((volatile unsigned char*)0x3D))
#define EIFR (*((volatile unsigned char*)0x3C))
#define SREG (*((volatile unsigned char*)0x5F))
'Busan IT > AVR 컨트롤러' 카테고리의 다른 글
Interrupt와 난수를 활용한 주사위 만들기 (0) | 2015.04.15 |
---|---|
인터럽트를 활용한 LED전구 불켜기 (0) | 2015.04.14 |
7 Segment 카운터 만들기 2 (0) | 2015.04.10 |
7 semgemnt 카운터 (0) | 2015.04.09 |
Linux 무선 네트워크 설정 (0) | 2015.04.08 |