1. Edited and Added by 15기 김승호 First made by 12기한재웅 Second made by 13 김범수 Interrupt @Atmega
2. 목차 마이크로 프로세서 I/O포트에 대한 프로그램 방법 왜 인터럽트를 써야 할까? 외부 인터럽트 타이머 카운트 인터럽트 CTC 모드 및 PWM 모드 소스 코딩 및 퀴즈 재미있는 과제 1,2
3. Micro Processor 프로그래밍 분류 어떠한 작업을 수행할 시에 외부에서 들어오는 이벤트로 인해 어떠한 작업을 시행될 때 이용되는 방식 딱 두종류! 폴링 방식 인터럽트 방식
4. Polling method Polling : 명사(n) 1.투표 2.여론조사 CPU가 특정 이벤트를 처리하기 위해 그 이벤트가 발생할 때까지 모든 연산을 모니터링 하는데 쓴다. 장점 : 단일 이벤트 시에 유용 단점 : 다중 이벤트가 발생되면?
5. Interrupt method Interrupt : 동사(v) 1. 방해하다 2.중단하다 특정 요구에 의해서 정상적인 프로그램의 실행순서를 변경하여 요구한 작업을 먼저 수행한 후에 다시 원래의 프로그램으로 복귀하는 방법. 장점 : 다중처리를 효율적으로 할 수 있다. 단점 : 쓸 때 약간의 머리를 써야한다.
6. Why should we use the Interrupt method? 우리가 쓰는 컴퓨터들은 한가지 일만 하지 않는다. 즉, 다중 처리를 하고 있는 것이다. 다중처리를 위해서는 많은 CPU 자원을 낭비하는 Polling 방식보다는 Interrupt방식이 CPU를 효율적으로 사용할 수 있다! 하지만 언제나 좋지는 않다.
7. 여기서 스치는 생각. C언어에서 함수랑 좀 비슷하지 않나..? 함수와 인터럽트와 다른 점? 함수는 call할 때, 인터럽트는 인터럽트 걸릴 때 동작. 인터럽트 걸릴 때는 어떻게 조절하지?
11. 근데 레지스터가 뭐죠? Register : 사전적 의미 – 등록하다. 신고하다. 기록하다. 나타내다. 기억하다. 인식되다. 여기서의 의미 : 산술적, 논리적 연산이나 정보 해석, 전송 등을 할 수 있는 일정 길이의 정보를 저장하는 CPU내의 기억 장치. 저장 용량에는 제한되어 있으나 주기억 장치에 비해서 접근 시간이 빠르고, 체계적인 특징이 있다. 컴퓨터에는 산술 및 논리 연산의 결과를 임시로 기억하는 누산기, 기억 주소나 장치의 주소를 기억하는 주소 레지스터를 비롯하여 컴퓨터의 동작을 관리하는 각종 레지스터가 사용된다.
12.
13. 머신 사이클 : 명령어 하나를 수행하는데 걸리는 시간으로 타이머 모드에서 일정한 시간 간격이 머신 사이클의 시간 간격을 의미한다.
26. Overflow Interrupt 방금 그림에서 65535번 카운트를 했다면 모든 레지스터에 ‘1’로 채워지고, 이 때 1을 더하면 최상위 비트 자리에서 올림수가 발생, 이때가 overflow이다.
27. CTC mode CTC(Clear Time on Compare Match) Mode OCR값과 TCNT값이 맞으면 인터럽트가 호출되고 TCNT값이 리셋된다. OC0 출력파형은 인터럽트마다 Toggle된다.
28. 높은 주파수의 PWM 파형을 발생하는 유용하다. 비반전 비교 출력모드에서 TCNT0 값은 계속하여 OCR0과 비교되어 일치하면 OC0 핀을 통해 0이 출력되고, TCNT0 값이 0이 되면 1을 출력된다. Fast PWM Mode
29. #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 제어 소스 코딩 & 퀴즈!
30. 과제 1 Timer1 오버플로우 인터럽트를 이용하여 1초에 LED가 1초에 한 번 꺼졌다 켜졌다 하게 하기. 16MHz 동작속도를 가지고 있다. 분주비를 이용 TCNT1H와 TCNT1L의 초기값은 0(65536번 카운트해야 Overflow 발생) TCCR1B 레지스터 하위 3비트의 값과 계산식을 적을 것(분주비)
31. 과제 2 인터럽트(CTC모드)를 사용하여 3개의 LED 패턴 만들기(눈에서 인식할 수 있을만큼) 조건 1 : 스위치 1, 2, 3을 누를 때마다 패턴이 바뀌어야함. 조건 2 : 인터럽트에서Delay를 사용하면 안됨.