반응형

인터럽트

 - 인터럽트란 CPU 외부의 하드웨어 적인 요구에 의해서 정상적인 프로그램의 순서를

    변경하여 보다 시급한 작업을 먼저 수행한 후 원래의 프로그램으로 복귀하는 작업


인터럽트의 종류

 - 내부 인터럽트

  > CPU에 정의되어 있지 않은 명령어의 실행

  > 0으로 나눗셈을 시도하는 나눗셈에러

  > 보호된 메모리 영역에 대한 접근


 - 외부 인터럽트

  > 타이머에서의 지정된 시간 경과

  > 입력장치에서의 서비스 요구

  > A/D 변환의 완료



인터럽트의 처리과정

 - 주 프로그램 실행 -> 인터럽트 발생 -> 복귀주소 저장 -> 인터럽트 벡터로 점프

    -> 인터럽트 처리 -> 인터럽트 처리완료 -> 복귀주소 로드 -> 마지막에 실행된

    주소로 이동 -> 주 프로그램 실행


외부 인터럽트

 - 외부인터럽트는8개의 핀 (INT 7 ~ 0) 을 통해 입력되는 신호에 의하여 발생하는

   인터럽트를 말한다.

 - 외부인터럽트는 포트 D하위핀 4(INT 0~3), 포트 E상위핀 4(INT 4~7)

   사용한다.

  



SREG 레지스터 [SREG]

  - 인터럽트 핀을 활성화 하는 레지스터

  - MCU의 현 상태 및 최근 수치 명령 실행에 대한 결과를 포함한다.

  - 상태 레지스터는 모든 ALU 연산을 수행 후 갱신한다.

  - BIT7. I(Global Interrupt Enable) : 모든 인터럽트 활성화 비트


인터럽트의 종류를 설정해주는 것입니다. 


EIMSK(External Interrupt Mask) 레지스터 [EIMSK]

  - 해당 비트를(1) 시키면 해당 외부 인터럽트 핀이 활성화된다.

  - , SREGI비트가 1셋된 상태여야 한다.


EICRA 레지스터(External Interrup Control Register A) [EICRA]

  - INT0 ~ INT3입력형태를 결정


EICRB 레지스터(External Interrup Control Register B) [EICRB]

  - INT4 ~ INT7입력형태를 결정


EICR A와B는 인터럽트핀을 몇번을 사용하냐에 따라서 골라서 사용해야합니다.


인터럽트 회로는 위와 같은 방식으로 구성을 하면 됩니다. 스위치가 눌리지 않은 상태에서는 PORTD로 전류가 흘러들어가지만 스위치를 누르게 되면 저항이 없은 GND쪽으로 전류가 모두 흘러 PORTD는 인터럽트가 요청이 됩니다. 


인터럽트 예제 코드입니다. PORTG는 보드에 있는 LED 제어 핀입니다. 

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
31
32
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
 
volatile int int_flag = 0;
 
ISR(INT4_vect)
{
    int_flag ^= 1;
}
int main(void)
{      
    DDRE = 0xEF;
    DDRG = 0x03;
    PORTG = 0x01;
    SREG = 0x80// I-bit set
    EIMSK = 0x10;
    EICRB = 0x02;
 
    while(1)
    {
        if(int_flag == 1)
        {
            PORTG = 0x01;
        }
        else
            PORTG = 0x02;
    }
 
 
cs


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기