Atmega128에 버튼 연결하여 LED 불 켜기 (인터럽트 발생 조건에서)

이규진·2024년 5월 25일
post-thumbnail

1. 인터럽트란?

컴퓨터에 있는 하드웨어가 시스템 버스를 통해 CPU에 보내는 신호이다. CPU가 인터럽트 되면 하던 일을 저장하고 특정 위치로 실행을 옮긴다. 이 위치에는 서비스 루틴의 시작 주소가 있고, 이를 통해 서비스 루틴이 실행된다.

2. 서비스 루틴과 인터럽트 벡터

여기서 INT4_vect는 해당 인터럽트 벡터에 연결된 ISR의 이름이다. AVR 마이크로컨트롤러에서는 각 인터럽트에 대해 하나의 ISR이 할당된다. 이러한 ISR들은 인터럽트 벡터에 연결되어 있으며, 이를 통해 해당 인터럽트가 발생했을 때 실행되어야 하는 코드를 정의한다.

// 이 함수는 INT4 핀에 인터럽트가 발생했을 때 실행될 ISR이다.
ISR(INT4_vect){
	PORTD=0xff; // PORTD를 출력
	_delay_ms(1000); // 1초동안 LED 켜진 상태로 유지
}

INT4 벡터는 0x000A를 가지고 있다. 여기서 ISR이 시작된다.

3. 나머지 주요한 함수 및 변수 설정

1) DDRE 입력 설정:

DDRE &= ~(1<<4); // DDRE의 4번 포트만 입력으로 설정

DDRE &= ~(1<<4);는 DDRE 레지스터의 4번 비트를 클리어하여 INT4 핀을 입력 모드로 설정한다.

2) 인터럽트 설정 (EICRB, EIMSK):

EICRB = 0x02; // INT4번 인터럽트를 하강엣지에서 트리거되도록 설정
EIMSK = 0x10; // INT4번 인터럽트를 활성화

INT4번 인터럽트를 하강엣지에서 트리거 되기위해 EICRB (INT4~7번) 차트를 참고한다.


3) 글로벌 인터럽트 활성화 (sei()):

sei(); // 전역 인터럽트 활성화
profile
소프트웨어공학과, 반도체 회로 설계 공부 중

0개의 댓글