Edited and Added by 15기 김승호First made by 12기한재웅Second made by 13 김범수Interrupt @Atmega
목차마이크로 프로세서 I/O포트에 대한 프로그램 방법왜 인터럽트를 써야 할까?외부 인터럽트타이머 카운트 인터럽트CTC 모드 및 PWM 모드소스 코딩 및 퀴즈재미있는 과제 1,2
Micro Processor 프로그래밍 분류어떠한 작업을 수행할 시에 외부에서 들어오는 이벤트로 인해 어떠한 작업을 시행될 때 이용되는 방식 딱 두종류!폴링 방식인터럽트 방식
Polling  methodPolling : 명사(n) 1.투표 2.여론조사CPU가 특정 이벤트를 처리하기 위해 그 이벤트가 발생할 때까지 모든 연산을 모니터링 하는데 쓴다.장점 : 단일 이벤트 시에 유용단점 : 다중 이벤트가 발생되면?
Interrupt methodInterrupt : 동사(v) 1. 방해하다 2.중단하다특정 요구에 의해서 정상적인 프로그램의 실행순서를 변경하여 요구한 작업을 먼저 수행한 후에 다시 원래의 프로그램으로 복귀하는 방법.장점 : 다중처리를 효율적으로 할 수 있다.단점 : 쓸 때 약간의 머리를 써야한다.
Why should we use  the Interrupt method?우리가 쓰는 컴퓨터들은 한가지 일만 하지 않는다. 즉, 다중 처리를 하고 있는 것이다.다중처리를 위해서는 많은 CPU 자원을 낭비하는 Polling 방식보다는 Interrupt방식이 CPU를 효율적으로 사용할 수 있다!하지만 언제나 좋지는 않다.
여기서 스치는 생각.C언어에서 함수랑 좀 비슷하지 않나..?함수와 인터럽트와 다른 점?함수는 call할 때, 인터럽트는 인터럽트 걸릴 때 동작.인터럽트 걸릴 때는 어떻게 조절하지?
외부 인터럽트Atmega128에는 외부 인터럽트 Port : 8개(INT)외부에서 어떤 변화가 검출이 될 때 요청이 되는 인터럽트
사용레지스터 : EIMSK(External Interrupt Mask Register)외부 인터럽트 사용법
외부 인터럽트 레지스터
근데 레지스터가 뭐죠?Register : 사전적 의미 – 등록하다. 신고하다. 기록하다. 나타내다. 기억하다. 인식되다.여기서의 의미 : 산술적, 논리적 연산이나 정보 해석, 전송 등을 할 수 있는 일정 길이의 정보를 저장하는 CPU내의 기억 장치. 저장 용량에는 제한되어 있으나 주기억 장치에 비해서 접근 시간이 빠르고, 체계적인 특징이 있다. 컴퓨터에는 산술 및 논리 연산의 결과를 임시로 기억하는 누산기, 기억 주소나 장치의 주소를 기억하는 주소 레지스터를 비롯하여 컴퓨터의 동작을 관리하는 각종 레지스터가 사용된다.
타이머와 머신 사이클타이머: 일정한 시간 간격을 세는 것.
머신 사이클 : 명령어 하나를 수행하는데 걸리는 시간으로 타이머 모드에서 일정한 시간 간격이 머신 사이클의 시간 간격을 의미한다.
IF Atmega128에 16Mhz크리스탈이 있다면,  1 머신 사이클의 간격은 62.5ns, 타이머는 62.5ns마다 작동한다.타이머 카운터 인터럽트타이머 : 머신 사이클을 세는 것.카운터: 타이머에 Overflow가 일어날 때마다 숫자를 세는 것타이머 인터럽트 : 카운터를 이용하여인터럽트를 작동시키는 스위치로 사용한 인터럽트타이머 인터럽트에는 크게 타이머 모드와 카운터 모드가 있다. 시간을 세는 기능을 타이머 모드, 숫자를 세는 기능을 카운터 모드.
카운터가 1 증가하는 시점(overflow 될때, 이 기준이 바뀔 수도 있다.)
타이머가  1증가하는 시점
CLOCK(falling Edge 일 때)타이머 카운트 인터럽트
타이머 모드 & 카운트 모드타이머 모드일정한 간격의 시간을 세는 것Ex)100M 달리기할 때의 스톱워치카운트 모드일정한 간격과 관계 없이 숫자만을 세는 것Ex)계수기, 놀이공원 입장객들 체크할 때
타이머/카운터 레지스터TCNT(Timer/Counter  Register)총 4개의 타이머/카운터가 있다.Timer/Counter0,2(8bit)Timer/Counter1,3(16bit)Timer는 머신 사이클 마다 카운트된 값을 레지스터에 보관한다.Counter(0,2) : TCNT0/2 레지스터에 저장Counter(1,3) : TCNT1/3H와 TCNT1/3L 레지스터에 저장(16비트이기 때문에)
OCR(Timer/Counter Output Compare Register)오버플로(Overflow)가 일어나는 시점을 변경할 경우 그 시점을 명시해주는 레지스터Timer/Counter0,2(8bit)Timer/Counter1,3(16bit)Timer는 머신 사이클 마다 카운트된 값을 OCR값과 비교한다.Counter(0,2) : OCR0/2 레지스터에 저장Counter(1,3) : OCR1/3A,B,C H와OCR1/3A,B,C L 레지스터에 저장(16비트이기 때문에)타이머/카운터 출력비교 레지스터
타이머/카운터 0 제어 레지스터TCCR0 (Timer/Counter0 Control Register)
TCCRCS : 분주비 설정
TIMSK(Timer/Counter Interrupt Mask Register)인터럽트 Enable타이머/카운터 0 인터럽트 마스크 레지스터
타이머 / 카운터 인터럽트 전역 Enable Command모든 타이머/카운터에 대한 Enable/Disable Commmad
Overflow Interrupt타이머/카운터 레지스터인 TCNT1H:TCNT1L (타이머1 기준)가 overflow될 때, 요청되는 인터럽트
Overflow Interrupt방금 그림에서 65535번 카운트를 했다면 모든 레지스터에 ‘1’로 채워지고, 이 때 1을 더하면 최상위 비트 자리에서 올림수가 발생, 이때가 overflow이다.
CTC modeCTC(Clear Time on Compare Match) ModeOCR값과 TCNT값이 맞으면 인터럽트가 호출되고 TCNT값이 리셋된다. OC0 출력파형은 인터럽트마다 Toggle된다.
높은 주파수의 PWM 파형을 발생하는 유용하다.비반전 비교 출력모드에서 TCNT0 값은 계속하여 OCR0과 비교되어 일치하면 OC0 핀을 통해 0이 출력되고, TCNT0 값이 0이 되면 1을 출력된다.Fast PWM Mode
#include <mega8.h>Unsigned char led= 0xFE;Void main(void){DDRC=0xFF;PORTC= led;TIMSK = 0x01; // 문제 1 : 이 레지스터가 하는 일은?TCCR0= 0x07; // 문제 2 : 이 레지스터가 하는 일은?TCNT0= 0x00; // 문제3 : 이 레지스터가 하는 일은?SREG = 0x80; // 문제 4 : 이 레지스터가 하는 일은?               	//문제 5  : 이 레지스터들로 인해 생기는 인터럽트while(1);}Intrrupt [TIM0_OVF] void timer_int0(void){	led<<=1;led |= 0x01;if(led == 0xFF) led = 0xFE;PORTC = led;}답문제1 : Timer Count Interrupt Mask 레지스터, 인터럽트를 키고 끄는 역할을 한다.0x01 - 타이머 0 오버플로우 모드 ON문제2 : Timer Count Control Register타이머 모드를 제어한다.0x07 : normal 모드, 1024분주문제3 : Timer Count Register 0x00: 첫 카운터 값은 00H문제4 : SREG 전역 인터럽트 인에이블문제5: (1/16)us*1024분주*(256-0) = 0.0163초마다 인터럽트 발생하여, LED 왼쪽으로 순차 점멸LED 제어 소스 코딩 & 퀴즈!

