Busan IT/AVR 컨트롤러2015. 4. 13. 13:47

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 ****/


/*** 인터럽트 함수 예제 ***/

#include <atm2560.h>
//#include <avr/interrupt.h>
#include "SMART.h"



/*ISR(INT0_vect)
{
  PORTD ^= 0x01;
  return;
}*/


int main(void)
{
  SREG &= 0x7F;  //interrupt disable, 설정 중 오동작을 막기 위해

  DDRD  = 0xFE;  //PORT D의 0번만 빼고 다 출력.
  DDRA  = 0xFF;  //PORT A를 모두 출력.
  //DDRB  = 0x00;  //PORT B는 출력 포트로 사용한다. 

  PORTA   = 0x01;
  
  EICRA  = 0x02;  //스위치의 트리거 방식 설정 - 하강 에지 방식 
  EIMSK  = 0x01;  //외부 인터럽트 허용 레지스터 - 인터럽트 0 외부 인터럽트 허용 
  
  SREG  |= 0x80;  //0B 1000 0000 핀만 1을 넣어주고 나머지는 그대로  
  


  while(1)
  {
    ;
  }
  
  return 0;
}

 

/*** 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))  

 

 

반응형
Posted by newind2000