Presentation is loading. Please wait.

Presentation is loading. Please wait.

다섯째날 : 외부 인터럽트 - 당근이의 AVR 갖고 놀기 - 당근닷컴

Similar presentations


Presentation on theme: "다섯째날 : 외부 인터럽트 - 당근이의 AVR 갖고 놀기 - 당근닷컴"— Presentation transcript:

1 다섯째날 : 외부 인터럽트 - 당근이의 AVR 갖고 놀기 - 당근닷컴 http://www.carroty.com
당근닷컴 서울특별시 광진구 모진동 KCC 파크타운 1404호

2 INDEX 1 Goal 2 Introduction & Base Knowledge 3 Circuit & Environment 4
Register Setting 이전 “당근이의 AVR 갖고 놀기” 화면 5 Experiment & Result 6 Conclusion & Future Works

3 Goal 목표 인터럽트에 대한 이해 폴링 방식과 인터럽트 방식의 차이 폴링 방식이 아닌 인터럽트 방식으로 스위치 입력 처리

4 Introduction 회로도 PIN0, PIN1이 INT0, INT1에 물려있음 : PD4/PD5/PD6/PD7
동작은 전과 동일 : 평소에 HIGH, 눌려지면 LOW

5 Polling Method 앞장에서 스위치 입력을 받은 예제 : polling 방식
while(true) 부분에서 키입력을 무한히 검사한다. 원래 폴링이 이래요. #include <avr/io.h> #include "./carroty/fundamental.h" #include "./carroty/delay.h" int main(void) { unsigned char key= 0; DDRA= 0xFF; DDRD= 0x0F; while(true) { key= PIND; switch(key) { case (KEY1) : PORTA= LED1_ON; break; case (KEY2) : PORTA= LED2_ON; break; case (KEY3) : PORTA= LED3_ON; break; case (KEY4) : PORTA= LED4_ON; break; default : PORTA= 0xFF; break; } return 0;

6 Register Setting MCUCR : MCU Control Register
GICR : General Interrupt Control Register SREG : Status Register GIFR : General Interrupt Flag Register

7 Register Setting MCUCR : MCU Control Register
GICR : General Interrupt Control Register INT1=1 : PORT D3 ON / INT0=0 : PORT D3 OFF SREG I=1 : All Interrupt Enable : INT설정이 의미가 없어진다.

8 Register Setting GICR : General Interrupt Control Register
INT1=1 : PORT D3 ON / INT0=0 : PORT D3 OFF SREG I=1 : All Interrupt Enable : INT설정이 의미가 없어진다. GIFR : General Interrupt Flag Register INTF1 : INT1 입력 인터럽트 발생시 1로 설정됨 인터럽트 함수가 수행되면 0으로 설정됨 이 값을 루프를 통해 주시하는 것이 아닌 INT가 발생하면 자동으로 인터럽트 함수가 호출됨 : 이점이 폴링 방식과 다르다.

9 Example External Interrupt Method vs Polling Method
#include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> /* Interrupt Service Routine */ SIGNAL(SIG_INTERRUPT0) { PORTA= LED1_ON; } // INT0 interrupt function SIGNAL(SIG_INTERRUPT1) { PORT2= LED2_ON; } // INT1 interrupt function int main(void) { cli(); // global interrupt disable MCUCR |= 0b ; // SRE(7) : External SRAM/XMEM Enable // ISC11:ISC10(3,2) - 10 : INT1(Falling edge) // ISC01:ISC00(1,0) - 10 : INT0(Falling edge) GICR = 0b ; // INT1(7) - 1 : INT1 interrupt enable // INT0(6) - 1 : INT0 interrupt enable GIFR = 0b ; // INTF1(7) - 0 : INT1 interrupt flag clear // INTF0(6) - 0 : INT0 interrupt flag clear PORTA= LED1_OFF; PORTA= LED2_OFF; sei(); // global interrupt enable return 0; }


Download ppt "다섯째날 : 외부 인터럽트 - 당근이의 AVR 갖고 놀기 - 당근닷컴"

Similar presentations


Ads by Google