Interrupt @atmega

  • 1.
    Edited and Addedby 15기 김승호First made by 12기한재웅Second made by 13 김범수Interrupt @Atmega
  • 2.
    목차마이크로 프로세서 I/O포트에대한 프로그램 방법왜 인터럽트를 써야 할까?외부 인터럽트타이머 카운트 인터럽트CTC 모드 및 PWM 모드소스 코딩 및 퀴즈재미있는 과제 1,2
  • 3.
    Micro Processor 프로그래밍분류어떠한 작업을 수행할 시에 외부에서 들어오는 이벤트로 인해 어떠한 작업을 시행될 때 이용되는 방식 딱 두종류!폴링 방식인터럽트 방식
  • 4.
    Polling methodPolling: 명사(n) 1.투표 2.여론조사CPU가 특정 이벤트를 처리하기 위해 그 이벤트가 발생할 때까지 모든 연산을 모니터링 하는데 쓴다.장점 : 단일 이벤트 시에 유용단점 : 다중 이벤트가 발생되면?
  • 5.
    Interrupt methodInterrupt :동사(v) 1. 방해하다 2.중단하다특정 요구에 의해서 정상적인 프로그램의 실행순서를 변경하여 요구한 작업을 먼저 수행한 후에 다시 원래의 프로그램으로 복귀하는 방법.장점 : 다중처리를 효율적으로 할 수 있다.단점 : 쓸 때 약간의 머리를 써야한다.
  • 6.
    Why should weuse the Interrupt method?우리가 쓰는 컴퓨터들은 한가지 일만 하지 않는다. 즉, 다중 처리를 하고 있는 것이다.다중처리를 위해서는 많은 CPU 자원을 낭비하는 Polling 방식보다는 Interrupt방식이 CPU를 효율적으로 사용할 수 있다!하지만 언제나 좋지는 않다.
  • 7.
    여기서 스치는 생각.C언어에서함수랑 좀 비슷하지 않나..?함수와 인터럽트와 다른 점?함수는 call할 때, 인터럽트는 인터럽트 걸릴 때 동작.인터럽트 걸릴 때는 어떻게 조절하지?
  • 8.
    외부 인터럽트Atmega128에는 외부인터럽트 Port : 8개(INT)외부에서 어떤 변화가 검출이 될 때 요청이 되는 인터럽트
  • 9.
    사용레지스터 : EIMSK(ExternalInterrupt Mask Register)외부 인터럽트 사용법
  • 10.
  • 11.
    근데 레지스터가 뭐죠?Register: 사전적 의미 – 등록하다. 신고하다. 기록하다. 나타내다. 기억하다. 인식되다.여기서의 의미 : 산술적, 논리적 연산이나 정보 해석, 전송 등을 할 수 있는 일정 길이의 정보를 저장하는 CPU내의 기억 장치. 저장 용량에는 제한되어 있으나 주기억 장치에 비해서 접근 시간이 빠르고, 체계적인 특징이 있다. 컴퓨터에는 산술 및 논리 연산의 결과를 임시로 기억하는 누산기, 기억 주소나 장치의 주소를 기억하는 주소 레지스터를 비롯하여 컴퓨터의 동작을 관리하는 각종 레지스터가 사용된다.
  • 12.
    타이머와 머신 사이클타이머:일정한 시간 간격을 세는 것.
  • 13.
    머신 사이클 :명령어 하나를 수행하는데 걸리는 시간으로 타이머 모드에서 일정한 시간 간격이 머신 사이클의 시간 간격을 의미한다.
  • 14.
    IF Atmega128에 16Mhz크리스탈이있다면, 1 머신 사이클의 간격은 62.5ns, 타이머는 62.5ns마다 작동한다.타이머 카운터 인터럽트타이머 : 머신 사이클을 세는 것.카운터: 타이머에 Overflow가 일어날 때마다 숫자를 세는 것타이머 인터럽트 : 카운터를 이용하여인터럽트를 작동시키는 스위치로 사용한 인터럽트타이머 인터럽트에는 크게 타이머 모드와 카운터 모드가 있다. 시간을 세는 기능을 타이머 모드, 숫자를 세는 기능을 카운터 모드.
  • 15.
    카운터가 1 증가하는시점(overflow 될때, 이 기준이 바뀔 수도 있다.)
  • 16.
  • 17.
    CLOCK(falling Edge 일때)타이머 카운트 인터럽트
  • 18.
    타이머 모드 &카운트 모드타이머 모드일정한 간격의 시간을 세는 것Ex)100M 달리기할 때의 스톱워치카운트 모드일정한 간격과 관계 없이 숫자만을 세는 것Ex)계수기, 놀이공원 입장객들 체크할 때
  • 19.
    타이머/카운터 레지스터TCNT(Timer/Counter Register)총 4개의 타이머/카운터가 있다.Timer/Counter0,2(8bit)Timer/Counter1,3(16bit)Timer는 머신 사이클 마다 카운트된 값을 레지스터에 보관한다.Counter(0,2) : TCNT0/2 레지스터에 저장Counter(1,3) : TCNT1/3H와 TCNT1/3L 레지스터에 저장(16비트이기 때문에)
  • 20.
    OCR(Timer/Counter Output CompareRegister)오버플로(Overflow)가 일어나는 시점을 변경할 경우 그 시점을 명시해주는 레지스터Timer/Counter0,2(8bit)Timer/Counter1,3(16bit)Timer는 머신 사이클 마다 카운트된 값을 OCR값과 비교한다.Counter(0,2) : OCR0/2 레지스터에 저장Counter(1,3) : OCR1/3A,B,C H와OCR1/3A,B,C L 레지스터에 저장(16비트이기 때문에)타이머/카운터 출력비교 레지스터
  • 21.
    타이머/카운터 0 제어레지스터TCCR0 (Timer/Counter0 Control Register)
  • 22.
  • 23.
    TIMSK(Timer/Counter Interrupt MaskRegister)인터럽트 Enable타이머/카운터 0 인터럽트 마스크 레지스터
  • 24.
    타이머 / 카운터인터럽트 전역 Enable Command모든 타이머/카운터에 대한 Enable/Disable Commmad
  • 25.
    Overflow Interrupt타이머/카운터 레지스터인TCNT1H:TCNT1L (타이머1 기준)가 overflow될 때, 요청되는 인터럽트
  • 26.
    Overflow Interrupt방금 그림에서65535번 카운트를 했다면 모든 레지스터에 ‘1’로 채워지고, 이 때 1을 더하면 최상위 비트 자리에서 올림수가 발생, 이때가 overflow이다.
  • 27.
    CTC modeCTC(Clear Timeon Compare Match) ModeOCR값과 TCNT값이 맞으면 인터럽트가 호출되고 TCNT값이 리셋된다. OC0 출력파형은 인터럽트마다 Toggle된다.
  • 28.
    높은 주파수의 PWM파형을 발생하는 유용하다.비반전 비교 출력모드에서 TCNT0 값은 계속하여 OCR0과 비교되어 일치하면 OC0 핀을 통해 0이 출력되고, TCNT0 값이 0이 되면 1을 출력된다.Fast PWM Mode
  • 29.
    #include <mega8.h>Unsigned charled= 0xFE;Void main(void){DDRC=0xFF;PORTC= led;TIMSK = 0x01; // 문제 1 : 이 레지스터가 하는 일은?TCCR0= 0x07; // 문제 2 : 이 레지스터가 하는 일은?TCNT0= 0x00; // 문제3 : 이 레지스터가 하는 일은?SREG = 0x80; // 문제 4 : 이 레지스터가 하는 일은? //문제 5 : 이 레지스터들로 인해 생기는 인터럽트while(1);}Intrrupt [TIM0_OVF] void timer_int0(void){ led<<=1;led |= 0x01;if(led == 0xFF) led = 0xFE;PORTC = led;}답문제1 : Timer Count Interrupt Mask 레지스터, 인터럽트를 키고 끄는 역할을 한다.0x01 - 타이머 0 오버플로우 모드 ON문제2 : Timer Count Control Register타이머 모드를 제어한다.0x07 : normal 모드, 1024분주문제3 : Timer Count Register 0x00: 첫 카운터 값은 00H문제4 : SREG 전역 인터럽트 인에이블문제5: (1/16)us*1024분주*(256-0) = 0.0163초마다 인터럽트 발생하여, LED 왼쪽으로 순차 점멸LED 제어 소스 코딩 & 퀴즈!